Phiên bản cực ngắn: các thử nghiệm nhỏ hơn, vì chúng chạy các phần nhỏ hơn của hệ thống, hạn chế một cách tự nhiên những gì lập trình viên có thể viết, và do đó điều này tạo ra cơ hội cho phản hồi sắc nét hơn (dễ nhận thấy hơn / khó bỏ qua hơn). Hãy để tôi nói thêm rằng điều này không nhất thiết dẫn đến thiết kế tốt hơn, nhưng thay vào đó nó tạo ra cơ hội để nhận thấy rủi ro thiết kế sớm hơn.
Đầu tiên, để làm rõ, khi tôi nói "microtest" tôi có nghĩa là "một bài kiểm tra nhỏ" và không có gì nữa. Tôi sử dụng thuật ngữ này bởi vì tôi không có nghĩa là "kiểm tra đơn vị": Tôi không muốn bị lôi kéo vào các cuộc tranh luận về những gì cấu thành một "đơn vị". Tôi không quan tâm (ít nhất là không ở đây / bây giờ). Hai người có thể sẽ dễ dàng đồng ý về "nhỏ" hơn so với "đơn vị", vì vậy tôi dần dần quyết định chấp nhận "microtest" như một thuật ngữ tiêu chuẩn mới nổi cho ý tưởng này.
Các thử nghiệm lớn hơn, nghĩa là các thử nghiệm chạy các phần lớn hơn của hệ thống trong phần "hành động" của chúng, có xu hướng không chỉ trích thiết kế rõ ràng cũng như hoàn toàn như các thử nghiệm nhỏ hơn. Hãy tưởng tượng tập hợp tất cả các cơ sở mã có thể vượt qua một nhóm thử nghiệm nhất định, nghĩa là tôi có thể sắp xếp lại mã và nó vẫn sẽ vượt qua các thử nghiệm đó. Đối với các bài kiểm tra lớn hơn, bộ này lớn hơn; đối với các thử nghiệm nhỏ hơn, bộ này nhỏ hơn. Nói cách khác, các thử nghiệm nhỏ hơn hạn chế thiết kế nhiều hơn, do đó, ít thiết kế hơn có thể khiến chúng vượt qua. Bằng cách này, microtests có thể chỉ trích thiết kế nhiều hơn.
Tôi nói "gay gắt hơn" để gợi lên hình ảnh của một người bạn nói trực tiếp với bạn những gì bạn không muốn nghe, nhưng cần nghe, và ai la mắng bạn để truyền đạt sự khẩn cấp theo cách mà người khác có thể không cảm thấy thoải mái đang làm. Mặt khác, các bài kiểm tra tích hợp, giữ im lặng và chỉ gợi ý về các vấn đề chủ yếu là khi bạn không còn thời gian và năng lượng để giải quyết chúng. Các thử nghiệm tích hợp làm cho quá dễ dàng để quét các vấn đề thiết kế dưới tấm thảm.
Với các thử nghiệm lớn hơn (như các thử nghiệm tích hợp), các lập trình viên có xu hướng gặp rắc rối thông qua sự chậm chạp: họ có đủ tự do để viết mã bị rối bằng cách nào đó vượt qua các thử nghiệm, nhưng sự hiểu biết của họ về mã đó nhanh chóng biến mất ngay khi họ chuyển sang nhiệm vụ tiếp theo và những người khác gặp khó khăn không đáng có khi đọc thiết kế rối. Ở đây có nguy cơ dựa vào các bài kiểm tra tích hợp. Với các thử nghiệm nhỏ hơn (như microtest), các lập trình viên có xu hướng gặp rắc rối thông qua thông số kỹ thuật quá mức: họ hạn chế các thử nghiệm bằng cách thêm các chi tiết không liên quan, thường bằng cách sao chép / dán từ thử nghiệm trước đó và do đó họ tự vẽ tương đối nhanh vào một góc. Tin tốt: Tôi thấy dễ dàng và an toàn hơn nhiều khi loại bỏ các chi tiết không liên quan khỏi các bài kiểm tra vài giờ hoặc vài ngày sau khi tôi viết chúng hơn là tôi thấy nó để tách mã sản xuất bị rối vài tháng đến nhiều năm sau khi tôi viết nó. Khi sai lầm xảy ra, việc chỉ định quá mức sẽ gây ra thiệt hại ngày càng rõ ràng nhanh hơn và lập trình viên cảnh báo nhận thấy trước đó rằng họ cần sửa chữa mọi thứ. Tôi coi đây là một thế mạnh: Tôi nhận thấy các vấn đề sớm hơn và khắc phục chúng trước khi những vấn đề đó bóp nghẹt khả năng của chúng tôi để thêm các tính năng.