Phương pháp: Viết bài kiểm tra đơn vị cho nhà phát triển khác


28

Tôi đã suy nghĩ về phát triển phần mềm và viết bài kiểm tra đơn vị. Tôi có ý tưởng sau đây:

Giả sử chúng ta có các cặp nhà phát triển. Mỗi cặp chịu trách nhiệm cho một phần của mã. Một từ cặp thực hiện một tính năng (viết mã) và thứ hai viết một bài kiểm tra đơn vị cho nó. Các xét nghiệm được viết sau khi mã. Trong ý tưởng của tôi họ giúp đỡ lẫn nhau, nhưng làm việc khá riêng biệt. Lý tưởng nhất là họ sẽ làm việc trên hai tính năng có kích thước tương tự và sau đó trao đổi để chuẩn bị thử nghiệm.

Tôi nghĩ rằng ý tưởng này có một số mặt tích cực:

  • bài kiểm tra được viết bởi ai đó, người có thể xem thêm về việc thực hiện,
  • công việc nên được thực hiện nhanh hơn một chút so với lập trình cặp (hai tính năng cùng một lúc),
  • cả kiểm tra và mã đều có người chịu trách nhiệm cho nó,
  • mã được kiểm tra bởi ít nhất hai người và
  • có thể tìm kiếm lỗi trong mã được viết bởi người đang kiểm tra mã của bạn sẽ tạo động lực đặc biệt để viết mã tốt hơn và tránh bị cắt góc.

Có lẽ cũng nên thêm một nhà phát triển khác để xem xét mã giữa phát triển mã và kiểm tra.

Nhược điểm của ý tưởng này là gì? Có phải nó đã được mô tả như một phương pháp không xác định và được sử dụng trong phát triển phần mềm?

Tái bút Tôi không phải là người quản lý dự án chuyên nghiệp, nhưng tôi biết vài điều về quy trình phát triển dự án và biết một vài phương pháp phổ biến nhất - nhưng ý tưởng này không quen thuộc với tôi.


17
Bạn chỉ đang mô tả QA hạ lưu ở cấp đơn vị. Nếu bạn có cặp người làm việc gì đó, bạn đã thử lập trình cặp thực tế với TDD chưa?
jonrsharpe

9
Điều này sẽ hoạt động tốt hơn nếu người viết thử nghiệm thực hiện các thử nghiệm đầu tiên (viết mã bộ xương) và người khác thực hiện chức năng. Người đầu tiên sẽ kiểm soát thiết kế và người còn lại sẽ thực hiện việc nâng vật nặng. Điều đó có thể hoạt động tốt nếu người đầu tiên biết anh ta đang làm gì và người thứ hai không bận tâm theo sự dẫn dắt của anh ta mọi lúc. Tôi không biết về tên cho cách hợp tác này. Tôi sẽ nói .. yêu cầu nó! Bắt đầu gọi đây là sự phát triển của Franiis.
Martin Maat

14
Sự chỉ trích đó không có ý nghĩa gì, và đề nghị của bạn không giải quyết được vấn đề đó.
jonrsharpe

5
@franiis Tôi đã thấy các đồng nghiệp viết assert truebài kiểm tra và gọi đó là một ngày vì mọi bài kiểm tra đều trôi qua. Một bước quan trọng đã bị thiếu: các thử nghiệm sẽ thất bại trước tiên và nên được thực hiện để vượt qua bằng cách thay đổi mã, không phải các thử nghiệm.
Eric Duminil

6
@franiis TDD được xây dựng xung quanh vòng lặp. Viết bài kiểm tra thất bại. Viết mã làm cho bài kiểm tra màu xanh lá cây. Cấu trúc lại. Viết một bài kiểm tra thất bại. Viết mã làm cho bài kiểm tra màu xanh lá cây. Cấu trúc lại. Có vẻ như bạn đang thiếu phần "lặp lại cho đến khi bạn có các bài kiểm tra đáp ứng tất cả các yêu cầu của bạn". Nhưng vấn đề lớn nhất mà bạn dường như gặp phải là "các bài kiểm tra" được xem là thứ bạn phải có vì ai đó đã nói như vậy, thay vì các bài kiểm tra là một công cụ hữu ích cho các nhà phát triển . Nếu bạn không thể khiến mọi người quan tâm đến chất lượng (và tính chính xác) của mã của họ, thì đó là vấn đề của bạn và đó là nơi bạn nên bắt đầu.
Luaan

Câu trả lời:


30

Cách tiếp cận chung của việc sử dụng các cặp để phân chia nỗ lực viết mã sản xuất và viết các bài kiểm tra đơn vị liên quan của nó là không phổ biến. Tôi thậm chí đã từng ghép đôi theo cách này trước đây với thành công tốt đẹp. Tuy nhiên, một ranh giới nghiêm ngặt giữa người viết mã sản xuất và người viết mã kiểm tra có thể không nhất thiết mang lại kết quả.

Khi tôi sử dụng một cách tiếp cận tương tự, cặp đôi bắt đầu bằng cách nói chuyện và nhận được sự hiểu biết chung về vấn đề. Nếu bạn đang sử dụng TDD, trước tiên bạn có thể bắt đầu với một số thử nghiệm cơ bản. Nếu bạn không sử dụng TDD, có lẽ bạn sẽ bắt đầu với định nghĩa phương thức. Từ đây, cả hai thành viên của cặp đều làm việc trên cả mã sản xuất và mã thử nghiệm, với một người tập trung vào từng khía cạnh, nhưng nói về các cách để cải thiện mã sản xuất cũng như mã thử nghiệm đằng sau nó.

Tôi không thấy lợi thế của việc cung cấp cho mỗi cặp hai tính năng. Những gì bạn kết thúc là một cái gì đó tương tự TDD cho một số tính năng và một cái gì đó không dành cho các tính năng khác. Bạn mất tập trung. Bạn không nhận được lợi ích của đánh giá ngang hàng theo thời gian thực. Bạn không nhận được bất kỳ lợi ích chính nào của việc ghép đôi.

Việc thực hành lập trình cặp không phải là về tốc độ, mà là chất lượng. Vì vậy, cố gắng sử dụng một kỹ thuật sửa đổi được thúc đẩy bằng cách đi nhanh hơn đi ngược lại với bản chất. Bằng cách xây dựng phần mềm chất lượng cao hơn thông qua đánh giá mã song song và phát triển thử nghiệm, bạn sẽ tiết kiệm được thời gian xuôi dòng vì có ít nhất hai người có kiến ​​thức về từng thay đổi và bạn đang loại bỏ (hoặc giảm) các chu kỳ chờ để xem xét và kiểm tra ngang hàng.


Cảm ơn bạn, ý tưởng của tôi giả định rằng cả hai tính năng được phát triển theo cùng một cách (nhưng các nhà phát triển trao đổi vai trò) - chỉ để làm rõ, không bảo vệ ý nghĩa của khái niệm đó. Tôi thích câu trả lời của bạn và sự tập trung của bạn vào tốc độ so với chất lượng.
franiis

Theo kinh nghiệm của tôi, chi phí làm lại lớn hơn lợi ích của phương pháp này. Tôi muốn có một cặp đánh đổi các nhiệm vụ này bằng cách sử dụng 'bóng bàn' hoặc phương pháp khác.
neontapir

3
Việc thực hành lập trình cặp không phải là về tốc độ, mà là chất lượng. Cặp TDD là về chất lượng, mang lại tốc độ hoàn thành, mang lại chi phí phát triển thấp hơn. Đó chỉ là ngành công nghiệp của chúng ta học những gì thợ xây đã biết trong nhiều thiên niên kỷ: bức tường của bạn sẽ được xây dựng tốt hơn trong thời gian ngắn hơn, với ít nỗ lực hơn và ít chi phí hơn nếu bạn lãng phí thời gian để thiết lập một chuỗi dây trước và quy tắc thợ xây, sau đó đặt viên gạch của bạn, hơn là bạn đặt viên gạch của mình và cố gắng điều chỉnh sau đó với cấp độ tinh thần và vồ. Và nhận được sự giúp đỡ với mọi thứ.
Laurent LA RIZZA

@LaurentLARIZZA Điều đó có vẻ đúng. Tôi cho rằng một cách tốt hơn để nói rằng đó là "Thực hành lập trình cặp không phải là về tốc độ trong hiện tại, mà là chất lượng và tốc độ trong tương lai." Đó chắc chắn là một thực tiễn mong muốn để tìm ra các vấn đề sớm hơn, cải thiện sự mạnh mẽ của công việc và chia sẻ kiến ​​thức để phá bỏ các silo. Tất cả những thứ này có một chi phí bây giờ sẽ thường trả phần thưởng trong tương lai.
Thomas Owens

@ThomasOwens: Chà, chi phí chất lượng chỉ được cảm nhận, không có thật. Khi thử nghiệm của bạn vượt qua (và bạn đã thu dọn mã của mình), kịch bản được mô tả bởi thử nghiệm của bạn được thực hiện và bảo mật và bạn có được sự tin cậy rằng nó hoạt động như mong đợi. Thế là xong, và bạn có thể tiếp tục. Nếu bạn tiếp tục mà không chắc chắn rằng mã hoạt động, bạn chỉ chấp nhận một khoản nợ mà bạn phải thực hiện kiểm tra sau đó. Nợ chi phí, không phải là không có nợ. Ý tôi là, "tương lai" mà bạn nói đến là ngay khi bài kiểm tra đầu tiên của bạn trôi qua.
Laurent LA RIZZA

37

Vấn đề chính với ý tưởng của bạn là bạn không thể viết bài kiểm tra cho bất kỳ mã nào. Các mã phải được kiểm tra.

Tức là bạn cần có khả năng tiêm giả, tách ra bit bạn muốn kiểm tra, trạng thái truy cập được thay đổi và cần xác nhận, v.v.

Trừ khi bạn gặp may mắn hoặc viết bài kiểm tra trước, nhiều khả năng là viết bài kiểm tra có nghĩa là viết lại mã một chút. Mà, nếu bạn không phải là người viết mã ở nơi đầu tiên, sẽ có nghĩa là trì hoãn, các cuộc họp, tái cấu trúc, v.v.


Cảm ơn. nhưng phê bình phổ biến của TDD là mã đôi khi / thường được viết để thực hiện các bài kiểm tra "xanh" - không được tốt. Nếu các kiểm tra không kiểm tra một số khía cạnh của mã, thì nó có thể bị bỏ qua trong mã. Kiểm tra viết sau này có thể giúp điều này (tôi chấp nhận rằng một số thay đổi có thể được yêu cầu sau khi viết mã, nhưng các nhà phát triển nên học cách viết mã kiểm tra nhiều hơn trong tương lai).
franiis

1
@franiis chắc chắn, vấn đề chính không phải là bạn viết các bài kiểm tra sau, mà là sự kết hợp giữa việc đó và không phải là cùng một người đã viết mã.
Ewan

nhưng nếu sử dụng ví dụ lập trình cặp sẽ tốn ít thời gian hơn. Nếu hai nhà phát triển làm việc trên một thiết bị đầu cuối thì họ không thể đồng thời làm việc trên hai tính năng và ý tưởng của tôi sẽ cho phép điều này (ngay cả trong phạm vi giới hạn). Các cuộc họp cho nhóm vi mô 2 người không nên là gánh nặng thực sự.
franiis

25
@franiis: "Nếu các kiểm tra không kiểm tra một số khía cạnh của mã, thì nó có thể bị bỏ qua trong mã." - Đó là toàn bộ điểm. Các bài kiểm tra là một mã hóa của các yêu cầu dưới dạng các ví dụ thực thi. Nếu không có thử nghiệm cho nó, thì không có yêu cầu cho nó, và không nên có mã cho nó .
Jörg W Mittag

3
Mặt khác của những gì @ JörgWMittag nói sẽ là: nếu các bài kiểm tra của bạn "không kiểm tra một số mã quan trọng", thì bạn cần sửa các bài kiểm tra của mình. Điều này sẽ đúng trong hệ thống của bạn như trong TDD truyền thống.
bta

15

Vấn đề chính tôi thấy ở đây, ở cấp độ đơn vị, khi tôi viết mã, tôi muốn biên dịch nó, chạy nó và loại bỏ các lỗi rõ ràng nhất ngay lập tức - ngay cả khi mã không đầy đủ và tôi biết đơn vị, tính năng hoặc chức năng là chỉ thực hiện một phần. Và để chạy mã của một đơn vị, tôi cần một số chương trình gọi thực hiện, thường là kiểm tra đơn vị hoặc ít nhất là kiểm tra đơn vị một phần. Đây không nhất thiết là "phong cách TDD của cuốn sách", một bài kiểm tra như vậy có thể được viết sau hoặc trước mã được kiểm tra.

Khi một phiên bản của đơn vị của tôi "hoàn thành tính năng" và không có lỗi, tôi có thể tự mình tìm cách này, thì việc giao nó cho người thứ hai và để cô ấy / anh ấy viết bài kiểm tra đơn vị bổ sung hoặc xem lại mã của tôi . Nhưng đối với tôi, không có ý nghĩa gì khi bàn giao nó ngay khi trình biên dịch không có cảnh báo, điều đó chắc chắn là quá sớm trong trường hợp tôi biết tôi phải giải thích chi tiết về người kiểm tra những thứ không hoạt động "chưa", hoặc sẽ hoạt động khác nhau trong hai giờ kể từ khi tôi vẫn làm việc với đoạn mã đó. Chi phí liên lạc cần thiết cho việc này ở mức độ chi tiết đó sẽ IMHO không được cân bằng bởi các lợi ích.

Vì vậy, có, có một nhà phát triển thứ hai viết bài kiểm tra đơn vị bổ sung có ý nghĩa, nhưng không phải để viết bài kiểm tra đơn vị độc quyền .


7

Dường như có khả năng xảy ra bất kỳ tình huống nào sau đây - tất cả đều không mong muốn:

Sự nhầm lẫn

Như Ewan đã phác thảo, CUT có thể cần thay đổi để có thể kiểm tra được. Lý do cho sự thay đổi không phải lúc nào cũng rõ ràng đối với nhà phát triển (và có thể gây ra sự bất đồng), đó chính xác là lý do tại sao các bài kiểm tra được viết trước.

Ganh đua

Nhà phát triển A có thể đã hoàn thành mã của họ và muốn thử nghiệm nó. Nhà phát triển B cũng có thể đang phát triển và do đó có thể sẽ giữ lại mã của họ để tham dự các bài kiểm tra đơn vị.

Chuyển ngữ cảnh

Ngay cả khi nhà phát triển B sẵn sàng tạm gác sự phát triển của họ để kiểm tra mã được viết bởi nhà phát triển A - sự thay đổi trong hoạt động phải trả giá.


Nó đã được chấp nhận trong nhiều thập kỷ rằng việc nhân đôi sức mạnh của con người không làm giảm một nửa thời gian phát triển. Xem xét các yếu tố tôi đã nêu ở trên, thật khó để thấy sự sắp xếp này sẽ cải thiện mọi thứ như thế nào.


4

Khi được sử dụng kết hợp với lập trình cặpTDD, đây được gọi là Mô hình Ping Pong :

  • A viết một bài kiểm tra mới và thấy rằng nó thất bại.
  • B thực hiện mã cần thiết để vượt qua bài kiểm tra.
  • B viết bài kiểm tra tiếp theo và thấy rằng nó thất bại.
  • A thực hiện mã cần thiết để vượt qua bài kiểm tra.

Và như vậy. Tái cấu trúc được thực hiện bất cứ khi nào có nhu cầu bởi bất cứ ai đang lái xe.

Nhưng bạn dường như đề xuất rằng cả hai lập trình viên mã với các máy tính khác nhau. Làm điều đó một cách riêng biệt sẽ đòi hỏi phải có một đặc điểm kỹ thuật mức độ rất thấp. Điều này đi ngược lại các phép đo nhanh. Mọi thay đổi sẽ cần phải được phối hợp. Trong TDD, bạn đang thực hiện cấp độ thấp khi đang di chuyển và nó không phải là vấn đề. Tôi giả định rằng aproach của bạn sẽ cần phải có một số loại bộ xương đã được mã hóa.

Dù sao: Bạn có thể học được rất nhiều bằng cách thử nghiệm các cách làm mới ngay cả khi không hiệu quả 100%. Bạn có thể kiểm tra nó và chia sẻ kinh nghiệm thực tế của bạn


3

Tôi đến muộn trong bữa tiệc này, nhưng tôi nghĩ rằng tôi có một cái gì đó để thêm.

Có phải nó đã được mô tả như một phương pháp không xác định và được sử dụng trong phát triển phần mềm?

Bạn đang mô tả thử nghiệm ngang hàng .

Giả sử chúng ta có các cặp nhà phát triển.

Ah, lập trình cặp ol 'tốt .

Mỗi cặp chịu trách nhiệm cho một phần của mã. Một từ cặp thực hiện một tính năng (viết mã) và thứ hai viết một bài kiểm tra đơn vị cho nó. Các xét nghiệm được viết sau khi mã. Trong ý tưởng của tôi họ giúp đỡ lẫn nhau, nhưng làm việc khá riêng biệt.

Đó không phải là Lập trình cặp.

Lý tưởng nhất là họ sẽ làm việc trên hai tính năng có kích thước tương tự và sau đó trao đổi để chuẩn bị thử nghiệm.

Đó chắc chắn là thử nghiệm ngang hàng. Đây là một bài báo ACM về nó . Tôi đã làm điều này. Tôi đã từng làm việc khi đó là một phần chính thức của quy trình Đánh giá ngang hàng . Nó hữu ích, nhưng nó chắc chắn không phải là dòng thử nghiệm đầu tiên và chắc chắn nó không phải là Lập trình cặp cổ điển.

Một tên khác cho điều này là Whitebox tests . Mặc dù định nghĩa đó không liên quan đến người thực hiện thử nghiệm nhiều như với thực tế là người thử nghiệm sẽ thấy hoạt động bên trong của thứ họ đang thử nghiệm, trái ngược với thử nghiệm Hộp đen nơi họ chỉ nhìn thấy những gì diễn ra và những gì đi ra ngoài Hộp đen thường là những gì QA làm.

Dòng thử nghiệm đầu tiên nằm chắc chắn trong tay của lập trình viên. Nếu không, bạn không yêu cầu tôi tự kiểm tra mã của mình mà tôi từ chối làm. Tôi đã kiểm tra mã của mình từ khi tôi 10 tuổi. Tôi có thể đã không thử nghiệm với các thử nghiệm đơn vị ưa thích trước đó nhưng mã của tôi đã được thử nghiệm. Nó đã được thử nghiệm mỗi khi tôi chạy nó.

Những gì tôi mong đợi từ một người kiểm tra ngang hàng là các bài kiểm tra thêm vào bài kiểm tra của tôi. Các thử nghiệm làm rõ rất nhiều vấn đề mà đồng nghiệp tìm thấy với mã khi họ xem xét nó. Bằng cách thể hiện những vấn đề này bằng một bài kiểm tra tự động, nó làm cho việc hiểu ý nghĩa của chúng dễ dàng hơn nhiều. Nguyên vẹn, tôi đã có những cuộc trò chuyện kỹ thuật với các đồng nghiệp, những người không thể nhìn thấy điểm tôi đang thực hiện và sau đó nhận ra cách tốt nhất để chỉ cho họ vấn đề là viết bài kiểm tra đơn vị. Đó là thử nghiệm ngang hàng.

Bây giờ nếu bạn muốn cho tôi kiểm tra viết trước khi tôi viết mã của tôi tốt. Không có gì giống như một tài liệu yêu cầu trang trọng đến mức nó biên dịch.


Cảm ơn bạn đã phản hồi và chỉ cho tôi đến Kiểm tra ngang hàng (Tôi sẽ đọc về nó).
franiis

1

Tôi đã thực hiện DDT (thử nghiệm theo định hướng phát triển, còn gọi là thử nghiệm sau mã), lập trình cặp và TDD tái cấu trúc đỏ-xanh trong vài năm mỗi lần. Để trả lời các xác nhận của bạn từng điểm:

bài kiểm tra được viết bởi ai đó, người có thể xem thêm về việc thực hiện

Người viết bài kiểm tra cần biết thực hiện càng chặt chẽ càng tốt, để viết bài kiểm tra có độ bao phủ tốt mà không cần kiểm tra quá mức. Ví dụ kinh điển về điều này là thử nghiệm với ba đầu vào khi hai đầu vào sẽ chứng minh những gì bạn đang cố gắng thử nghiệm. Mặc dù họ có thể đạt được sự quen thuộc bề mặt với mã khi đọc nó, nhưng họ sẽ không thể hiểu chính xác những gì nhà phát triển ban đầu đã trải qua để đến trạng thái hiện tại. Vì vậy, họ sẽ có sự hiểu biết ít hơn tối ưu về mã.

công việc nên được thực hiện nhanh hơn một chút so với lập trình cặp (hai tính năng cùng một lúc)

Tôi không hiểu tại sao bạn nói vậy. Trong khi ai đó đang viết bài kiểm tra, họ không làm việc trên các tính năng mới. Bạn không thể nhân đôi khả năng làm việc của ai đó bằng cách cho họ hai loại công việc khác nhau. Theo kinh nghiệm của tôi, việc kiểm tra viết thường khó hơn viết mã sản xuất, do đó bạn chắc chắn không thể làm việc hiệu quả và có trách nhiệm trong các thử nghiệm đối với một số mã trong khi viết một tính năng khác.

cả kiểm tra và mã đều có người chịu trách nhiệm cho nó

Đầu tiên, các bài kiểm tra mã. Đối với mã kiểm tra kinh doanh cũng quan trọng như mã sản xuất, bởi vì nó cho phép doanh nghiệp thay đổi phần mềm mà không sợ hãi. Thứ hai, điều này không khác với một người viết các bài kiểm tra và mã sản xuất, hoặc thậm chí một cặp viết cả hai.

mã được kiểm tra bởi ít nhất hai người

Không, nó chỉ được kiểm tra bởi người viết bài kiểm tra. Trừ khi bạn muốn sử dụng nhiều thời gian hơn để thử nghiệm, trong trường hợp nào tại sao lại dừng ở hai?

có thể tìm kiếm lỗi trong mã được viết bởi người đang kiểm tra mã của bạn sẽ tạo động lực đặc biệt để viết mã tốt hơn và tránh bị cắt góc.

Các nhà phát triển (thậm chí là những người cao cấp) có những ý tưởng rất khác nhau tạo nên mã "tốt". Cắt góc của một người là cách hoàn toàn hợp lệ để nhận mã làm việc càng sớm càng tốt. Đây là một công thức để đổ lỗi và chơi game hệ thống.

TDD tái cấu trúc màu đỏ-xanh ( thực tế là viết một thử nghiệm trước khi viết mã sản xuất, chạy mã, thấy nó thất bại, chỉ sửa đổi mã sản xuất , chạy lại thử nghiệm, nhìn thấy nó thành công, sau đó tái cấu trúc và không bỏ qua hoặc hoán đổi bất kỳ các bước này) và đánh giá mã làm việc.


Nó sẽ nhanh hơn (có lẽ) bởi vì bạn không có hai người làm "cùng một công việc" - mỗi người đều làm việc của riêng mình và sau đó hoán đổi giữa chừng.
Jacob Raihle

@JacobRaihle Ghép đôi không phải là hai người phát triển cạnh nhau mà không có giao tiếp. Đó sẽ là hai người làm cùng một công việc. Ghép nối thực sự hiệu quả vì hai người đang hợp tác trong một công việc. Theo kinh nghiệm của tôi, việc phát triển nhanh như với các lập trình viên riêng lẻ (nghĩa là các cặp hoàn thành công việc nhanh gấp đôi), phần mềm kết quả có chất lượng cao hơn nhiều và kiến ​​thức đã được chia sẻ.
l0b0

Tôi đang cố gắng giải thích lý do căn bản đằng sau "công việc nên được thực hiện nhanh hơn một chút", điều này dường như làm bạn bối rối. Ghép nối thường chậm hơn trong trải nghiệm của tôi, mặc dù tôi vẫn nghĩ rằng nó đáng giá (tốt hơn cho cả công việc cá nhân và bàn giao thử nghiệm OP). Nếu nó nhanh hơn cho bạn, tất cả tốt hơn.
Jacob Raihle

1

Tôi nghĩ rằng ý tưởng này có một số mặt tích cực:

Le'ts chạy qua chúng từng cái một.

bài kiểm tra được viết bởi ai đó, người có thể xem thêm về việc thực hiện,

Vì vậy, bạn có nghĩa là nhà phát triển đầu tiên đã dành thời gian để viết một số triển khai, mà anh ta không chắc chắn làm việc. Sau đó, một nhà phát triển khác đến và viết các bài kiểm tra, dựa trên lý lẽ về mã của anh ta, không ai biết liệu nó có đúng hay không, và hy vọng rằng nó mang lại lợi thế chiến thuật so với việc viết các bài kiểm tra chỉ liên quan đến những gì mã phải làm. Nếu việc thực hiện không chính xác, ý kiến ​​của tôi sẽ mang lại sự giúp đỡ bằng không đối với các bài kiểm tra viết.

công việc nên được thực hiện nhanh hơn một chút so với lập trình cặp (hai tính năng cùng một lúc)

Khi cả hai nhà phát triển đã hoàn thành việc phát triển ban đầu của họ, không ai biết liệu mã của họ có đúng hay không. Điều này vẫn còn phải được kiểm tra, không ai có thể đánh dấu bất kỳ ai là xong và không ai có thể dự đoán khi nào chúng sẽ được thực hiện. So sánh điều này với TDD: Bạn viết bài kiểm tra trước, sau đó làm bài kiểm tra thất bại, sau đó chuyển bằng mã. Đó là mã hỗ trợ ngày càng nhiều kịch bản. Đó là chuyển động về phía trước.

Nếu bạn thực hiện chúng song song, mã có thể được sử dụng lại trong cả hai tính năng sẽ được viết hai lần và chi phí cao gấp đôi.

cả kiểm tra và mã đều có người chịu trách nhiệm cho nó,

Nhìn vào quyền sở hữu mã tập thể, như đề xuất của XP. Bạn thậm chí sẽ có nhiều người chịu trách nhiệm về mã. Nếu mục tiêu của bạn là chia sẻ kiến ​​thức giữa các nhà phát triển, tại sao bạn lại cố gắng tách biệt họ?

mã được kiểm tra bởi ít nhất hai người

Với cặp TDD cũng vậy. Khi ghép nối, cả hai người phải đồng ý rằng mã viết là đủ hoặc không viết mã. Nếu điều đó dẫn đến một cuộc chiến, một số người trong đội có vấn đề về bản ngã.

có thể tìm kiếm lỗi trong mã được viết bởi người đang kiểm tra mã của bạn sẽ tạo động lực đặc biệt để viết mã tốt hơn và tránh bị cắt góc.

Tìm kiếm các lỗi ngụ ý rằng tại một số điểm, bạn chấp nhận rằng chúng xâm nhập. Nếu chúng xâm nhập, chúng không được chú ý. Từ chối viết bài kiểm tra trước tiên là cấp giấy phép cho các lỗi để vào.

Góc cắt có thể là vô ý. Đó là những gì lập trình cặp là dành cho. Mỗi thành viên của cặp nên được hướng dẫn với nhiệm vụ không để người kia cắt góc, bởi vì, tất cả chúng ta đều làm điều đó. Điều đó đòi hỏi phải để lại niềm tự hào của bạn trong tủ quần áo và lấy lại khi bạn rời văn phòng. Nếu bạn mong đợi người của bạn sẽ luôn nghiêm khắc, bạn sẽ không xem xét tình huống chung và tự đặt ra thất bại.

XP nói rõ ràng rằng tất cả các thực hành XP được tạo ra để củng cố lẫn nhau bằng cách che đi khuyết điểm của nhau. Bạn không nên lắng nghe những lời chỉ trích về bất kỳ thực hành XP nào tách biệt với những người khác. Không ai thực hành là hoàn hảo, TDD không hoàn hảo, lập trình cặp không hoàn hảo, quyền sở hữu mã tập thể không hoàn hảo, nhưng tất cả đều bao trùm cho nhau.

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.