Tôi muốn hỏi chính câu hỏi này, để xem có bao nhiêu công ty đang thực sự thực hành TDD.
Trong 11 năm, tôi đã lập trình chuyên nghiệp, chỉ có hai tổ chức cuối cùng biết về TDD (kéo dài gần 5 năm, trước đó TDD không phổ biến như ngày nay). Tôi sẽ cắt theo đuổi và trả lời câu hỏi của bạn trước khi đi sâu vào mục đích bán hàng của tôi cho TDD :)
Tại công ty cuối cùng tôi làm việc (nhà xuất bản học thuật trực tuyến về các bộ sưu tập khoa học và nhân văn), chúng tôi biết rằng chúng tôi cần phải thực hành TDD nhưng chúng tôi chưa bao giờ đến đó. Để bảo vệ chúng tôi, chúng tôi đã có một cơ sở mã 250k, vì vậy việc thêm các bài kiểm tra vào một cơ sở mã không thể kiểm chứng có kích thước đó cảm thấy không thể vượt qua (tôi cảm thấy có lỗi khi gõ nó ngay bây giờ!). Ngay cả những người giỏi nhất trong chúng ta cũng mắc lỗi .
Bất cứ ai đã thực hiện ngay cả một lượng nhỏ TDD đều biết các bài kiểm tra trang bị thêm vào trường màu nâu có thể gây đau đớn đến mức nào ... Nguyên nhân chính là do phụ thuộc ngầm (bạn không thể kéo tất cả các đòn bẩy để xác nhận kết quả từ mã - bạn không thể giả định kịch bản) và vi phạm nguyên tắc trách nhiệm duy nhất (các bài kiểm tra rất phức tạp, bị chiếm đoạt, yêu cầu thiết lập quá nhiều và khó hiểu ).
Chúng tôi tạm thời phát triển nhóm QA của chúng tôi (từ một, có thể hai người đến nửa tá hoặc hơn) để kiểm tra nền tảng trước khi phát hành. Đó là thời gian cực kỳ tốn kém về mặt tài chính và tài chính, một số bản phát hành sẽ mất ba tháng để hoàn thành 'thử nghiệm'. Ngay cả sau đó chúng tôi biết rằng chúng tôi đang vận chuyển với các vấn đề, họ chỉ không phải là 'chặn' hoặc 'quan trọng', chỉ là 'ưu tiên cao'.
Nếu bạn có kinh nghiệm thương mại nhiều năm, bạn sẽ đánh giá cao rằng mọi công ty đều thực hiện các nhiệm vụ quan trọng , và sau đó phát minh ra mức độ ưu tiên cao hơn mức đó và rất có thể là ở trên đó - đặc biệt là khi ai đó ở trên đang đẩy mạnh tính năng / sửa lỗi. Tôi lạc đề ...
Tôi rất vui khi báo cáo Tôi đang thực hành TDD trong công ty hiện tại của mình (nhà phát triển ứng dụng viễn thông, web và di động), cùng với Jenkins CI để đưa ra các báo cáo phân tích tĩnh khác (phạm vi bảo hiểm mã là hữu ích nhất sau khi xác nhận bộ thử nghiệm vượt qua) . Các dự án tôi đã sử dụng TDD trên là một hệ thống thanh toán và hệ thống điện toán lưới.
Doanh số ...
Nó thường có thể là một cuộc đấu tranh khó khăn để chứng minh thử nghiệm tự động cho các thành viên nhóm phi kỹ thuật. Viết bài kiểm tra sẽ bổ sung thêm nhiều công việc cho quá trình phát triển nhưng ... thời gian bạn đầu tư vào thử nghiệm ngay bây giờ, bạn sẽ tiết kiệm được công sức bảo trì sau này. Bạn thực sự chỉ đang mượn thời gian . Sản phẩm được sử dụng càng lâu, bạn càng tiết kiệm nhiều hơn - và nó sẽ giúp bạn tránh được việc viết lại lớn .
Kiểm tra trước có nghĩa là bạn đang mã hóa ý định của mình trước, sau đó xác nhận mã của bạn hoàn thành ý định đó. Điều này cung cấp trọng tâm và chắt lọc mã của bạn để chỉ làm những gì được dự định và không còn nữa (đọc không phình to). Đó là một đặc tả và tài liệu thực thi cùng một lúc (nếu bài kiểm tra của bạn được viết tốt và các bài kiểm tra phải dễ đọc / sạch như mã hệ thống của bạn, nếu không muốn nói thêm!).
Những người không lập trình sẽ (thường) sẽ không có cái nhìn sâu sắc này và vì vậy TDD không giữ được nhiều giá trị cho họ và được coi là lối tắt dùng một lần đến ngày phát hành sớm hơn.
Lập trình là lĩnh vực của chúng tôi , và trong suy nghĩ của tôi, điều này khiến chúng tôi có trách nhiệm , là chuyên gia, phải tư vấn về thực tiễn tốt nhất như TDD. Không phải để các nhà quản lý dự án quyết định liệu nó có được thực hiện để giảm thời gian phát triển hay không, nó nằm ngoài phạm vi quyền hạn của họ . Cũng giống như cách họ không cho bạn biết nên sử dụng khung, giải pháp bộ đệm hoặc thuật toán tìm kiếm nào, họ không nên cho bạn biết nếu bạn nên sử dụng thử nghiệm tự động.
Theo tôi , ngành công nghiệp phát triển phần mềm (nói chung) hiện tại đã bị phá vỡ, thực tế là việc kiểm tra phần mềm của bạn KHÔNG phải là chuẩn mực.
Hình ảnh này trong các ngành công nghiệp khác: y tế, hàng không, ô tô, mỹ phẩm, đồ chơi mềm, đồ uống có cồn, v.v. Tôi đã yêu cầu vị hôn thê của tôi đặt tên cho một ngành công nghiệp nơi họ không thử nghiệm sản phẩm và cô ấy không thể!
Có lẽ thật không công bằng khi nói không có thử nghiệm xảy ra bởi vì nó ... nhưng trong các công ty không có thử nghiệm tự động, đó là quá trình rất thủ công / con người (đọc vụng về và thường dễ bị lỗi).
Một điểm tôi sẽ tranh luận trong câu hỏi của bạn ...
Họ thường muốn phát triển bắt đầu ngay lập tức, hoặc sau một thời gian ngắn thiết kế. Gần giống với Agile.
Là "Agile" không quy định tiến hành mà không có xét nghiệm, thành viên đầu tiên được liệt kê trên agilemanifesto.org là Kent Beck , người tạo ra XP và TDD!
Hai cuốn sách tôi rất muốn giới thiệu nếu bạn quan tâm đến TDD, hoặc chưa đọc chúng và là một lập trình viên sắc sảo (tất cả mọi người đều đọc đúng không?)
Phát triển phần mềm hướng đối tượng được hướng dẫn bởi các thử nghiệm
Clean Code - Sê-ri Robert C Martin ("Chú Bob")
Hai cuốn sách này khen nhau và cô đọng rất nhiều ý nghĩa vào vài trang.
Cảm ơn đã hỏi câu hỏi này :)