Tôi đã giới thiệu các bài kiểm tra đơn vị cho các cơ sở mã mà trước đây không có. Dự án lớn cuối cùng tôi tham gia với nơi tôi đã thực hiện sản phẩm này đã được sản xuất với các bài kiểm tra đơn vị bằng không khi tôi đến nhóm. Khi tôi rời đi - 2 năm sau - chúng tôi đã có hơn 4500 bài kiểm tra đạt năng suất bảo hiểm khoảng 33% trong cơ sở mã với 230 000 + LỘC sản xuất (ứng dụng Win-Forms tài chính theo thời gian thực). Điều đó nghe có vẻ thấp, nhưng kết quả là một sự cải thiện đáng kể về chất lượng mã và tỷ lệ lỗi - cộng với tinh thần và lợi nhuận được cải thiện.
Nó có thể được thực hiện khi bạn có cả sự hiểu biết và cam kết chính xác từ các bên liên quan.
Trước hết, điều quan trọng là phải hiểu rằng kiểm tra đơn vị là một kỹ năng trong chính nó. Bạn có thể là một lập trình viên rất năng suất theo tiêu chuẩn "thông thường" và vẫn phải vật lộn để viết các bài kiểm tra đơn vị theo cách mở rộng trong một dự án lớn hơn.
Ngoài ra, và đặc biệt cho trường hợp của bạn, thêm các bài kiểm tra đơn vị vào cơ sở mã hiện có mà không có bài kiểm tra nào cũng là một kỹ năng chuyên biệt. Trừ khi bạn hoặc ai đó trong nhóm của bạn có kinh nghiệm thành công trong việc giới thiệu các bài kiểm tra đơn vị cho cơ sở mã hiện có, tôi sẽ nói rằng việc đọc sách của Feather là một yêu cầu (không phải là tùy chọn hoặc khuyến nghị mạnh mẽ).
Thực hiện chuyển đổi để kiểm tra đơn vị mã của bạn là một sự đầu tư vào con người và kỹ năng cũng giống như chất lượng của cơ sở mã. Hiểu điều này là rất quan trọng về tư duy và quản lý kỳ vọng.
Bây giờ, cho ý kiến và câu hỏi của bạn:
Tuy nhiên, tôi lo ngại rằng cuối cùng tôi sẽ bỏ lỡ bức tranh lớn và cuối cùng lại bỏ lỡ các bài kiểm tra cơ bản sẽ được đưa vào nếu tôi sử dụng TDD ngay từ đầu.
Câu trả lời ngắn: Có, bạn sẽ bỏ lỡ các bài kiểm tra và vâng, ban đầu chúng có thể không giống như những gì chúng sẽ có trong tình huống trường xanh.
Câu trả lời sâu hơn là đây: Không thành vấn đề. Bạn bắt đầu không có bài kiểm tra. Bắt đầu thêm các bài kiểm tra và tái cấu trúc khi bạn đi. Khi mức độ kỹ năng trở nên tốt hơn, hãy bắt đầu nâng cao thanh cho tất cả các mã mới được viết vào dự án của bạn. Tiếp tục cải thiện vv ...
Bây giờ, đọc ở giữa các dòng ở đây tôi có ấn tượng rằng điều này xuất phát từ suy nghĩ "sự hoàn hảo như một cái cớ để không hành động". Một suy nghĩ tốt hơn là tập trung vào sự tự tin. Vì vậy, vì bạn có thể không biết làm thế nào để làm điều đó, bạn sẽ tìm ra làm thế nào để bạn đi và điền vào chỗ trống. Do đó, không có lý do để lo lắng.
Một lần nữa, nó là một kỹ năng. Bạn không thể đi từ các bài kiểm tra 0 đến hoàn hảo TDD trong một "quy trình" hoặc "từng bước" cách tiếp cận sách nấu ăn theo kiểu tuyến tính. Nó sẽ là một quá trình. Kỳ vọng của bạn phải được thực hiện dần dần và tăng dần và cải thiện. Không có viên thuốc kỳ diệu.
Tin tốt là khi nhiều tháng (và thậm chí nhiều năm) trôi qua, mã của bạn sẽ dần bắt đầu trở thành mã "được kiểm tra tốt" và được kiểm tra tốt.
Như một lưu ý phụ. Bạn sẽ thấy rằng trở ngại chính trong việc giới thiệu các bài kiểm tra đơn vị trong một cơ sở mã cũ là thiếu sự gắn kết và phụ thuộc quá mức. Do đó, bạn có thể sẽ thấy rằng kỹ năng quan trọng nhất sẽ trở thành cách phá vỡ các phụ thuộc hiện có và mã tách riêng, thay vì tự viết các bài kiểm tra đơn vị thực tế.
Có bất kỳ quy trình / bước nào cần được tuân thủ để đảm bảo rằng một giải pháp hiện có được kiểm tra đúng đơn vị và không chỉ được đưa vào?
Trừ khi bạn đã có nó, hãy thiết lập một máy chủ xây dựng và thiết lập một bản dựng tích hợp liên tục chạy trên mọi đăng ký bao gồm tất cả các bài kiểm tra đơn vị có độ bao phủ mã.
Huấn luyện người của bạn.
Bắt đầu ở đâu đó và bắt đầu thêm các bài kiểm tra trong khi bạn tiến bộ từ quan điểm của khách hàng (xem bên dưới).
Sử dụng phạm vi bảo hiểm mã làm tài liệu tham khảo hướng dẫn về số lượng cơ sở mã sản xuất của bạn đang được thử nghiệm.
Thời gian xây dựng phải luôn NHANH CHÓNG. Nếu thời gian xây dựng của bạn chậm, kỹ năng kiểm tra đơn vị của bạn sẽ bị chậm trễ. Tìm các thử nghiệm chậm và cải thiện chúng (tách mã sản xuất và thử nghiệm riêng rẽ). Được viết tốt, bạn nên dễ dàng có thể có hàng ngàn bài kiểm tra đơn vị và vẫn hoàn thành bản dựng trong vòng dưới 10 phút (~ 1 vài ms / bài kiểm tra là một hướng dẫn tốt nhưng rất thô sơ, một số trường hợp ngoại lệ có thể áp dụng như mã sử dụng phản xạ, v.v. ).
Kiểm tra và thích nghi.
Làm cách nào tôi có thể đảm bảo rằng các bài kiểm tra có chất lượng tốt và không chỉ là trường hợp của bất kỳ bài kiểm tra nào tốt hơn không có bài kiểm tra nào.
Đánh giá của riêng bạn phải là nguồn thực tế chính của bạn. Không có số liệu có thể thay thế kỹ năng.
Nếu bạn không có kinh nghiệm hoặc phán xét đó, hãy xem xét ký hợp đồng với ai đó.
Hai chỉ số phụ thô là tổng độ bao phủ mã và tốc độ xây dựng.
Có đáng nỗ lực cho một giải pháp hiện có trong sản xuất không?
Đúng. Phần lớn số tiền chi cho một hệ thống hoặc giải pháp được xây dựng tùy chỉnh được chi sau khi nó được đưa vào sản xuất. Và đầu tư vào chất lượng, con người và kỹ năng không bao giờ nên lỗi thời.
Nó sẽ tốt hơn để bỏ qua thử nghiệm cho dự án này và thêm nó trong một lần viết lại có thể trong tương lai?
Bạn sẽ phải cân nhắc, không chỉ đầu tư vào con người và kỹ năng, mà quan trọng nhất là tổng chi phí sở hữu và thời gian sống dự kiến của hệ thống.
Câu trả lời cá nhân của tôi sẽ là "có tất nhiên" trong phần lớn các trường hợp bởi vì tôi biết nó tốt hơn rất nhiều, nhưng tôi nhận ra rằng có thể có ngoại lệ.
Điều gì sẽ có lợi hơn; dành một vài tuần để thêm các bài kiểm tra hoặc một vài tuần thêm chức năng?
Cũng không. Cách tiếp cận của bạn nên là thêm các bài kiểm tra vào cơ sở mã của bạn KHI bạn đang tiến bộ về chức năng.
Một lần nữa, đó là một sự đầu tư vào con người, kỹ năng VÀ chất lượng của cơ sở mã và do đó nó sẽ đòi hỏi thời gian. Các thành viên trong nhóm cần học cách phá vỡ sự phụ thuộc, viết bài kiểm tra đơn vị, tìm hiểu thói quen mới, nâng cao kỷ luật và nhận thức về chất lượng, cách thiết kế phần mềm tốt hơn, v.v. Điều quan trọng là phải hiểu rằng khi bạn bắt đầu thêm bài kiểm tra, các thành viên trong nhóm của bạn có thể không có những kỹ năng này ở mức độ cần thiết để phương pháp đó thành công, vì vậy, dừng tiến độ để dành toàn bộ thời gian để thêm nhiều bài kiểm tra đơn giản là sẽ không hiệu quả.
Ngoài ra, việc thêm các thử nghiệm đơn vị vào một cơ sở mã hiện có của bất kỳ quy mô dự án lớn nào là một công việc LỚN đòi hỏi sự cam kết và kiên trì. Bạn không thể thay đổi một cái gì đó cơ bản, mong đợi rất nhiều học hỏi trên đường và yêu cầu nhà tài trợ của bạn không mong đợi bất kỳ ROI nào bằng cách tạm dừng dòng giá trị doanh nghiệp. Điều đó sẽ không bay, và thẳng thắn là không nên.
Thứ ba, bạn muốn thấm nhuần các giá trị tập trung kinh doanh trong nhóm của bạn. Chất lượng không bao giờ đến với chi phí của khách hàng và bạn không thể đi nhanh mà không có chất lượng. Ngoài ra, khách hàng đang sống trong một thế giới đang thay đổi, và công việc của bạn là giúp anh ta dễ dàng thích nghi hơn. Liên kết khách hàng đòi hỏi cả chất lượng và dòng chảy của giá trị kinh doanh.
Những gì bạn đang làm là trả hết nợ kỹ thuật. Và bạn đang làm như vậy trong khi vẫn phục vụ khách hàng của bạn luôn thay đổi nhu cầu. Dần dần khi nợ được trả, tình hình được cải thiện, và dễ dàng phục vụ khách hàng tốt hơn và mang lại nhiều giá trị hơn. V.v. Động lực tích cực này là những gì bạn nên hướng tới vì nó nhấn mạnh các nguyên tắc của tốc độ bền vững và sẽ duy trì và cải thiện đạo đức - cho cả nhóm phát triển, khách hàng và các bên liên quan của bạn.
Mong rằng sẽ giúp