Tôi có một giai thoại liên quan từ một cái gì đó đang xảy ra ngay bây giờ cho tôi. Tôi đang tham gia một dự án không sử dụng TDD. Những người QA của chúng tôi đang đưa chúng tôi đi theo hướng đó, nhưng chúng tôi là một bộ trang phục nhỏ và đó là một quá trình dài, rút ra.
Dù sao , gần đây tôi đã sử dụng thư viện của bên thứ ba để thực hiện một nhiệm vụ cụ thể. Có một vấn đề liên quan đến việc sử dụng thư viện đó, do đó, về cơ bản tôi đã tự mình viết một phiên bản của thư viện đó. Tổng cộng, nó đã trở thành khoảng 5.000 dòng mã thực thi và khoảng 2 tháng thời gian của tôi. Tôi biết các dòng mã là một số liệu kém, nhưng đối với câu trả lời này, tôi cảm thấy đó là một chỉ số tốt về độ lớn.
Có một cấu trúc dữ liệu cụ thể mà tôi cần, cho phép tôi theo dõi số lượng bit tùy ý. Vì dự án là ở Java, tôi đã chọn Java BitSet
và sửa đổi nó một chút (tôi cũng cần khả năng theo dõi các 0
s hàng đầu , điều mà Bitset của Java không làm vì một số lý do .....). Sau khi đạt phạm vi bảo hiểm ~ 93%, tôi bắt đầu viết một số bài kiểm tra thực sự sẽ làm căng thẳng hệ thống mà tôi đã viết. Tôi cần phải đánh giá các khía cạnh nhất định của chức năng để đảm bảo chúng sẽ đủ nhanh cho các yêu cầu cuối cùng của tôi. Không có gì đáng ngạc nhiên, một trong những chức năng mà tôi đã ghi đè từ BitSet
giao diện bị chậm một cách vô lý khi xử lý các tập bit lớn (trong trường hợp này là hàng trăm triệu bit). Các chức năng ghi đè khác dựa vào chức năng này, vì vậy nó là một cổ chai lớn .
Cuối cùng, tôi đã đi đến bảng vẽ và tìm ra cách để điều khiển cấu trúc cơ bản của nó BitSet
, đó là một long[]
. Tôi đã thiết kế thuật toán, hỏi các đồng nghiệp về đầu vào của họ và sau đó tôi bắt đầu viết mã. Sau đó, tôi chạy thử nghiệm đơn vị. Một số trong số chúng đã bị hỏng, và những cái đã chỉ cho tôi chính xác nơi tôi cần tìm trong thuật toán của mình để sửa nó. Sau khi sửa tất cả các lỗi từ các bài kiểm tra đơn vị, tôi có thể nói rằng hàm này hoạt động như bình thường. Ít nhất, tôi có thể tự tin rằng thuật toán mới này hoạt động tốt như thuật toán trước đó.
Tất nhiên, đây không phải là bằng chứng đạn. Nếu có lỗi trong mã của tôi mà đơn vị kiểm tra không kiểm tra, thì tôi sẽ không biết. Nhưng tất nhiên, lỗi chính xác đó cũng có thể có trong thuật toán chậm hơn của tôi. Tuy nhiên , tôi có thể nói với một mức độ tin cậy cao rằng tôi không phải lo lắng về đầu ra sai từ chức năng cụ thể đó. Các thử nghiệm đơn vị có sẵn đã giúp tôi tiết kiệm hàng giờ, có lẽ là vài ngày, khi thử kiểm tra thuật toán mới để đảm bảo nó chính xác.
Đó là điểm có các bài kiểm tra đơn vị bất kể TDD - có nghĩa là, các bài kiểm tra đơn vị sẽ làm điều này cho bạn trong TDD và bên ngoài TDD đều giống nhau, khi bạn kết thúc việc tái cấu trúc / duy trì mã. Tất nhiên, điều này sẽ được kết hợp với kiểm tra thường xuyên hồi quy, kiểm tra khói, thử nghiệm mờ, vv, nhưng đơn vị thử nghiệm, như các tiểu bang tên, kiểm tra những thứ trên, mức độ nguyên tử nhỏ nhất có thể, mang đến cho bạn hướng vào nơi lỗi đã xuất hiện bất ngờ.
Trong trường hợp của tôi, nếu không có các bài kiểm tra đơn vị hiện có, bằng cách nào đó tôi sẽ phải đưa ra một phương pháp đảm bảo thuật toán hoạt động mọi lúc. Cuối cùng ... nghe có vẻ giống như thử nghiệm đơn vị , phải không?