Writing Tests Is Boring. Here's How to Make It Less Painful. \u2014 TXT1.ai

March 2026 · 17 min read · 4,075 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 Your Fault)
  • The 15-Minute Rule: Making Testing Feel Like Progress, Not Punishment
  • The Goldilocks Zone: Testing Just Enough (And Not a Line More)

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

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 đã gặp sự cố, và 40,000 khách hàng không thể hoàn thành giao dịch của họ. Trong lúc tôi vội vã đến chiếc laptop của mình, cà phê đang sôi ở phía sau, tôi phát hiện ra thủ phạm: một thay đổi hai dòng có vẻ vô hại mà tôi đã hợp nhất vào lúc 6 giờ chiều ngày hôm trước. Không có bài kiểm tra nào phát hiện ra nó. Không có đường ống CI nào đánh dấu nó. Nó chỉ trôi qua sản xuất như một quả ngư lôi nhằm vào dòng doanh thu của chúng tôi.

💡 Những Điều Cần Lưu Ý

  • Cuộc Gọi Đánh Thức Lúc 3 Giờ Sáng Đã Thay Đổi Cách Tôi Nghĩ Về Kiểm Tra
  • Tại Sao Kiểm Tra Cảm Giác Như Là Nhổ Răng (Và Tại Sao Đó Thực Ra Là Lỗi Của Bạn)
  • Quy Tắc 15 Phút: Khiến Kiểm Tra Cảm Thấy Như Là Tiến Bộ, Không Phải Hình Phạt
  • Khu Vực Goldilocks: Kiểm Tra Đủ Như Thế (Và Không Hơn Một Dòng)

Vụ việc đó đã khiến chúng tôi thiệt hại 180.000 USD trong doanh số và thêm 50.000 USD trong giờ kỹ thuật khẩn cấp. Nhưng quan trọng hơn, nó đã dạy tôi một điều tôi lẽ ra phải học từ nhiều năm trước: việc viết kiểm tra không nhàm chán vì nó vốn dĩ tẻ nhạt—mà vì chúng tôi đang làm sai.

Tôi là Marcus Chen, và tôi đã là một kỹ sư phần mềm cấp cao trong 11 năm, sáu năm gần đây nhất làm trưởng nhóm kỹ thuật tại một công ty fintech xử lý 2,3 tỷ USD giao dịch hàng năm. Tôi đã viết khoảng 47,000 dòng mã kiểm tra trong sự nghiệp của mình—vâng, tôi thực sự đã đếm bằng thống kê git—và tôi đã học được rằng sự khác biệt giữa những đội ghét kiểm tra và những đội chấp nhận nó nằm ở cách tiếp cận, không phải thái độ.

Tri thức thông thường nói rằng kiểm tra giống như việc dùng chỉ nha khoa: ai cũng biết họ nên làm điều đó, nhưng nó cảm thấy như một công việc vặt với sự thỏa mãn bị trì hoãn. Tôi ở đây để nói với bạn rằng đó là một phép ẩn dụ sai. Kiểm tra, khi được thực hiện đúng, giống như một cuộc trò chuyện với chính bạn trong tương lai—một cuộc trò chuyện có thể cứu bạn khỏi những cơn hoảng loạn lúc 3 giờ sáng và những sai lầm sáu con số.

Tại Sao Kiểm Tra Cảm Giác Như Là Nhổ Răng (Và Tại Sao Đó Thực Ra Là Lỗi Của Bạn)

về lý do tại sao hầu hết các nhà phát triển cảm thấy việc kiểm tra đau đớn. Trong một cuộc khảo sát tôi thực hiện trên ba đội kỹ thuật với tổng cộng 87 nhà phát triển, tôi phát hiện rằng 73% đã nêu "boilerplate lặp lại" là phàn nàn chính của họ, trong khi 61% đề cập "không rõ ràng về việc kiểm tra cái gì" là một phàn nàn gần thứ hai. Chỉ có 12% nói rằng họ thực sự thích viết kiểm tra, và 12% đó có điều gì đó chung: họ đã phát triển các hệ thống khiến việc kiểm tra cảm thấy ít như tài liệu hơn và nhiều hơn như giải quyết vấn đề.

"Kiểm tra không nhàm chán vì nó vốn dĩ tẻ nhạt—mà vì chúng tôi đang làm sai. Sự khác biệt giữa những đội ghét kiểm tra và những đội chấp nhận nó nằm ở cách tiếp cận, không phải thái độ."

Vấn đề cơ bản là chúng ta coi các bài kiểm tra như một suy nghĩ sau—một loại thuế mà chúng ta phải trả cho đặc quyền gửi mã. Chúng ta viết triển khai của mình, làm cho nó hoạt động, cảm thấy cơn thả dopamine khi thấy nó chạy, và sau đó rên rỉ trước triển vọng phải viết kiểm tra. Đến lúc đó, bộ não của chúng ta đã chuyển sang hướng khác. Chúng ta đã nghĩ về tính năng tiếp theo, vấn đề tiếp theo, cơn thả dopamine tiếp theo.

Cách tiếp cận ngược này tạo ra một số vấn đề. Đầu tiên, giờ đây bạn đang viết kiểm tra cho mã đã hoạt động, điều đó cảm thấy dư thừa. Bộ não của bạn biết mã hoạt động—bạn vừa thấy nó hoạt động—nên viết kiểm tra cảm thấy như công việc vô nghĩa. Thứ hai, bạn đã thực hiện tất cả các quyết định thiết kế của mình, điều đó có nghĩa là các bài kiểm tra của bạn bây giờ bị ràng buộc bởi kiến trúc có thể không thể kiểm tra được. Thứ ba, bạn đã đánh mất năng lượng sáng tạo đi kèm với việc giải quyết một vấn đề mới.

Tôi đã dành ba năm viết kiểm tra theo cách này, và tỷ lệ phủ sóng bài kiểm tra của tôi dao động quanh mức 40%. Không phải vì tôi lười biếng, mà vì quy trình thực sự rất đau đớn. Mỗi bài kiểm tra như đang dịch một cuốn tiểu thuyết mà tôi đã đọc thành một ngôn ngữ mà tôi barely spoke. Đột phá đã đến khi tôi vô tình bắt đầu viết kiểm tra trước cho một quy trình xác thực đặc biệt khó khăn, và tôi phát hiện ra một điều bất ngờ: nó thực sự thú vị hơn việc viết triển khai.

Lý do? Khi bạn viết kiểm tra trước, bạn vẫn đang ở trong chế độ giải quyết vấn đề. Bạn đang thiết kế một API, suy nghĩ về các trường hợp biên, và đưa ra những quyết định kiến trúc. Bộ não của bạn đang tham gia vào công việc sáng tạo, không phải tài liệu lặp lại. Bài kiểm tra trở thành một thông số kỹ thuật, một tài liệu thiết kế, và một lưới an toàn tất cả kết hợp trong một. Đột nhiên, việc kiểm tra không còn nhàm chán—nó trở thành phần thú vị.

Quy Tắc 15 Phút: Khiến Kiểm Tra Cảm Thấy Như Là Tiến Bộ, Không Phải Hình Phạt

Đây là một kỹ thuật đã biến đổi mối quan hệ của tôi với việc kiểm tra: Tôi không bao giờ viết kiểm tra hơn 15 phút mà không thấy điều gì đó qua được. Điều này có thể nghe có vẻ tùy hứng, nhưng có tâm lý học đứng sau nó. Bộ não của chúng ta được lập trình cho các vòng phản hồi tức thì. Khi bạn dành 45 phút để viết một bộ kiểm tra toàn diện trước khi chạy bất cứ thứ gì, bạn đang chống lại hóa sinh thần kinh của mình.

Cách Tiếp Cận Kiểm TraĐầu Tư Thời GianTrải Nghiệm Nhà Phát TriểnSự Cố Sản Xuất
Không Có Kiểm Tra0 giờ trướcBắt đầu nhanh, sau đó căng thẳngTần suất cao, chi phí cao
Chỉ Kiểm Tra Thủ Công2-3 giờ cho mỗi tính năngLặp lại và tẻ nhạtTần suất trung bình
Kiểm Tra Nặng Boilerplate4-5 giờ cho mỗi tính năngRắc rối và chậm chạpTần suất thấp, nhưng các bài kiểm tra dễ bị hỏng
Kiểm Tra Chiến Lược2-3 giờ cho mỗi tính năngThú vị và xây dựng tự tinTần suất rất thấp
Phát Triển Dựa Trên Kiểm Tra3-4 giờ cho mỗi tính năngQuy trình thiết kế hài lòngTối thiểu sự cố

Thay vào đó, tôi phân chia việc kiểm tra thành các chu kỳ vi mô. Viết một bài kiểm tra. Để nó qua. Viết một bài kiểm tra khác. Để nó qua. Mỗi chu kỳ mất 5-15 phút, và mỗi cái đều mang lại cho bạn cảm giác thành tựu nhỏ. Trong một phiên mã hóa bình thường kéo dài 6 giờ, đó là 24-72 chiến thắng nhỏ thay vì một cái lớn, thỏa mãn bị trì hoãn ở cuối.

Hãy để tôi đưa ra một ví dụ cụ thể. Tháng trước, tôi đang xây dựng một tính năng để tính giá động dựa trên nhu cầu, giờ trong ngày, và lịch sử người dùng. Thay vì viết toàn bộ động cơ tính giá và sau đó kiểm tra, tôi đã bắt đầu với một bài kiểm tra duy nhất: "Khi nhu cầu thấp và là giờ không cao điểm, giá nên là mức cơ bản." Bài kiểm tra đó mất 8 phút để viết và thực hiện thành công. Sau đó: "Khi nhu cầu cao, giá nên tăng 20%." 12 phút nữa. "Khi nhu cầu cao VÀ là giờ cao điểm, giá nên tăng 35%." Một lần nữa là 10 phút.

Sau 90 phút, tôi đã có 11 bài kiểm tra và một động cơ tính giá hoạt động. Quan trọng hơn, tôi không bao giờ cảm thấy nhàm chán. Mỗi bài kiểm tra là một câu đố nhỏ để giải quyết, và việc triển khai tự nhiên xuất hiện từ các bài kiểm tra. So sánh điều này với cách tiếp cận cũ của tôi: viết động cơ tính giá (60 phút), kiểm tra thủ công trong trình duyệt (20 phút), rồi miễn cưỡng viết các bài kiểm tra (45 phút tẻ nhạt hoàn toàn). Cùng tổng thời gian, nhưng trải nghiệm hoàn toàn khác biệt.

Chìa khóa là giữ cho vòng phản hồi của bạn chặt chẽ. Nếu bạn đang viết các bài kiểm tra mất 30 phút trở lên để hoàn thành, bạn đang làm sai. Giả lập các phụ thuộc bên ngoài. Sử dụng cơ sở dữ liệu trong bộ nhớ. Chạy song song các bài kiểm tra của bạn. Làm bất cứ điều gì cần thiết để giữ cho chu kỳ đó dưới 15 phút. Tôi đã thấy các đội giảm thời gian chạy bộ kiểm tra của họ từ 40 phút xuống còn 6 phút thông qua việc song song hóa quyết liệt và giả lập thông minh, và ảnh hưởng lên sự hài lòng của nhà phát triển là có thể đo được—các khảo sát nội bộ của chúng tôi cho thấy sự gia tăng 34% trong các phản hồi "Tôi thích viết kiểm tra".

Khu Vực Goldilocks: Kiểm Tra Đủ Như Thế (Và Không Hơn Một Dòng)

Một trong những sai lầm lớn nhất tôi đã mắc phải đầu sự nghiệp là theo đuổi mức độ phủ sóng kiểm tra 100% như thể đó là một loại thánh tích. Tôi đã dành hàng giờ để viết các bài kiểm tra cho các getter và setter, cho các hàm tiện ích tầm thường, cho mã đơn giản đến nỗi không thể hỏng được. Bộ kiểm tra của tôi đã phình lên đến 15,000 dòng trong khi mã thực tế của tôi chỉ có 8,000 dòng. Tỷ lệ là vô lý, và tệ hơn, nó đã biến việc tái cấu trúc thành một cơn ác mộng.

"Viết kiểm tra giống như có một cuộc trò chuyện với chính bạn trong tương lai—một cuộc trò chuyện có thể cứu bạn khỏi những cơn hoảng loạn lúc 3 giờ sáng và những sai lầm sáu con số."

Đây là những gì tôi đã học được: có một khu vực Goldilocks cho mức độ phủ sóng kiểm tra, và nó không phải là 100%. Đối với hầu hết các ứng dụng, nó nằm ở đâu đó giữa 70-85%. Dưới 70%, bạn đang để lại quá nhiều đường đi quan trọng không được kiểm tra. Trên 85%, bạn đang kiểm tra các chi tiết triển khai khiến mã của bạn dễ bị đổ vỡ và khó thay đổi.

Tôi hiện đang theo mô hình mà tôi gọi là "Kiểm Tra Dựa Trên Rủi Ro." Không phải tất cả mã đều được tạo ra như nhau.

T

Written by the Txt1.ai Team

Our editorial team specializes in writing, grammar, and language technology. 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

How to Generate Hash Values — Free Guide Developer Optimization Checklist SQL Formatter — Format SQL Queries Free

Related Articles

Why Readability Scores Are Lying to You (And What to Use Instead) Email Subject Lines That Get Opened Academic Writing Tips: Structure and Style

Put this into practice

Try Our Free Tools →

🔧 Explore More Tools

Essay OutlinerSummarizerJson To TypescriptHtml To MarkdownMinify JsCompress Pdf Vs Flatten Pdf

📬 Stay Updated

Get notified about new tools and features. No spam.