2010-02-26 25 views
19

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.

Trả lời

12

"Nhược điểm trong cả hai trường hợp là năng 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 hoàn toàn trong bất kỳ thử nghiệm nào."

Đây là thông tin sai sự thật phổ biến. Ngay bây giờ bạn có mã bạn không thích và đấu tranh để duy trì. "đồ thị phụ thuộc địa ngục", v.v.

Vì vậy, sự phát triển "khủng hoảng" mà bạn đang thực hiện đã dẫn đến việc làm lại tốn kém. Rework đắt tiền như vậy bạn không dám thử nó. Điều đó nói rằng sự phát triển khủng hoảng của bạn không phải là rất hiệu quả. Nó có vẻ rẻ tiền vào thời điểm đó, nhưng nhìn lại, bạn lưu ý rằng bạn đang thực sự ném tiền phát triển đi bởi vì bạn đã tạo ra phần mềm có vấn đề, đắt tiền thay vì tạo ra phần mềm tốt.

TDD có thể thay đổi điều này để bạn không sản xuất phần mềm khủng hoảng đắt tiền để duy trì. Nó không thể sửa chữa tất cả mọi thứ, nhưng nó có thể làm cho nó rõ ràng rằng thay đổi tập trung của bạn từ "khủng hoảng" có thể sản xuất phần mềm tốt hơn đó là ít tốn kém trong thời gian dài.

Từ mô tả của bạn, một số (hoặc tất cả) của cơ sở mã hiện tại của bạn là trách nhiệm pháp lý chứ không phải là nội dung. Bây giờ hãy nghĩ TDD (hoặc bất kỳ kỷ luật nào) sẽ làm để giảm chi phí của trách nhiệm pháp lý đó. Câu hỏi về "năng suất" không áp dụng khi bạn đang tạo ra trách nhiệm pháp lý.

Quy tắc vàng của TDD: Nếu bạn ngừng tạo mã là trách nhiệm pháp lý, tổ chức có ROI dương.

Hãy cẩn thận khi hỏi cách duy trì tốc độ năng suất hiện tại của bạn. Một số "năng suất" đó là chi phí sản xuất không có giá trị.

"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 trong sự cô lập, chúng tôi không biết tất cả các trường hợp sử dụng"

đúng. Các bài kiểm tra đơn vị phù hợp với cơ sở mã hiện tại thực sự khó khăn.

"Có một nguy cơ lãnh đạo nhóm vào một cảm giác sai về bảo mật trong đó lỗi vi tế sẽ leo vào mà không ai để ý"

False. Không có "cảm giác an toàn sai lầm". Mọi người đều biết thử nghiệm là đá tốt nhất.

Hơn nữa, bây giờ bạn có lỗi đáng sợ. Bạn có vấn đề xấu đến mức bạn thậm chí không biết chúng là gì, bởi vì bạn không có bảo hiểm thử nghiệm.

Giao dịch với một vài lỗi tinh vi vẫn là một cải tiến lớn so với mã bạn không thể kiểm tra. Tôi sẽ có những lỗi nhỏ trên những lỗi không xác định bất kỳ ngày nào.

"Phương pháp (2) là hấp dẫn hơn"

Yes. Nhưng.

Những nỗ lực thử nghiệm trước đây của bạn đã bị lật đổ bởi một nền văn hóa thưởng phần mềm lập trình.

Có gì thay đổi không? Tôi nghi ngờ điều đó. Văn hóa của bạn vẫn thưởng cho lập trình khủng khiếp. Sáng kiến ​​thử nghiệm của bạn vẫn có thể bị lật đổ.

Bạn nên nhìn vào mặt đất ở giữa. Bạn không thể mong đợi "cuồng tín tôn trọng các nguyên tắc TDD" qua đêm. Điều đó cần có thời gian và một thay đổi văn hóa quan trọng.

Những gì bạn cần làm là chia nhỏ các ứng dụng thành nhiều phần.

Hãy xem xét, ví dụ: Mô hình - Dịch vụ - Xem các mức.

Bạn có mô hình ứng dụng cốt lõi (những điều liên tục, các lớp cốt lõi, v.v.) yêu cầu thử nghiệm rộng rãi, đáng tin cậy.

Bạn có các dịch vụ ứng dụng yêu cầu thử nghiệm nhưng phải tuân theo "trường hợp sử dụng có thể thay đổi trong quá trình 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". Kiểm tra càng nhiều càng tốt, nhưng không chạy afoul của mệnh lệnh để tàu công cụ về thời gian cho mùa giải tới.

Bạn có nội dung xem/trình bày cần một số thử nghiệm nhưng không cần xử lý lõi. Nó chỉ là bài thuyết trình. Nó sẽ thay đổi liên tục khi mọi người muốn các tùy chọn, lượt xem, báo cáo, phân tích, RIA, GUI, glitz và sizzle khác nhau.

+0

Đây thực sự là lời khuyên tuyệt vời –

+0

+1 Câu trả lời hay. –

+0

Đượ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ế. –

9

Tôi cần trợ giúp trả lời câu hỏi sau: Làm cách nào để nhóm của tôi đảm bảo rằng nỗ lực của chúng tôi không bị lãng phí trong thời gian dài bởi các bài kiểm tra không rõ ràng và/hoặc không viết bài mới như yêu cầu nghiệp vụ?

Đảm bảo rằng quá trình xây dựng của bạn thực thi các thử nghiệm trên mọi công trình và không xây dựng nếu có lỗi.

Bạn có sử dụng Tích hợp liên tục không? Hudson là một công cụ tuyệt vời cho việc này. Nó có thể giữ một biểu đồ của # thử nghiệm, số lỗi, phạm vi kiểm tra, v.v., đối với mọi bản dựng trong suốt thời gian tồn tại của dự án của bạn. Điều này sẽ giúp bạn giữ một mắt dễ dàng khi phạm vi bảo hiểm của bạn% đang giảm.

Như bạn đã đề cập, có thể khá khó để trang bị thêm thử nghiệm đơn vị vào một dự án hiện có, hãy để một mình TDD. Tôi chúc bạn may mắn về nỗ lực này!

Cập nhật: Tôi cũng muốn chỉ ra rằng phạm vi kiểm tra 100% không thực sự là mục tiêu tuyệt vời, nó có lợi nhuận giảm dần khi bạn cố gắng đi ~ 80% hoặc ~ 90%. Để nhận được vài điểm phần trăm cuối cùng này, bạn cần bắt đầu mô phỏng mọi chi nhánh có thể có trong mã của bạn. Nhóm của bạn sẽ bắt đầu dành thời gian mô phỏng các tình huống không thể xảy ra trong đời thực ("luồng này sẽ không thực sự ném một IOException khi tôi đóng nó nhưng tôi cần phải có được nhánh này!") Hoặc không có giá trị thực trong thử nghiệm. Tôi bắt gặp ai đó trong nhóm xác minh rằng if (foo == null) throw new NullPointerException(...); là dòng đầu tiên của phương thức thực sự đã ném một ngoại lệ khi giá trị là null.

Tốt hơn nên dành thời gian kiểm tra mã thực sự quan trọng hơn là trở nên ám ảnh về việc làm cho mọi dòng cuối cùng hiển thị dưới dạng màu xanh lá cây trong Emma hoặc Cobertura.

+0

Không thể đồng ý hơn. Lý do chính khiến mọi người không chấp nhận các thực hành liên quan đến kiểm thử tự động là vì họ thiếu một hệ thống tích hợp liên tục, tốt, giữ cho các bài kiểm tra tự động và không phải là gánh nặng cho các nhà phát triển. – Mike

+0

Chúng tôi bắt đầu với CruiseControl làm nền tảng CI của chúng tôi, nhưng điều đó đã giảm đi một cách nhanh chóng như những nỗ lực ban đầu của chúng tôi khi thử nghiệm đơn vị. CI sẽ phải quay trở lại nếu chúng tôi thành công trong việc thực hiện TDD một cách hiệu quả. Cảm ơn vì đã nhắc tôi về điều này. –

+0

cho các dự án Java, tôi khuyên bạn nên Sonar (http://sonar.codehaus.org/) – chburd

1

Tôi đã tham gia điều này trong quá khứ với một vài nhóm. Khi tôi là người dẫn đầu về công nghệ, đây là cách tôi tiếp cận nó. Trước tiên, tôi đã có nhà phát triển viết ra những gì các trường hợp thử nghiệm sẽ được (thông qua một tài liệu thiết kế hoặc như vậy). Bằng cách đó, chúng tôi không chỉ có trường hợp thử nghiệm mà còn vướng vào sự hiểu biết của họ về sự thay đổi để tôi có thể xác minh rằng họ biết họ đang làm gì.

Sau đó đối với các thử nghiệm không phải GUI, tôi có nhà phát triển sử dụng JUnit hoặc một cái gì đó tương tự để đảm bảo nó tốt. Vì trường hợp thử nghiệm đã được xác định, điều này không mất quá nhiều thời gian.

Tùy thuộc vào độ phức tạp của trường hợp thử nghiệm hồi quy, có thể lâu hơn một chút nhưng sau khi giải thích khả năng bảo trì tốt hơn, ít lỗi hơn do thay đổi mã hiện có với các loại kiểm tra này. có thể đẩy nó qua.

Hy vọng điều này sẽ hữu ích.

+0

+1 để kiểm tra dưới dạng công cụ giao tiếp. –

2

Tôi nghĩ rằng bạn cần phải lật xung quanh một phần của câu hỏi và các đối số liên quan. Làm thế nào bạn có thể đảm bảo rằng tôn trọng TDD sẽ không dẫn đến nỗ lực lãng phí?

Bạn không thể, nhưng điều này cũng đúng cho bất kỳ quá trình phát triển nào.

Tôi luôn tìm thấy nó hơi nghịch lý mà chúng tôi luôn thử thách để chứng minh lợi ích tiền mặt của TDD và liên quan đến kỷ luật nhanh nhẹn, khi cùng lúc quá trình thác nước truyền thống thường xuyên hơn không dẫn đến

  • thời hạn bỏ lỡ
  • ngân sách thổi
  • chết cuộc tuần hành
  • phát triển burn-out
  • softw buggy là
  • khách hàng không hài lòng

TDD và phương pháp nhanh nhẹn khác cố gắng để giải quyết những vấn đề này, nhưng rõ ràng là giới thiệu một số mối quan tâm mới.

Trong mọi trường hợp tôi muốn giới thiệu những cuốn sách sau đây có thể trả lời một số câu hỏi của bạn chi tiết hơn:

+1

+1: Crunch mã hóa rõ ràng là đắt hơn TDD. Nó cảm thấy tốt hơn, nhưng hậu quả lâu dài của mã không thể duy trì và không thể kiểm chứng rõ ràng lớn hơn sự hài lòng ngay lập tức của việc có một cái gì đó xuất hiện để làm việc. –

+0

Ai nói bất cứ điều gì về crunches cảm thấy tốt hơn? Crunches làm cho công việc này trở thành một chuyến đi tàu lượn siêu tốc vô lý khiến chúng tôi phải vội vã một lần hoặc hai lần một năm. Những tháng còn lại được dành giải nén, gần như đến mức mà không có gì được thực hiện bởi vì mọi người đang đi nghỉ mát. –

+1

+1 cho WELC (đặc biệt; đó là câu trả lời hay ngay cả khi không có điều đó - nhưng hãy đọc sách!) –

8

Tôi muốn giới thiệu rằng tất cả mới sửa lỗi mã và lỗi yêu cầu kiểm tra đơn vị. Giai đoạn.

Sau đó, tôi sẽ quay lại (trước khi tái cấu trúc mã cũ hơn) và viết các bài kiểm tra đơn vị cho những đoạn mã quan trọng nhất trong kinh doanh, có nhiều lỗi nhất và ít được hiểu nhất.

+0

+1: Thay đổi gia tăng dễ dàng hơn. Bán buôn thay đổi là khó khăn. –

5

Tôi nhận thức (1) theo và lớn không thực tế bởi vì chúng tôi có đồ thị phụ thuộc địa ngục địa ngục. Hầu như không có thành phần nào của chúng tôi có thể là được thử nghiệm trong sự cô lập; chúng tôi không biết tất cả các trường hợp sử dụng ;

Đây là vấn đề thực sự của bạn.

Bạn có thể bắt đầu bằng cách viết các bài kiểm tra tích hợp về cơ bản tự động hóa quá trình thử nghiệm của bạn. Bạn nhận được giá trị ra khỏi quyền này ra khỏi cổng. Những gì bạn cần là một mạng lưới an toàn để tái cấu trúc sẽ cung cấp cho bạn một gợi ý bất cứ khi nào bạn đã phá vỡ mã. Thực hiện các giao dịch rộng nhất của giao dịch, bạn có thể thực hiện ứng dụng, tự động hóa quá trình bơm chúng qua và so sánh được mong đợi với thực tế.

Khi bạn đã có sẵn tại chỗ, hãy bắt đầu cố gắng phá vỡ một số biểu đồ phụ thuộc đó để bạn có thể cách ly các phần để kiểm tra.

Bất cứ khi nào bạn có lỗi cần sửa, hãy viết một bài kiểm tra đơn vị để sửa lỗi đó. Sau đó sửa mã và chạy lại kiểm tra. Bạn sẽ thấy thành công của bài kiểm tra. Thực hiện điều này theo dõi lỗi và thủ tục sửa lỗi tiêu chuẩn của bạn. Danh sách kiểm tra đó sẽ tăng lên như lãi suất trong tài khoản ngân hàng.

Tôi đồng ý với đề xuất CI. Thêm số liệu mã vùng phủ sóng vào Hudson hoặc Cruise Control.

Không cần phải nói rằng bạn đang sử dụng Subversion, Git hoặc hệ thống quản lý mã nguồn khác, phải không?

Đó là một quá trình lâu dài nhưng đáng để nó kết thúc.

+0

Re: kiểm tra tích hợp.Tôi đã viết một khuôn khổ mà nắm bắt các trường hợp sử dụng phổ biến nhất (về dữ liệu trong, dữ liệu ra) và xoa bóp các ứng dụng bên ngoài, cách người tiêu dùng và nhà sản xuất của chúng tôi sẽ. Điều này làm việc trong một thời gian nhưng vẫn sẽ chỉ cho chúng tôi biết rằng * một cái gì đó * đã bị hỏng. –

+0

Đồng ý - đó là một mạng lưới an toàn rất thô, nhưng nó tốt hơn không có gì. Đặt nó vào vị trí và tiếp tục thêm vào các bài kiểm tra đơn vị khi bạn viết mã mới. – duffymo

2

Kiểm tra phù hợp với Retro sẽ cho phép bạn cải thiện thiết kế của mình và tìm lỗi. Việc cố gắng viết lại các phần lớn các ứng dụng của bạn sẽ chỉ khiến bạn mất thời hạn và kết thúc với một loạt các chức năng hoạt động một nửa. Viết lại hầu như không bao giờ làm việc. Đi cho tùy chọn (1).

Oh và chỉ có hudson chạy và làm cho nó phàn nàn khi bạn phá vỡ các bài kiểm tra (thông qua e-mail) có lẽ là đủ để giúp bạn có được tinh thần của sự vật.

1

Cùng với một số gợi ý tuyệt vời đã có, tôi sẽ kêu vang với hai điểm.

  • Bắt đầu viết các trường hợp kiểm tra cho tất cả mã mới. Đây là điều bắt buộc và bạn cần phải biến nó trở thành một phần của văn hóa của bạn.
  • Bắt đầu viết các bài kiểm tra để nhân rộng bất kỳ lỗi nào bạn tìm thấy trong mã hiện có. Trước khi sửa bất kỳ lỗi nào bạn tìm thấy trong cơ sở mã hiện có của mình, hãy viết một trường hợp kiểm tra có thể lặp lại cho lỗi đó. Điều này ít nhất sẽ cho phép bạn bắt đầu giới thiệu các trường hợp thử nghiệm đối với các khu vực được biết đến trong mã của bạn. Mặc dù lý tưởng sẽ là viết các bài kiểm tra đối với tất cả các mã hiện có của bạn, điều này hiếm khi khả thi, vì vậy ít nhất là giải quyết các vấn đề đã biết.

Ngoài ra, tôi chắc chắn đồng ý với đề xuất của Hudson cho CI. Ngoài ra, nếu bạn chưa thực hiện, hãy thực hiện các đánh giá ngang hàng cho tất cả mã đã đăng ký. Điều này không phải là một quá trình chính thức được rút ra.

Ví dụ: chúng tôi chỉ cần gán mọi tác vụ đã hoàn thành (qua JIRA) cho trạng thái Xem lại mã khi nhà phát triển hoàn tất. Nhà phát triển sẽ chọn một nhà phát triển khác để chỉ định tác vụ này và chúng tôi quay trong thời gian quay vòng 48 giờ về đánh giá mã. Tác vụ sau đó được đánh dấu là người đánh giá, chứ không phải nhà phát triển. Điều này tạo thêm sự tự tin cho chất lượng của mã, phạm vi kiểm tra và thiết kế. Các tác vụ không bao giờ được giải quyết bởi người thực hiện chúng. Một lợi ích bổ sung là nó cho thấy mã cho người khác vì vậy có ít nhất một số chuyển giao tri thức vốn có trong tiến trình.

+0

Ý tưởng đánh giá mã là rất tốt. Nếu không có gì khác, nó sẽ làm giảm hoặc loại bỏ yếu tố bất ngờ khi ai đó đã sáp nhập một chi nhánh hoán đổi hệ thống xác thực hoặc không có điều gì. –

1

Điều này nghe có vẻ lạ, nhưng bạn đang gặp phải sự cố gì? Bạn không nói những vấn đề mà doanh nghiệp đang gặp phải. Chắc chắn, nếu tôi gia nhập nhóm của bạn, tôi sẽ làm TDD nhiều nhất có thể, tôi đã cam kết thực hành TDD trong nhiều năm nay, nhưng tôi cũng đã nhìn thấy các cơ sở mã xấu và muốn làm sạch chúng lên, nhưng không hiểu đủ để chắc chắn rằng bất kỳ thay đổi mã nguồn nào tôi muốn làm để cải thiện khả năng kiểm thử là các phép tái cấu trúc thực tế.

Bạn có vẻ như bạn nắm bắt được thực tế về tình hình, nhưng bạn có thể chứng minh rằng việc TDD có cải thiện tình hình không? Bạn có bất kỳ số liệu nào nêu bật vấn đề của bạn không? Nếu bạn có thì bạn có thể sử dụng các phương pháp tốt hơn để cải thiện chúng. OK, sau tất cả, lời khuyên thực tế của tôi sẽ là bắt đầu bằng cách sử dụng relative lull để làm bất cứ điều gì bạn có thể, bao gồm: ghi lại các trường hợp kiểm thử, viết kiểm tra tự động, tái cấu trúc để giảm phụ thuộc, viết mã mới với TDD, đào tạo các lập trình viên của bạn có hiệu quả với TDD, v.v.

+0

Một số liệu đáng chú ý trong trường hợp của tôi là sự mong manh của cơ sở mã. Mỗi khi ai đó thực hiện các thay đổi đối với mã lõi, có nguy cơ cao trong việc phá vỡ toàn bộ ứng dụng một cách tinh tế. Rõ ràng, không có cách nào cho các nhà phát triển có nguồn gốc để kiểm tra mọi trường hợp sử dụng có thể tưởng tượng được, đó là những gì các thử nghiệm được cho. Bây giờ, khi tôi nói TDD, tôi có nghĩa là "kiểm tra trước khi bạn mã", nơi mà các bài kiểm tra có thể là bài kiểm tra đơn vị hoặc tích hợp hoặc bất kỳ thứ gì ở giữa. –

+0

Để tiếp tục trên chủ đề: một cơ sở mã mong manh có nghĩa là tải trọng thuyền của thời gian dev bị mất gỡ lỗi các vấn đề lạ phát sinh từ công việc của người khác. Các vấn đề không phải luôn luôn rõ ràng ngay cả đối với người (vô tình) gây ra chúng. Nếu tôi phải đưa ra một con số, tôi sẽ nói rằng bất cứ nơi nào giữa 60% và 80% trong tuần làm việc 40 giờ được cho là được gỡ bỏ bằng cách gỡ lỗi vô dụng này có thể tránh được nếu các thử nghiệm được thực hiện. –

Các vấn đề liên quan