Nhược điểm của phát triển hướng thử nghiệm? [đóng cửa]


192

Tôi mất gì khi áp dụng thiết kế hướng thử nghiệm?

Chỉ liệt kê phủ định; không liệt kê các lợi ích được viết dưới dạng tiêu cực.


Tôi đã thêm một câu trả lời nói rằng BDD có thể làm giảm bớt một số tiêu cực này. Tôi khuyên bạn nên xem xét yếu tố này khi thu thập đầu vào tiêu cực của bạn, vì một số yếu tố có thể được loại bỏ và không còn được coi là tiêu cực.
Kilhoffer

25
Để làm rõ, tôi không chống lại hoặc cho. Tôi đang cố gắng đưa ra quyết định có căn cứ về vấn đề này, nhưng hầu hết những người ủng hộ TDD đều không hiểu, hoặc sẽ không thừa nhận những tiêu cực.
IanL

1
Tiêu đề đề cập đến "Phát triển hướng thử nghiệm", nhưng phần chính của câu hỏi đề cập đến "Thiết kế hướng thử nghiệm". Câu hỏi nào trong hai câu hỏi này? Có sự khác biệt quan trọng, nhưng tinh tế giữa hai. Thiết kế hướng thử nghiệm là để cho các thử nghiệm điều khiển thiết kế của phần mềm. Phát triển theo hướng kiểm thử thường được kết hợp với kiểm thử viết trước khi mã sản xuất (nhưng không nhất thiết phải để kiểm thử ảnh hưởng đến thiết kế).
Jim Hurne

3
TDD là một cái lồng ngăn cản sự sáng tạo của nhà phát triển.
Lewis

13
làm ơn ngừng đóng những câu hỏi quan trọng, djesus
Casper Leon Nielsen

Câu trả lời:


129

Một số nhược điểm (và tôi không khẳng định là không có lợi ích - đặc biệt là khi viết nền tảng của một dự án - nó sẽ tiết kiệm rất nhiều thời gian ở cuối):

  • Đầu tư thời gian lớn. Đối với trường hợp đơn giản, bạn mất khoảng 20% ​​so với thực hiện thực tế, nhưng đối với các trường hợp phức tạp, bạn mất nhiều hơn thế.
  • Độ phức tạp bổ sung. Đối với các trường hợp phức tạp, các trường hợp kiểm thử của bạn khó tính toán hơn, tôi đề nghị trong các trường hợp như vậy hãy thử và sử dụng mã tham chiếu tự động sẽ chạy song song trong phiên bản gỡ lỗi / chạy thử, thay vì kiểm tra đơn vị các trường hợp đơn giản nhất.
  • Thiết kế tác động. Đôi khi thiết kế không rõ ràng khi bắt đầu và phát triển khi bạn đi cùng - điều này sẽ buộc bạn phải làm lại bài kiểm tra của mình, điều này sẽ gây ra mất thời gian lớn. Tôi sẽ đề nghị hoãn thử nghiệm đơn vị trong trường hợp này cho đến khi bạn có một số nắm bắt về thiết kế trong tâm trí.
  • Tinh chỉnh liên tục. Đối với các cấu trúc dữ liệu và các thử nghiệm đơn vị thuật toán hộp đen sẽ là hoàn hảo, nhưng đối với các thuật toán có xu hướng thay đổi, điều chỉnh hoặc tinh chỉnh, điều này có thể gây ra một khoản đầu tư lớn mà người ta có thể tuyên bố là không hợp lý. Vì vậy, hãy sử dụng nó khi bạn nghĩ rằng nó thực sự phù hợp với hệ thống và không buộc thiết kế phải phù hợp với TDD.

7
Điểm chính (4) là - bất kỳ hệ thống nào không được xác định rõ và có khả năng tiếp tục thay đổi để phù hợp với hành vi trực quan đang phát triển, thông số AI khác nhau, thuật toán hành vi, v.v. sẽ gây ra đầu tư lớn vào các định nghĩa kiểm tra lặp đi lặp lại kể từ khi chúng tôi giữ về việc thay đổi kết quả kiểm tra mong muốn.
Adi

12
Đúng, nhưng sẽ không giống như vậy nếu không có TDD? Không có nó, bạn sẽ phải làm thêm kiểm tra thủ công, sẽ gặp phải vấn đề tương tự.
sleske

50
Không phải là "đầu tư thời gian lớn" sẽ giúp bạn tiết kiệm thời gian sau này trong khi phát triển giải pháp của bạn? Đặc biệt với một phức tạp? Tôi đoán nó sẽ giúp bạn tiết kiệm thời gian. Không nghĩ về giai đoạn bảo trì, nơi những thay đổi nhỏ có thể dễ dàng phá vỡ hệ thống. ( hoặc có lẽ tôi chỉ ngây thơ về các bài kiểm tra đơn vị + hồi quy ngăn chặn các lỗi trong tương lai )
Robert Koritnik

6
Sergio / Robert, tôi rất ủng hộ việc thử nghiệm đơn vị cho các hệ thống chung và chắc chắn cho các thành phần đại diện cho cơ sở cho các hệ thống. Như đã nói, tôi sẽ nói thêm rằng người ta cần phân biệt giữa các trường hợp này và đơn giản hóa cuộc sống thực bằng cách cố gắng tuyên bố rằng mọi hệ thống đều có thể được xử lý theo cách này. Không phải tất cả các hệ thống đều có thể được khái quát hóa và đơn giản hóa để thử nghiệm đơn vị và nếu bạn cố gắng áp dụng bản chất của thử nghiệm đơn vị trên các hệ thống đó, bạn có thể dễ dàng dành nhiều thời gian hơn để sửa chữa các thử nghiệm đơn vị so với thử nghiệm thực tế.
Adi

3
@Adi: Tôi nghĩ rằng bạn đã sai. Theo tôi, mọi hệ thống đều có thể được kiểm tra theo cách đó, đó chỉ là vấn đề kỷ luật tự giác.
BlueLettuce16

189

Nếu bạn muốn thực hiện TDD "thực" (đọc: trước tiên hãy kiểm tra các bước tái cấu trúc màu đỏ, xanh lục), thì bạn cũng phải bắt đầu sử dụng giả / cuống, khi bạn muốn kiểm tra các điểm tích hợp.

Khi bạn bắt đầu sử dụng giả, sau một thời gian, bạn sẽ muốn bắt đầu sử dụng Dependency Injection (DI) và thùng chứa Inversion of Control (IoC). Để làm điều đó, bạn cần sử dụng các giao diện cho mọi thứ (có rất nhiều cạm bẫy).

Vào cuối ngày, bạn phải viết nhiều mã hơn, nếu bạn chỉ làm theo "cách cũ đơn giản". Thay vì chỉ là một lớp khách hàng, bạn cũng cần phải viết một giao diện, một lớp giả, một số cấu hình IoC và một vài bài kiểm tra.

Và hãy nhớ rằng mã kiểm tra cũng nên được duy trì và chăm sóc. Các bài kiểm tra nên dễ đọc như mọi thứ khác và cần có thời gian để viết mã tốt.

Nhiều nhà phát triển không hiểu làm thế nào để thực hiện tất cả những "cách đúng đắn" này. Nhưng bởi vì mọi người nói với họ rằng TDD là cách thực sự duy nhất để phát triển phần mềm, họ chỉ cố gắng hết sức có thể.

Nó khó hơn nhiều so với người ta có thể nghĩ. Thông thường các dự án được thực hiện với TDD kết thúc với rất nhiều mã mà không ai thực sự hiểu. Các bài kiểm tra đơn vị thường kiểm tra sai, sai cách. Và không ai đồng ý rằng một bài kiểm tra tốt sẽ trông như thế nào, thậm chí không phải là người được gọi là bậc thầy.

Tất cả những thử nghiệm đó làm cho việc "thay đổi" (ngược lại với tái cấu trúc) trở nên khó khăn hơn rất nhiều đối với hệ thống của bạn và những thay đổi đơn giản trở nên quá khó khăn và tốn thời gian.

Nếu bạn đọc tài liệu TDD, luôn có một số ví dụ rất hay, nhưng thường trong các ứng dụng thực tế, bạn phải có giao diện người dùng và cơ sở dữ liệu. Đây là lúc TDD thực sự khó khăn và hầu hết các nguồn không cung cấp câu trả lời hay. Và nếu họ làm như vậy, nó luôn liên quan đến nhiều khái niệm trừu tượng hơn: các đối tượng giả, lập trình cho một giao diện, các mẫu MVC / MVP, v.v., một lần nữa đòi hỏi nhiều kiến ​​thức và ... bạn phải viết nhiều mã hơn nữa.

Vì vậy, hãy cẩn thận ... nếu bạn không có một đội ngũ nhiệt tình và ít nhất một nhà phát triển có kinh nghiệm, biết viết các bài kiểm tra tốt và cũng biết một vài điều về kiến ​​trúc tốt, bạn thực sự phải suy nghĩ kỹ trước khi đi xuống con đường TDD .


7
Sử dụng các công cụ như Pex & Moles, bạn có thể dễ dàng tránh việc viết giao diện cho mọi thứ nhỏ nhặt. Nốt ruồi sẽ giúp bạn rất nhiều.
Robert Koritnik

24
Có vẻ như một sự phê phán về thử nghiệm đơn vị và lập trình hướng đối tượng, không phải TDD.
plmaheu

5
Thực tế đúng ** kiểm tra đơn vị ** - không chỉ TDD mẹo yêu cầu giả lập / sơ khai. Và lập trình dựa trên giao diện thường là một ý tưởng tốt, tương tự với các mẫu. Nếu bạn trộn UI và logic, bạn sẽ có một khoảng thời gian tồi tệ. Nếu bạn phải kiểm tra tương tác DB, bạn vẫn có thể giả lập DAO của mình để kiểm tra đơn vị và sử dụng thực tế cho kiểm tra tích hợp.
TheMorph

1
Tôi đồng ý với thực tế rằng một người sương mù có kiến ​​thức về thiết kế và thử nghiệm trước khi nhảy vào tdd. Điều này là rất quan trọng trong các dự án với thuê mới vì chúng là mới cho cả hai.
Hitesh Sahu

bỏ phiếu cho Trí tuệ
sabab

66

Khi bạn đến điểm mà bạn có số lượng thử nghiệm lớn, việc thay đổi hệ thống có thể yêu cầu viết lại một số hoặc tất cả các thử nghiệm của bạn, tùy thuộc vào thử nghiệm nào bị vô hiệu bởi các thay đổi. Điều này có thể biến một sửa đổi tương đối nhanh chóng thành một sửa đổi rất tốn thời gian.

Ngoài ra, bạn có thể bắt đầu đưa ra quyết định thiết kế dựa trên TDD nhiều hơn so với các dự đoán thiết kế thực sự tốt. Trong khi bạn có thể đã có một giải pháp rất đơn giản, dễ dàng mà không thể kiểm tra theo cách TDD yêu cầu, thì bây giờ bạn có một hệ thống phức tạp hơn nhiều mà thực sự dễ mắc lỗi hơn.


3
Chắc chắn có thể là một vấn đề, tuy nhiên tôi thấy tôi đang thấy một sự khác biệt đáng chú ý trong việc tôi bị ảnh hưởng bởi điều này. Tất cả bắt nguồn từ "viết mã có thể kiểm tra" tôi đoán.
Rob Cooper

2
Scott, ví dụ tôi thường đưa ra là một SqlDataSource được nhúng trong trang ASPX. Bạn không thể tự động hóa một bài kiểm tra cho điều đó. Thật đơn giản và hoàn thành công việc, chỉ với 1 tệp. Thành phần có thể kiểm tra là đối tượng SqlDataSource của MSFT và điều đó đã được thực hiện cho chúng tôi. Không cần chúng tôi phải làm nhiều hơn.
Râu Eric Z

8
+1 "bạn có thể bắt đầu đưa ra quyết định thiết kế dựa trên TDD nhiều hơn so với các dự đoán thiết kế thực sự tốt" - cạm bẫy lớn nhất của TDD IMHO.
András Szepesházi

2
@ScottSaad vấn đề IMO là thiết kế nên được phác thảo trước và sau đó nó phải được xác nhận bằng cách viết các bài kiểm tra và sửa chữa nếu cần. Tôi đã thấy nhiều trường hợp khi mọi người đang gây nguy hiểm cho thiết kế tốt chỉ để có thể viết bài kiểm tra. Kết quả là - hầu hết hệ thống được bao phủ bởi các thử nghiệm nhưng thiết kế thực sự xấu xí. Tôi nghĩ rằng điều này xảy ra bởi vì TDD được đẩy đến số đông như một phương pháp rất đơn giản với quan niệm sai lầm : if part of the system is covered by tests and they pass, then everything is fine (including design).
Yuriy Nakonechnyy

3
@Yura: Thật thú vị khi bạn nói rằng mọi người đang gây nguy hiểm cho thiết kế tốt chỉ để có thể viết bài kiểm tra. Theo tôi nếu có một thiết kế tốt thì sẽ không cần thiết phải gây nguy hiểm cho nó. Tôi đã từng thấy một dự án như vậy và codebase là một cơn ác mộng, nhưng mọi người cũng nghĩ như vậy - rằng thiết kế rất tuyệt. Tôi chỉ đồng ý với phần TDD được đẩy đến đại chúng như một phương pháp rất đơn giản, tuy nhiên nó hoàn toàn ngược lại. Theo ý kiến ​​của tôi khi mã được thiết kế tốt thì khi bạn thực hiện một thay đổi nhỏ thì sẽ không có cơ hội để phanh tất cả các thử nghiệm hoặc số lượng lớn chúng.
BlueLettuce16

54

Tôi nghĩ vấn đề lớn nhất đối với tôi là mất rất nhiều thời gian để "vào đó". Tôi vẫn còn rất nhiều khi bắt đầu hành trình với TDD (Xem blog của tôi để cập nhật những cuộc phiêu lưu thử nghiệm của tôi nếu bạn quan tâm) và tôi đã dành hàng giờ để bắt đầu.

Phải mất một thời gian dài để đưa bộ não của bạn vào "chế độ thử nghiệm" và viết "mã có thể kiểm tra" là một kỹ năng.

TBH, tôi không đồng ý với ý kiến ​​của Jason Cohen về việc công khai các phương thức riêng tư, đó không phải là vấn đề. Tôi đã không thực hiện nhiều phương pháp công khai trong cách làm việc mới của tôi hơn trước đây . Tuy nhiên, nó liên quan đến những thay đổi kiến ​​trúc và cho phép bạn "cắm nóng" các mô-đun mã để làm cho mọi thứ khác dễ kiểm tra hơn. Bạn không nên làm cho phần bên trong mã của bạn dễ truy cập hơn để làm điều này. Nếu không, chúng ta quay lại quảng trường một với mọi thứ được công khai, đóng gói trong đó ở đâu?

Vì vậy, (IMO) một cách ngắn gọn:

  • Lượng thời gian cần suy nghĩ (nghĩa là thực sự thử nghiệm ).
  • Các kiến ​​thức mới cần có để biết cách viết mã thử nghiệm.
  • Hiểu những thay đổi kiến ​​trúc cần thiết để làm cho mã có thể kiểm tra được.
  • Tăng kỹ năng "TDD-Coder" của bạn trong khi cố gắng cải thiện tất cả các kỹ năng khác cần thiết cho nghề lập trình vinh quang của chúng tôi :)
  • Tổ chức cơ sở mã của bạn để bao gồm mã kiểm tra mà không làm hỏng mã sản xuất của bạn.

PS: Nếu bạn muốn liên kết đến tích cực, tôi đã hỏi và trả lời một số câu hỏi về nó, hãy xem hồ sơ của tôi .


1
Đáng buồn thay, câu trả lời hợp lý đầu tiên tôi thấy ...
Daniel C. Sobral

5
Câu trả lời khá thực tế và đơn giản - +1 cho phần "Cài đặt tâm trí"
ha9u63ar

50

Trong vài năm tôi đã thực hành Phát triển hướng thử nghiệm, tôi phải nói rằng nhược điểm lớn nhất là:

Bán cho quản lý

TDD được thực hiện tốt nhất theo cặp. Đối với một người, thật khó để chống lại sự thôi thúc chỉ viết bản thực hiện khi bạn BIẾT cách viết một câu lệnh if / other . Nhưng một cặp sẽ giữ bạn trong nhiệm vụ bởi vì bạn giữ anh ta trên nhiệm vụ. Đáng buồn thay, nhiều công ty / người quản lý không nghĩ rằng đây là một cách sử dụng tài nguyên tốt. Tại sao phải trả tiền cho hai người để viết một tính năng, khi tôi có hai tính năng cần được thực hiện cùng một lúc?

Bán nó cho các nhà phát triển khác

Một số người không đủ kiên nhẫn để viết bài kiểm tra đơn vị. Một số rất tự hào về công việc của họ. Hoặc, một số giống như nhìn thấy các phương thức / chức năng phức tạp bị chảy máu ở cuối màn hình. TDD không dành cho tất cả mọi người, nhưng tôi thực sự mong muốn nó. Nó sẽ làm cho việc duy trì công cụ trở nên dễ dàng hơn nhiều đối với những linh hồn nghèo khổ thừa hưởng mã.

Duy trì mã kiểm tra cùng với mã sản xuất của bạn

Lý tưởng nhất là các bài kiểm tra của bạn sẽ chỉ bị hỏng khi bạn đưa ra một quyết định mã xấu. Đó là, bạn nghĩ rằng hệ thống hoạt động theo một cách, và hóa ra nó không hoạt động. Bằng cách phá vỡ một bài kiểm tra, hoặc một bộ (nhỏ) các bài kiểm tra, đây thực sự là một tin tốt. Bạn biết chính xác làm thế nào mã mới của bạn sẽ ảnh hưởng đến hệ thống. Tuy nhiên, nếu các bài kiểm tra của bạn được viết kém, kết hợp chặt chẽ hoặc tệ hơn là được tạo ra ( ho VS Test), thì việc duy trì các bài kiểm tra của bạn có thể nhanh chóng trở thành hợp xướng. Và, sau khi đủ các thử nghiệm bắt đầu gây ra nhiều công việc hơn mà giá trị cảm nhận mà chúng đang tạo ra, thì các thử nghiệm sẽ là điều đầu tiên bị xóa khi lịch trình bị nén (ví dụ: thời gian bị khủng hoảng)

Viết bài kiểm tra để bạn bao quát mọi thứ (bảo hiểm mã 100%)

Lý tưởng hơn, một lần nữa, nếu bạn tuân thủ phương pháp luận, mã của bạn sẽ được kiểm tra 100% theo mặc định. Thông thường, tôi nghĩ, tôi kết thúc với độ bao phủ mã lên tới 90%. Điều này thường xảy ra khi tôi có một số kiến ​​trúc kiểu mẫu và cơ sở được kiểm tra và tôi cố gắng cắt các góc và không kiểm tra các tùy chỉnh mẫu. Ngoài ra, tôi đã phát hiện ra rằng khi tôi gặp một rào cản mới mà tôi chưa từng gặp trước đây, tôi có một đường cong học tập trong việc kiểm tra nó. Tôi sẽ thừa nhận viết một số dòng mã theo cách skool cũ, nhưng tôi thực sự muốn có 100% đó. (Tôi đoán tôi là một người thành đạt ở trường, er skool).

Tuy nhiên, với điều đó tôi đã nói rằng lợi ích của TDD vượt xa những tiêu cực đối với ý tưởng đơn giản rằng nếu bạn có thể đạt được một bộ thử nghiệm tốt bao trùm ứng dụng của mình nhưng không dễ vỡ đến mức một thay đổi sẽ phá vỡ tất cả, bạn sẽ có thể tiếp tục thêm các tính năng mới vào ngày 300 của dự án của bạn như bạn đã làm vào ngày 1. Điều này không xảy ra với tất cả những ai dùng thử TDD nghĩ rằng đó là một viên đạn ma thuật cho tất cả các mã bị lỗi của họ, và vì vậy họ nghĩ rằng nó có thể 't làm việc, thời gian.

Cá nhân tôi đã thấy rằng với TDD, tôi viết mã đơn giản hơn, tôi dành ít thời gian hơn để tranh luận liệu một giải pháp mã cụ thể có hoạt động hay không và tôi không sợ phải thay đổi bất kỳ dòng mã nào không đáp ứng các tiêu chí được đặt ra bởi đội.

TDD là một môn học khó để thành thạo, và tôi đã ở đó được vài năm và tôi vẫn học các kỹ thuật kiểm tra mới mọi lúc. Đó là một khoản đầu tư thời gian khổng lồ lên phía trước, nhưng, về lâu dài, tính bền vững của bạn sẽ lớn hơn nhiều so với việc bạn không có bài kiểm tra đơn vị tự động. Bây giờ, nếu chỉ có ông chủ của tôi có thể tìm ra điều này.


7
Phần còn lại của câu kết thúc bằng "(ho VS Test), sau đó là chính" là gì?
Andrew Grimm

+1 cho vấn đề bán hàng. :) Bây giờ tôi đang ở một công ty mới và nghĩ cách tạo ra một nền văn hóa cho phép các kỹ năng lan truyền tự do.
Esko Luontola

2
Như bạn nghĩ, một số công ty tư vấn đang tận dụng lập trình cặp và TDD chỉ để kiếm thêm tiền từ khách hàng của họ. Thật đáng thất vọng khi những khách hàng này trả tiền cho những ý tưởng có vẻ hợp lý ngay từ cái nhìn đầu tiên như hai người nghĩ tốt hơn 2 hoặc TDD đảm bảo rằng mọi dòng mã đều được kiểm tra, nhưng cuối cùng họ chỉ là lý do để khiến khách hàng trả tiền nhiều hơn cho một cái gì đó chỉ một người có thể làm.
lmiguelvargasf

24

Trong dự án TDD đầu tiên của bạn, có hai mất mát lớn, thời gian và tự do cá nhân

Bạn mất thời gian vì:

  • Việc tạo ra một bộ kiểm tra đơn vị và chấp nhận toàn diện, được tái cấu trúc, có thể bảo trì sẽ thêm thời gian chính cho lần lặp đầu tiên của dự án. Đây có thể là thời gian tiết kiệm trong thời gian dài nhưng cũng có thể là thời gian bạn không cần phải rảnh rỗi.
  • Bạn cần chọn và trở thành chuyên gia trong một bộ công cụ cốt lõi. Một công cụ kiểm tra đơn vị cần được bổ sung bởi một số loại khung mô phỏng và cả hai cần phải trở thành một phần của hệ thống xây dựng tự động của bạn. Bạn cũng muốn chọn và tạo số liệu thích hợp.

Bạn mất tự do cá nhân vì:

  • TDD là một cách viết mã rất kỷ luật, có xu hướng cọ xát thô với những người ở trên cùng và dưới cùng của thang kỹ năng. Luôn viết mã sản xuất theo một cách nhất định và khiến công việc của bạn phải được đánh giá ngang hàng liên tục có thể khiến các nhà phát triển tồi tệ nhất và giỏi nhất của bạn thất vọng và thậm chí dẫn đến mất số lượng nhân viên.
  • Hầu hết các phương thức Agile nhúng TDD yêu cầu bạn liên tục nói chuyện với khách hàng về những gì bạn đề xuất để thực hiện (trong câu chuyện / ngày / bất cứ điều gì) và những gì đánh đổi là gì. Một lần nữa, đây không phải là tách trà của mọi người, cả về phía nhà phát triển của hàng rào và khách hàng.

Hi vọng điêu nay co ich


1
Tôi không biết là vì tôi tệ nhất hay tốt nhất .. nhưng TDD đã chà nhầm tôi. Đó là bởi vì nó buộc tôi vào chế độ bảo trì kép quá sớm. Mỗi lần tôi thay đổi thiết kế của một lớp, bây giờ tôi cũng phải thay đổi các trường hợp thử nghiệm. Tôi mong đợi và chấp nhận điều đó từ một lớp trưởng thành, nhưng không phải từ một lớp mà tôi vừa viết tuần trước! Ngoài ra tôi có thể chỉ nói rằng DI và TDD không được hỗ trợ tốt bởi các ngôn ngữ như Java và C #. Ai đó thực sự cần phải tạo ra một ngôn ngữ mới để chi phí của TDD và DI hoàn toàn bằng không . Sau đó, chúng tôi sẽ không có cuộc trò chuyện này nữa.
John Henckel

14

TDD yêu cầu bạn lên kế hoạch về cách các lớp học của bạn sẽ hoạt động trước khi bạn viết mã để vượt qua các bài kiểm tra đó. Đây là cả một điểm cộng và một điểm trừ.

Tôi thấy thật khó để viết các bài kiểm tra trong "chân không" - trước khi bất kỳ mã nào được viết. Theo kinh nghiệm của tôi, tôi có xu hướng vượt qua các bài kiểm tra của mình bất cứ khi nào tôi chắc chắn nghĩ về điều gì đó trong khi viết các lớp học mà tôi đã quên trong khi viết các bài kiểm tra ban đầu của mình. Sau đó, đã đến lúc không chỉ tái cấu trúc các lớp học của tôi, mà C ALNG các bài kiểm tra của tôi. Lặp lại ba hoặc bốn lần này và nó có thể gây bực bội.

Tôi thích viết một bản nháp của các lớp học của tôi trước sau đó viết (và duy trì) một bài kiểm tra đơn vị. Sau khi tôi có một bản nháp, TDD hoạt động tốt với tôi. Ví dụ: nếu một lỗi được báo cáo, tôi sẽ viết một bài kiểm tra để khai thác lỗi đó và sau đó sửa mã để bài kiểm tra vượt qua.


1
Mặc dù bạn nên có ý tưởng về kiến ​​trúc của hệ thống của bạn sẽ trông như thế nào, bạn không cần phải biết trước rất nhiều khi thực hiện TDD. TDD có nghĩa là các thử nghiệm DRIVE thiết kế, vì vậy nó sẽ thay đổi khi bạn triển khai nhiều kịch bản thử nghiệm hơn
casademora

4
Tôi đồng ý với chân không. Các hướng dẫn ban đầu của TDD nơi bạn sẽ viết bài kiểm tra mà không cần BẤT K code mã nào - và gặp lỗi biên dịch - thật điên rồ.
mparaz

Đó là một giả định sai lầm rằng bạn có thể viết các bài kiểm tra một lần và không thay đổi chúng. Chúng là mã và mọi mã yêu cầu tái cấu trúc cuối cùng sau khi bạn thay đổi. Các xét nghiệm không phải là một ngoại lệ. Kiểm tra tái cấu trúc là bắt buộc nếu bạn muốn duy trì chúng.
Roman Konoval

12

Tạo mẫu có thể rất khó với TDD - khi bạn không chắc chắn mình sẽ đi theo con đường nào để giải quyết, việc viết các bài kiểm tra trước có thể khó khăn (trừ những bài rất rộng). Đây có thể là một nỗi đau.

Thành thật mà nói tôi không nghĩ rằng "phát triển cốt lõi" cho phần lớn các dự án, mặc dù có bất kỳ nhược điểm thực sự nào; nó đã được nói nhiều hơn bình thường, thông thường bởi những người tin rằng mã của họ đủ tốt để họ không cần kiểm tra (không bao giờ) và những người chỉ đơn giản là không thể bận tâm viết chúng.


9

Vâng, và điều này kéo dài, bạn cần gỡ lỗi các bài kiểm tra của bạn. Ngoài ra, có một chi phí nhất định về thời gian để viết các bài kiểm tra, mặc dù hầu hết mọi người đều đồng ý rằng đó là một khoản đầu tư trực tiếp trả hết thời gian của ứng dụng trong cả thời gian gỡ lỗi và ổn định.

Tuy nhiên, vấn đề lớn nhất mà cá nhân tôi gặp phải với nó là việc đạt được kỷ luật để thực sự viết các bài kiểm tra. Trong một nhóm, đặc biệt là một nhóm được thành lập, thật khó để thuyết phục họ rằng thời gian bỏ ra là đáng giá.


13
Aha - nhưng đó là nơi TDTDD xuất hiện. Kiểm tra hướng phát triển dựa trên thử nghiệm.
Snowcrash

3
Tôi vẫn thỉnh thoảng tìm thấy lỗi trong các bài kiểm tra thử nghiệm của tôi. Vì vậy, bây giờ tôi thực hành TDTDTDD.
HorseloverFat

@SnowCrash +1 Tôi đã tìm kiếm trên Google để xem mọi người dành bao nhiêu thời gian để kiểm tra bài kiểm tra của họ, và sau đó tôi thấy câu trả lời này. Tôi chính thức tìm thấy điều này bởi vì tôi đã tự hỏi về TDTDTDD.
BalinKingOfMoria Phục hồi CM

1
Tôi tin rằng tương lai là (TD) <sup> </ sup> TDD. Tôi có một tập tin cho đến nay: nó chứa chữ "x".
mike gặm nhấm

Tôi đồng ý với @Tim. Thuyết phục các thành viên chấp nhận nó là phần khó nhất.
Olu Smith

7

Nếu các bài kiểm tra của bạn không kỹ lưỡng, bạn có thể rơi vào cảm giác sai lầm về "mọi thứ hoạt động" chỉ vì bạn kiểm tra vượt qua. Về mặt lý thuyết nếu các bài kiểm tra của bạn vượt qua, mã đang hoạt động; nhưng nếu chúng ta có thể viết mã hoàn hảo ngay lần đầu tiên, chúng ta sẽ không cần kiểm tra. Đạo đức ở đây là đảm bảo tự kiểm tra sự tỉnh táo trước khi gọi một cái gì đó hoàn chỉnh, đừng chỉ dựa vào các bài kiểm tra.

Trên lưu ý đó, nếu kiểm tra độ tỉnh táo của bạn tìm thấy thứ gì đó không được kiểm tra, hãy đảm bảo quay lại và viết bài kiểm tra cho nó.


Tôi không tin vào điều khoản không tỉnh táo kể từ khi tôi lớn lên.
mike gặm nhấm

7

Nhược điểm của TDD là nó thường được liên kết chặt chẽ với phương pháp 'Agile', vốn không quan trọng về tài liệu của một hệ thống, thay vào đó là sự hiểu biết tại sao một bài kiểm tra 'nên' trả về một giá trị cụ thể thay vì bất kỳ giá trị nào khác chỉ nằm trong nhà phát triển cái đầu.

Ngay khi nhà phát triển rời khỏi hoặc quên đi lý do thử nghiệm trả về một giá trị cụ thể chứ không phải một giá trị nào khác, bạn đã bị lừa. TDD vẫn ổn NẾU nó được ghi chép đầy đủ và được bao quanh bởi tài liệu có thể đọc được (ví dụ: người quản lý tóc nhọn) có thể được đề cập trong 5 năm khi thế giới thay đổi và ứng dụng của bạn cũng cần phải như vậy.

Khi tôi nói về tài liệu, đây không phải là một lỗi trong mã, đây là văn bản chính thức tồn tại bên ngoài ứng dụng, chẳng hạn như các trường hợp sử dụng và thông tin cơ bản có thể được giới thiệu bởi các nhà quản lý, luật sư và người nghèo phải cập nhật mã của bạn trong năm 2011.


1
Hoàn hảo đặt. Tôi không thể đồng ý nhiều hơn. Đối với tôi, các bài kiểm tra chắc chắn không giúp mô tả các định nghĩa vấn đề ở cấp độ cao hơn trong thế giới thực. Tài liệu tốt đã chứng minh giá trị của nó nhiều lần. Là công nghệ. Thời đại công nghiệp, các khái niệm thử nghiệm thời gian nên được phân phối với việc sử dụng thận trọng hơn bao giờ hết. Mã tự ghi là một khái niệm vô lý. Tôi tin vào việc tạo mẫu, tái cấu trúc và sự nhanh nhẹn của việc không bao giờ xác định một vấn đề khi bắt đầu. Tuy nhiên, trớ trêu thay, việc không xác định quá mức vấn đề khi bắt đầu khiến cho TDD trở thành một bãi mìn.
wax_lyric

1
Tôi nghĩ điều này là không công bằng. Thực hành TDD tốt lên án các con số ma thuật và các bài kiểm tra tối nghĩa. Các thử nghiệm phải đơn giản và như, hoặc tốt nhất là dễ đọc hơn mã sản xuất của bạn. bài kiểm tra của bạn LÀ tài liệu. hãy chắc chắn rằng họ trông giống như nó câu trả lời này có cảm giác hơi giống như nói "tài liệu là xấu bởi vì đôi khi mọi người viết tài liệu thực sự xấu" hoặc "các lớp học là xấu bởi vì tôi đã thấy một số lớp thần khó đối phó".
sara

6

Tôi đã gặp một vài tình huống trong đó TDD khiến tôi phát điên. Để đặt tên cho một số:

  • Kiểm tra bảo trì trường hợp:

    Nếu bạn đang ở trong một doanh nghiệp lớn, nhiều khả năng là bạn không phải tự viết các trường hợp thử nghiệm hoặc ít nhất là hầu hết chúng được viết bởi người khác khi bạn vào công ty. Các tính năng của ứng dụng thay đổi theo thời gian và nếu bạn không có hệ thống, chẳng hạn như Trung tâm Chất lượng HP, để theo dõi chúng, bạn sẽ trở nên điên cuồng ngay lập tức.

    Điều này cũng có nghĩa là sẽ mất nhiều thời gian để nắm bắt những gì đang xảy ra với các trường hợp thử nghiệm. Đổi lại, điều này có thể được dịch thành nhiều tiền cần thiết hơn.

  • Kiểm tra độ phức tạp tự động hóa:

    Nếu bạn tự động hóa một số hoặc tất cả các trường hợp thử nghiệm thành các tập lệnh kiểm tra có thể chạy bằng máy, bạn sẽ phải đảm bảo các tập lệnh kiểm tra này đồng bộ với các trường hợp kiểm tra thủ công tương ứng của chúng và phù hợp với các thay đổi của ứng dụng.

    Ngoài ra, bạn sẽ dành thời gian để gỡ lỗi các mã giúp bạn bắt lỗi. Theo tôi, hầu hết các lỗi này đến từ sự thất bại của nhóm thử nghiệm trong việc phản ánh các thay đổi của ứng dụng trong tập lệnh thử nghiệm tự động hóa. Những thay đổi trong logic nghiệp vụ, GUI và các nội dung khác có thể khiến tập lệnh của bạn ngừng chạy hoặc chạy không đáng tin cậy. Đôi khi những thay đổi rất tinh tế và khó phát hiện. Khi tất cả các tập lệnh của tôi báo cáo lỗi vì chúng dựa trên tính toán của chúng dựa trên thông tin từ bảng 1 trong khi bảng 1 bây giờ là bảng 2 (vì ai đó đã hoán đổi tên của các đối tượng bảng trong mã ứng dụng).


Điều này hoàn toàn không thỏa thuận với TDD. Nếu ai đó trong bộ phận khác đang viết các trường hợp thử nghiệm của bạn, bạn không làm TDD. Nếu bạn có trường hợp kiểm tra thủ công, bạn không làm TDD. Nếu mã thư viện của bạn bị hỏng và các bài kiểm tra của bạn không thành công do thay đổi GUI, rất có thể bạn cũng không làm TDD. Điều này có vẻ giống như tranh luận chống lại các bộ phận QA doanh nghiệp không hiệu quả lớn.
sara

5

Vấn đề lớn nhất là những người không biết cách viết bài kiểm tra đơn vị phù hợp. Họ viết các bài kiểm tra phụ thuộc lẫn nhau (và chúng hoạt động rất tốt với Ant, nhưng rồi tất cả đều thất bại khi tôi chạy chúng từ Eclipse, chỉ vì chúng chạy theo thứ tự khác nhau). Họ viết các bài kiểm tra không kiểm tra bất cứ điều gì cụ thể - họ chỉ gỡ lỗi mã, kiểm tra kết quả và thay đổi nó thành kiểm tra, gọi đó là "test1". Họ mở rộng phạm vi của các lớp và phương thức, chỉ vì sẽ dễ dàng hơn để viết các bài kiểm tra đơn vị cho chúng. Mã của các bài kiểm tra đơn vị là khủng khiếp, với tất cả các vấn đề lập trình cổ điển (khớp nối nặng, các phương thức dài 500 dòng, giá trị mã hóa cứng, sao chép mã) và là một địa ngục để duy trì. Vì một số lý do kỳ lạ, mọi người coi các bài kiểm tra đơn vị là một thứ gì đó kém hơn mã "thực" và họ không ' t quan tâm đến chất lượng của họ cả. :-(


4

Bạn mất rất nhiều thời gian dành cho bài kiểm tra viết. Tất nhiên, điều này có thể được lưu vào cuối dự án bằng cách bắt lỗi nhanh hơn.


Đây thực sự là một cách tiêu cực, hay ranh mãnh nói lên một điều tích cực.
IanL

3

Nhược điểm lớn nhất là nếu bạn thực sự muốn làm TDD đúng cách, bạn sẽ phải thất bại rất nhiều trước khi thành công. Dựa vào số lượng công ty phần mềm hoạt động (đô la trên mỗi KLOC), cuối cùng bạn sẽ bị sa thải. Ngay cả khi mã của bạn nhanh hơn, sạch hơn, dễ bảo trì hơn và có ít lỗi hơn.

Nếu bạn đang làm việc trong một công ty trả tiền cho bạn bằng các KLOC (hoặc các yêu cầu được thực hiện - ngay cả khi không được kiểm tra), hãy tránh xa TDD (hoặc đánh giá mã, hoặc lập trình cặp hoặc Tích hợp liên tục, v.v.).


3

Bạn mất khả năng nói rằng bạn đã "hoàn thành" trước khi kiểm tra tất cả mã của mình.

Bạn mất khả năng viết hàng trăm hoặc hàng ngàn dòng mã trước khi chạy nó.

Bạn mất cơ hội học hỏi thông qua gỡ lỗi.

Bạn mất tính linh hoạt để gửi mã mà bạn không chắc chắn.

Bạn mất tự do để kết hợp chặt chẽ các mô-đun của bạn.

Bạn mất tùy chọn để bỏ qua việc viết tài liệu thiết kế cấp thấp.

Bạn mất đi sự ổn định đi kèm với mã mà mọi người đều sợ thay đổi.


1
Phụ thuộc vào định nghĩa của bạn về "cung cấp giải pháp đúng hạn" - là "mọi giải pháp cũ, bị hỏng một phần đúng hạn" hoặc "cung cấp giải pháp làm việc đúng hạn". Bạn chắc chắn mất khả năng cung cấp các giải pháp bị hỏng một phần đúng thời gian. Theo như tốc độ của dev - tôi thích số liệu "thời gian trôi qua giữa lúc bắt đầu dev và một tuần triển khai trực tiếp không có lỗi". Nếu bạn đo nó một cách công bằng, thật khó để thậm chí dừng đồng hồ trên một mảnh copmlex của công việc không TDD.
Dafydd Rees

47
-1, đây chính xác là điều mà OP nói rằng anh ấy không muốn.
erikkallen

1
Nhiều tuyên bố đúng, nhưng: những gì erikkallen nói. -1.
j_random_hacker

@ j_random_hacker nói rằng hacker ... LOL
Dan

tuyên bố thứ ba là hợp pháp "học qua gỡ lỗi bị mất"
YEH

2

Tôi thứ hai câu trả lời về thời gian phát triển ban đầu. Bạn cũng mất khả năng làm việc dễ dàng mà không có sự an toàn của các bài kiểm tra. Tôi cũng đã được mô tả như là một nutbar TDD, vì vậy bạn có thể mất một vài người bạn;)


2

Nó được cho là chậm hơn. Về lâu dài, điều đó không đúng về mặt đau buồn, nó sẽ giúp bạn tiết kiệm, nhưng cuối cùng bạn sẽ viết nhiều mã hơn nên có thể cho rằng bạn đang dành thời gian cho "thử nghiệm không mã hóa". Đó là một lập luận thiếu sót, nhưng bạn đã hỏi!


2

Tập trung vào các yêu cầu khó khăn, không lường trước được là nguyên nhân thường xuyên của lập trình viên. Phát triển dựa trên thử nghiệm buộc bạn phải tập trung vào các yêu cầu đã được biết đến, trần tục và giới hạn sự phát triển của bạn theo những gì đã được tưởng tượng.

Hãy suy nghĩ về điều này, có khả năng bạn sẽ kết thúc việc thiết kế cho các trường hợp thử nghiệm cụ thể, vì vậy bạn sẽ không sáng tạo và bắt đầu nghĩ rằng "thật tuyệt nếu người dùng có thể làm X, Y và Z". Do đó, khi người dùng đó bắt đầu hào hứng với các yêu cầu thú vị tiềm năng X, Y và Z, thiết kế của bạn có thể quá tập trung vào các trường hợp thử nghiệm đã được chỉ định và sẽ rất khó điều chỉnh.

Điều này, tất nhiên, là một con dao hai lưỡi. Nếu bạn dành toàn bộ thời gian để thiết kế cho mọi thứ có thể tưởng tượng, X, Y và Z mà người dùng có thể muốn, chắc chắn bạn sẽ không bao giờ hoàn thành bất cứ điều gì. Nếu bạn hoàn thành một cái gì đó, sẽ không ai có thể biết được những gì bạn đang làm trong mã / thiết kế của mình.


Hãy suy nghĩ về điều này, có khả năng bạn sẽ kết thúc việc thiết kế cho các trường hợp thử nghiệm cụ thể, vì vậy bạn sẽ không sáng tạo và bắt đầu nghĩ rằng "thật tuyệt nếu người dùng có thể làm X, Y và Z". - Theo tôi đó là hoàn toàn ngược lại. Nếu bạn viết bài kiểm tra đơn vị, bạn tự hỏi về các trường hợp kinh doanh khác nhau và điều đó có nghĩa là bạn sáng tạo và có thể thấy trước điều gì đó không lường trước được. Tuy nhiên, tất cả sự sáng tạo đó không quan trọng nếu việc triển khai của bạn có lỗi.
BlueLettuce16

1

Nó có thể khó và tốn thời gian viết các bài kiểm tra cho dữ liệu "ngẫu nhiên" như nguồn cấp dữ liệu XML và cơ sở dữ liệu (không khó lắm). Gần đây tôi đã dành thời gian làm việc với các nguồn cấp dữ liệu thời tiết. Nó khá khó hiểu khi viết bài kiểm tra cho điều đó, ít nhất là vì tôi không có quá nhiều kinh nghiệm với TDD.


Đây là một vấn đề phổ biến. Tôi có xu hướng giả định những thứ này với các đối tượng được mã hóa cứng, sau đó kiểm tra cơ sở dữ liệu một cách riêng biệt. Lớp doanh nghiệp của bạn sau đó chỉ nên hoạt động với dữ liệu tĩnh, sau đó DAL của bạn sẽ được kiểm tra trong môi trường được kiểm soát (nơi bạn có thể tạo kịch bản dữ liệu vào đó, v.v.)
Rob Cooper

1

Bạn sẽ mất các lớp lớn với nhiều trách nhiệm. Bạn cũng có thể sẽ mất các phương thức lớn với nhiều trách nhiệm. Bạn có thể mất một số khả năng tái cấu trúc, nhưng bạn cũng sẽ mất một số nhu cầu tái cấu trúc.

Jason Cohen đã nói điều gì đó như: TDD yêu cầu một tổ chức nhất định cho mã của bạn. Điều này có thể sai về mặt kiến ​​trúc; ví dụ, vì các phương thức riêng tư không thể được gọi bên ngoài một lớp, bạn phải làm cho các phương thức không riêng tư để làm cho chúng có thể kiểm tra được.

Tôi nói điều này chỉ ra một sự trừu tượng bị bỏ lỡ - nếu mã riêng thực sự cần phải được kiểm tra, thì nó có lẽ phải ở trong một lớp riêng biệt.

Dave Mann


1

Bạn phải viết các ứng dụng theo một cách khác: một cách làm cho chúng có thể kiểm tra được. Bạn sẽ ngạc nhiên khi điều này khó khăn như thế nào lúc đầu.

Một số người tìm thấy khái niệm suy nghĩ về những gì họ sẽ viết trước khi họ viết nó quá khó. Các khái niệm như chế giễu cũng có thể khó khăn đối với một số người. TDD trong các ứng dụng cũ có thể rất khó nếu chúng không được thiết kế để thử nghiệm. TDD xung quanh các khung không thân thiện với TDD cũng có thể là một cuộc đấu tranh.

TDD là một kỹ năng để các nhà phát triển cơ sở có thể đấu tranh lúc đầu (chủ yếu vì họ không được dạy để làm việc theo cách này).

Nhìn chung, mặc dù các khuyết điểm đã được giải quyết khi mọi người trở nên lành nghề và cuối cùng bạn đã trừu tượng hóa mã 'có mùi' và có một hệ thống ổn định hơn.


1

Phải mất một chút thời gian để bắt đầu và một chút thời gian để bắt đầu thực hiện nó trong một dự án nhưng ... Tôi luôn hối hận vì đã không thực hiện phương pháp Test Driven khi tôi tìm thấy những lỗi ngớ ngẩn mà một bài kiểm tra tự động có thể tìm thấy rất nhanh. Ngoài ra, TDD cải thiện chất lượng mã.


1
  • kiểm thử đơn vị là nhiều mã hơn để viết, do đó chi phí phát triển cao hơn
  • nó là nhiều mã hơn để duy trì
  • yêu cầu học tập bổ sung

1

Câu trả lời tốt tất cả. Tôi sẽ thêm một vài cách để tránh mặt tối của TDD:

  • Tôi đã viết ứng dụng để tự kiểm tra ngẫu nhiên. Vấn đề với việc viết các bài kiểm tra cụ thể là ngay cả khi bạn viết nhiều bài, chúng chỉ bao gồm các trường hợp bạn nghĩ đến. Trình tạo thử nghiệm ngẫu nhiên tìm thấy các vấn đề bạn không nghĩ đến.

  • Toàn bộ khái niệm về rất nhiều bài kiểm tra đơn vị ngụ ý rằng bạn có các thành phần có thể vào trạng thái không hợp lệ, như cấu trúc dữ liệu phức tạp. Nếu bạn tránh xa các cấu trúc dữ liệu phức tạp thì sẽ có rất ít thứ để kiểm tra.

  • Trong phạm vi ứng dụng của bạn cho phép nó, hãy ngại thiết kế dựa trên thứ tự thích hợp của thông báo, sự kiện và tác dụng phụ. Những người có thể dễ dàng bị rơi hoặc tranh giành vì vậy họ cần rất nhiều thử nghiệm.


Các thử nghiệm ngẫu nhiên có thể thất bại không liên tục và khiến việc lặp lại chúng trở nên khó khăn
David Sykes

@DavidSykes: Bất cứ khi nào bạn thực hiện một thử nghiệm ngẫu nhiên, bạn ghi lại các tham số, để nếu thất bại, bạn có thể lặp lại hoặc bạn có thể lặp lại sau đó ngay cả khi không thất bại. Vấn đề là nó không phụ thuộc vào bạn để nghĩ ra các trường hợp thử nghiệm. Nếu bạn giống tôi, bạn theo bản năng bị hút về các trường hợp kiểm tra an toàn.
Mike Dunlavey

0

TDD yêu cầu một tổ chức nhất định cho mã của bạn. Điều này có thể không hiệu quả hoặc khó đọc. Hoặc thậm chí sai về mặt kiến ​​trúc; ví dụ, vì privatecác phương thức không thể được gọi bên ngoài một lớp, bạn phải làm cho các phương thức không riêng tư để làm cho chúng có thể kiểm tra được, điều này là sai.

Khi mã thay đổi, bạn cũng phải thay đổi các bài kiểm tra. Với tái cấu trúc điều này có thể là rất nhiều công việc thêm.


9
Tất cả các phương thức riêng tư nên được kiểm tra thông qua các phương thức công khai tồn tại.
Garry Shutler

Điều này là không thể với tất cả các lớp. Đôi khi bạn không muốn giả lập tất cả các phụ thuộc, v.v. và bạn chỉ muốn thử nghiệm một phương pháp tiện ích.
Jason Cohen

+1, rất đúng. Thêm vào đó, yêu cầu đôi khi thêm getters / setters vào các trường riêng chỉ để có thể thiết lập và đọc trạng thái chính xác cho một bài kiểm tra đơn vị, mặc dù trạng thái phải là riêng tư đối với lớp.
erikkallen

Xem xét việc viết bài kiểm tra của bạn như thể đó là một tài liệu yêu cầu sống. Sau đó, bạn sẽ thấy ánh sáng. Cũng đọc các mẫu thử XUnit.
Scott Nimrod

0

Tôi xin nói thêm rằng nếu bạn áp dụng các nguyên tắc BDD cho dự án TDD, bạn có thể giảm bớt một số nhược điểm chính được liệt kê ở đây (nhầm lẫn, hiểu lầm, v.v.). Nếu bạn không quen thuộc với BDD, bạn nên đọc phần giới thiệu của Dan North. Ông đã đưa ra khái niệm để trả lời cho một số vấn đề nảy sinh từ việc áp dụng TDD tại nơi làm việc. Giới thiệu của Dan đến BDD có thể được tìm thấy ở đây .

Tôi chỉ đưa ra đề nghị này vì BDD giải quyết một số tiêu cực này và hoạt động như một điểm dừng. Bạn sẽ muốn xem xét điều này khi thu thập phản hồi của bạn.


Chắc chắn rồi. Bạn phải xem xét BDD khi đánh giá TDD.
dùng9991

Có vẻ như BDD = phát triển dựa trên hành vi
hayalci

0

Bạn phải chắc chắn rằng các bài kiểm tra của bạn luôn được cập nhật, thời điểm bạn bắt đầu bỏ qua đèn đỏ là khoảnh khắc các bài kiểm tra trở nên vô nghĩa.

Bạn cũng phải đảm bảo các bài kiểm tra là toàn diện, hoặc khi một lỗi lớn xuất hiện, kiểu quản lý ngột ngạt mà bạn cuối cùng đã thuyết phục để cho phép bạn dành thời gian viết thêm mã sẽ phàn nàn.


0

Người dạy nhóm phát triển nhanh nhẹn của tôi không tin vào kế hoạch, bạn chỉ viết nhiều nhất cho yêu cầu nhỏ nhất.

Phương châm của ông là tái cấu trúc, tái cấu trúc, tái cấu trúc. Tôi đã hiểu rằng refactor có nghĩa là 'không lên kế hoạch trước'.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.