Tôi là kỹ sư cao cấp làm việc trong một nhóm gồm bốn người khác trên một ứng dụng quản lý nội dung được phát triển tại nhà quản lý nội dung giúp trang web thể thao chuyên nghiệp lớn của Hoa Kỳ có trang web . Chúng tôi đã bắt tay vào dự án này cách đây hai năm và đã chọn Java làm nền tảng của chúng tôi, mặc dù câu hỏi của tôi không phải là Java cụ thể. Kể từ khi chúng tôi bắt đầu, đã có một số churn trong hàng ngũ của chúng tôi. Mỗi người trong chúng ta có một mức độ quan trọng về vĩ độ trong việc quyết định triển khai chi tiết , mặc dù các quyết định quan trọng được đưa ra bởi sự đồng thuận.Làm thế nào để áp dụng TDD và đảm bảo tuân thủ?
Chúng tôi là một dự án tương đối trẻ, tuy nhiên chúng tôi đã ở một điểm khi không có nhà phát triển nào biết mọi thứ về ứng dụng. Nguyên nhân chính của là tốc độ phát triển nhanh chóng của chúng tôi, hầu hết trong số đó xảy ra trong một cuộc khủng hoảng dẫn đến phần mở đầu mùa giải của môn thể thao của chúng tôi; và thực tế là bảo hiểm thử nghiệm của chúng tôi về cơ bản là 0.
Chúng ta đều hiểu được lợi ích lý thuyết của TDD và đồng ý bằng nguyên tắc phương pháp luận sẽ được cải thiện cuộc sống của chúng tôi và mã chất lượng nếu chúng ta đã bắt đầu ra ngoài và bị mắc kẹt với nó qua số năm. Điều này không bao giờ giữ, và bây giờ chúng tôi đang phụ trách một mã số chưa được kiểm tra mà vẫn đòi hỏi nhiều mở rộng và đang tích cực sử dụng trong sản xuất và dựa vào cấu trúc của công ty.
Đối mặt với tình trạng này, tôi thấy chỉ có hai giải pháp có thể: (1) hồi tố viết bài kiểm tra cho mã hiện tại, hoặc (2) tái viết càng nhiều của ứng dụng như là thực tế khi cuồng tín tôn trọng TDD nguyên tắc . Tôi nhận thấy (1) như vậy và không thực tế lớn bởi vì chúng tôi có biểu đồ phụ thuộc địa ngục trong dự án. Hầu như không ai trong số các thành phần của chúng tôi có thể được kiểm tra riêng biệt; chúng tôi không biết tất cả các trường hợp sử dụng ; và các trường hợp sử dụng có thể sẽ thay đổi trong khi thử nghiệm do yêu cầu kinh doanh hoặc phản ứng với các vấn đề không lường trước được. Đối với những lý do này, chúng tôi không thể chắc chắn rằng các thử nghiệm của chúng tôi sẽ chuyển thành là chất lượng cao khi chúng tôi đã hoàn tất. Có nguy cơ dẫn dắt đội bóng vào cảm giác an toàn sai lầm, theo đó các lỗi tinh vi sẽ leo lên trong mà không có ai chú ý. Với triển vọng ảm đạm liên quan đến ROI, sẽ rất khó cho bản thân tôi hoặc nhóm của chúng tôi dẫn đến biện minh cho nỗ lực quản lý này .
Phương pháp (2) hấp dẫn hơn vì chúng tôi sẽ tuân theo nguyên tắc thử nghiệm đầu tiên, do đó tạo mã gần như được che phủ 100% ngay trước số . Ngay cả khi nỗ lực ban đầu dẫn đến các hòn đảo có mã bảo hiểm tại trước tiên, điều này sẽ cung cấp cho chúng tôi một bãi biển lớn trên đường đến phạm vi phủ sóng trên toàn dự án và giúp phân tách các thành phần khác nhau.
Nhược điểm trong cả hai trường hợp là hiệu suất kinh doanh của nhóm chúng tôi có thể làm chậm đáng kể hoặc bay hơi đáng kể hoặc bốc hơi hoàn toàn trong bất kỳ thử nghiệm nào. Chúng tôi không thể đủ khả năng để làm điều này trong thời gian các cuộc khủng hoảng kinh doanh theo định hướng, mặc dù nó theo sau là một tương đối lull mà chúng tôi có thể khai thác cho các mục đích của chúng tôi.
Ngoài việc chọn phương pháp phù hợp (hoặc (1), (2) hoặc một giải pháp chưa biết), tôi cần trợ giúp trả lời câu hỏi sau đây: Làm thế nào để nhóm của tôi đảm bảo rằng nỗ lực của chúng tôi là không ' t bị lãng phí trong thời gian dài bởi các thử nghiệm không được duy trì và/hoặc không viết các yêu cầu mới khi yêu cầu kinh doanh được thực hiện? Tôi mở cửa cho một loạt các đề xuất ở đây, cho dù chúng liên quan đến cà rốt hay gậy.
Trong mọi trường hợp, cảm ơn bạn đã đọc về hoàn cảnh tự gây ra này.
Đây thực sự là lời khuyên tuyệt vời –
+1 Câu trả lời hay. –
Được rồi, vậy điều bạn đang thực sự nói là chúng ta cần phải cân bằng giữa kiểm tra những gì chúng ta có và để lại một mình những gì chúng ta không phải thử nghiệm. Điều này làm cho ý nghĩa tổng thể và là một ý tưởng tốt, nhưng sẽ đòi hỏi một số tiền hợp lý của tái cấu trúc. Ví dụ, mã DAO lõi của chúng tôi kết hợp các đối tượng vào phiên Hibernate và xác nhận chúng cùng một lúc, trong cùng một phương thức. REST servlets đang bận phân tích các yêu cầu cho các hành động và unmarshalling các đối tượng cùng một lúc. Và cứ thế. –