Đồng nghiệp không muốn sử dụng các bài kiểm tra đơn vị vì nó mã hóa nhiều hơn


25

Một đồng nghiệp không sẵn sàng sử dụng các bài kiểm tra đơn vị và thay vào đó chọn cách kiểm tra nhanh, hãy chuyển nó cho người dùng và nếu tất cả đều ổn thì nó được xuất bản trực tiếp. Không cần phải nói một số lỗi có được thông qua.

Tôi đã đề cập đến việc chúng ta nên suy nghĩ về việc sử dụng các bài kiểm tra đơn vị - nhưng cô ấy đã chống lại điều đó một khi nhận ra nhiều mã hơn sẽ phải được viết. Điều này khiến tôi ở vị trí sửa đổi một cái gì đó và không chắc chắn đầu ra là như nhau, đặc biệt là mã của cô ấy là spaghetti và tôi cố gắng cấu trúc lại nó khi tôi có cơ hội.

Vì vậy, cách tốt nhất về phía trước cho tôi là gì?


3
Sự ác cảm khi viết các bài kiểm tra đơn vị có thể ít liên quan đến đồng nghiệp của bạn hơn là chi phí chung của các triển khai kiểm tra đơn vị thông thường.
mario

2
@james: Vui lòng xem phản hồi của tôi với @ m.edmondson.
doppelgreener

Tốt !! Ít cạnh tranh cho bạn !!

@Jonathan - đủ công bằng, tôi đứng chính xác
ozz

@ m.Edmondson - công việc mới .... đó là một phần nhỏ trong lời nhận xét của tôi, nhưng nó có vẻ như là một nơi sucky để làm việc, công nghệ cũ, các nhà phát triển không sẵn sàng sử dụng một thực hành dev hợp lý.
ozz

Câu trả lời:


23

Cô ấy không nhận thức được lợi ích của kiểm tra đơn vị và đó là những gì bạn cần thay đổi:

  • Nhận thức của cô ấy.

Bạn sẽ phải chứng minh cô ấy rằng nó sẽ cải thiện công việc của cô ấy không chỉ của bạn. Điều đó sẽ khó khăn, cô ấy có lẽ sẽ cố gắng tập trung vào mọi khía cạnh tiêu cực mà cô ấy có thể tìm thấy nếu cô ấy sợ thay đổi.

Bạn có thể cố gắng thảo luận với cô ấy về tất cả các lợi ích và lắng nghe tất cả các lập luận phản biện của cô ấy. Đợi đến khi cô ấy nói xong mới bắt đầu nói chuyện.

Để tự chuẩn bị, bạn nên tìm trên P.SE hoặc Google để biết tất cả những điều mà quản lý hoặc nhà phát triển lo lắng về thử nghiệm đơn vị và biên dịch các câu trả lời bạn sẽ sử dụng trong các cuộc thảo luận với đồng nghiệp.

Chỉ cần lắng nghe cô ấy và cung cấp bằng chứng nó sẽ cải thiện công việc của cô ấy sẽ giúp bạn rất nhiều. Bạn chứng minh rằng bạn quan tâm đến ý kiến ​​của cô ấy, và bạn cung cấp cho cô ấy tất cả dữ liệu cô ấy cần để phân tích tình huống và cuối cùng thay đổi suy nghĩ của cô ấy.


20
Yêu danh sách của một mục. +1
Armand

1
Câu trả lời này sẽ là hoàn hảo nếu bạn dừng lại ngay sau danh sách. +1 :)
Tim Post

Xin chúc mừng Tim cho vị trí thứ 2 của bạn trong cuộc bầu cử SO!

6
Tôi cảm thấy như danh sách đó xứng đáng với biểu đồ tròn của riêng mình.
Tomas

Bạn cũng có thể cần phải thay đổi sự sẵn lòng của cô ấy để gửi lỗi. Một số tránh khiếm khuyết có thể làm cho thử nghiệm tốt hơn quan trọng hơn.
stonemetal

15

Viết một bài kiểm tra đơn vị (đừng nói với cô ấy)

Đợi đến khi mọi thứ vỡ, hãy để cô ấy làm các bài kiểm tra thủ công trong hai ngày, sau đó rút bài kiểm tra đơn vị của bạn ra và tìm lỗi trong ba giây.

Bảo vệ ...


1
+1 Để chỉ ra rằng các lỗi là không thể tránh khỏi và phải che đậy.
Neil

+1 Viết một bộ đầy đủ các bài kiểm tra đơn vị cho một đoạn mã cụ thể có thể phơi bày đủ các vấn đề với mã chứng minh lợi ích dù sao đi nữa. Tôi nhớ đã xem một bài thuyết trình về cách kiểm tra đơn vị có thể được sử dụng để duy trì các thông số / hành vi giao diện / API thông qua một mã hoàn chỉnh viết lại ...
JBRWilkinson

3
@JBRWilkinson: Merb (khung ứng dụng web cũ của Ruby) đã làm chính xác điều đó. Không phải với các bài kiểm tra đơn vị, mặc dù, nhưng với các bài kiểm tra chức năng. Kiến trúc đã phát triển "một cách hữu cơ", và trong khi khung được sử dụng tốt , nó vẫn tốt để duy trìmở rộng . Và vì khả năng bảo trì và khả năng mở rộng thực sự là hai trong số những điểm bán hàng lớn so với đối thủ cạnh tranh Ruby on Rails, rõ ràng họ cần phải làm gì đó với nó. Và những gì họ đã làm là theo nghĩa đen đối với rm -rfcác thư mục kiểm tra nguồn và đơn vị, chỉ giữ lại các kiểm tra chức năng và chỉ đơn giản là đưa chúng đi qua từng cái một.
Jörg W Mittag

11

Tự động hóa các tác vụ thủ công sẽ thu hút bất kỳ lập trình viên nào.

Vì vậy, cô ấy không "viết thêm mã", cô ấy làm ít thủ công hơn.


1
phụ thuộc nếu bạn có một nhóm thử nghiệm làm tất cả những điều đó cho bạn :)
gbjbaanb

11

(Một trong) điểm của các bài kiểm tra tự động là độ lặp lại . Nếu bạn làm bài kiểm tra nhanh bằng tay, bạn có thể hoàn thành bài kiểm tra nhanh hơn so với viết bài kiểm tra đơn vị (đối với người mới bắt đầu kiểm tra đơn vị - ít nhất bất kỳ ai có kinh nghiệm trong bài kiểm tra đơn vị đều có thể kiểm tra bài kiểm tra khá nhanh).

Nhưng điều gì sẽ xảy ra khi ngày mai hoặc tuần tới, một thay đổi nhỏ (hoặc lớn ...) được thực hiện đối với mã? Đồng nghiệp của bạn sẽ vui vẻ lặp đi lặp lại các bài kiểm tra thủ công tương tự sau mỗi thay đổi, để đảm bảo rằng không có gì bị hỏng? Hay cô ấy thích "mật mã và cầu nguyện"?

Mã càng được thay đổi, các bài kiểm tra đơn vị sẽ trả lại khoản đầu tư ban đầu của bạn . Sẽ không mất nhiều thời gian để có được mặt tích cực, ngay cả khi không có các thử nghiệm thực sự bắt được bất kỳ lỗi nào. Nhưng họ cũng thường xuyên làm điều đó - tại thời điểm này, họ trở nên vô giá. Và một khi ai đó trải nghiệm cảm giác an toàn và tự tin vào mã của một người mà một lần chạy thử đơn vị thành công mang lại, thường không có sự quay đầu lại.

Nếu cô ấy bị thuyết phục nhưng ngại dấn thân vào lĩnh vực mới, hãy mời cô ấy một phiên lập trình cặp để viết bài kiểm tra đơn vị đầu tiên của cô ấy cùng nhau . Chọn một lớp không quá khó để kiểm tra nhưng đủ phức tạp để có giá trị kiểm tra.

Tuy nhiên, nếu cô ấy không bị thuyết phục, bạn có thể cần phải thu thập những sự thật khó khăn . Sự thật như vậy có thể là

  • tỷ lệ lỗi trong mã được viết bởi bạn so với cô ấy
  • viết một bộ các bài kiểm tra đơn vị chống lại mã của cô ấy và ghi lại các lỗi được tìm thấy.

Thu thập một số dữ liệu như vậy, sau đó lịch sự cho cô ấy thấy kết quả. Nếu những điều này vẫn chưa đủ để thuyết phục cô ấy, bạn có thể cần thảo luận vấn đề và chia sẻ bằng chứng thu thập được với quản lý. Đó chỉ nên là phương sách cuối cùng của bạn, nhưng đôi khi không có cách nào khác.


Rất khó xảy ra - mặc dù không có trang nào có kế hoạch kiểm tra (tài liệu excel) dài
billy.bob

@ m.edmondson, vâng, đó chỉ là một câu hỏi tu từ :-)
Péter Török

+1 cho độ lặp lại. Tôi là một người tái cấu trúc tích cực (er) và tôi thích thực tế là tôi có thể tìm thấy hồi quy rất nhanh khi tôi viết lại hoàn toàn một phần của mã.
Michael K

3

Viết phạm vi kiểm tra cơ bản cho các bit tệ nhất trong mã của cô ấy, rafactor nó dựa trên các thử nghiệm đó, sau đó đưa ra một trường hợp với quản lý rằng thử nghiệm đơn vị trên các bản dựng liên tục sẽ cải thiện năng suất. Thay đổi trở nên dễ dàng hơn khi được ủy quyền bởi một chủ nhân thay vì truyền giáo bởi một nhà phát triển duy nhất.

Không biết làm thế nào để diễn đạt điều này một cách đúng đắn, nhưng: nếu bạn tái cấu trúc mã của cô ấy "khi bạn có cơ hội" ... tốt, cô ấy có thể nghĩ rằng bạn hơi khó chịu khi liên quan đến mình trong "công việc của cô ấy" , vì vậy ít có khả năng lắng nghe bạn với một tâm trí cởi mở. Theo kinh nghiệm của tôi, mọi người trở nên gắn bó với những gì họ đã làm - ngay cả khi nó không tốt lắm.


Chúng tôi đang sử dụng .NET 1 (Một trò đùa mà tôi biết) - các bài kiểm tra đơn vị có thể được thực hiện ở đây không?
billy.bob

1
@ m.edmondson: Có lẽ giống như NUnit? ( nunit.org )
dr Hannibal Lecter

@dr Hannibal Lecter - Yea Tôi nghĩ chúng tôi đã có một bản sao của một nơi nào đó Ill xem nếu tôi có thể tìm thấy nó
billy.bob

4
kiểm tra đơn vị không cần sử dụng một bộ cụ thể để có hiệu quả. Tôi đã viết chúng chỉ bằng python thực hiện các cuộc gọi chống lại chương trình c ++ và xác minh các giá trị nhận được. một khuôn khổ giúp, chắc chắn, nhưng nó không phải là một điều cần thiết.
TZHX

3

Để chơi quỷ ủng hộ: cô ấy có một điểm. Tôi thường đặt nó là:

Kiểm tra tự động giải quyết các vấn đề của nhiều mã với nhiều mã hơn.

Cơ sở lý luận:

  • nghiên cứu về mối tương quan của tỷ lệ lỗi và số liệu OO , kết quả tiêu đề: "Sau khi kiểm soát kích thước [của lớp], không có số liệu nào chúng tôi nghiên cứu có liên quan đến mức độ lỗi nữa" . (Nghiên cứu thảo luận về quy mô lớp học. Hiệu ứng này có mở rộng đến kích thước của cơ sở mã không? Có thể. Theo tôi )
  • Theo kinh nghiệm, các dự án lớn có xu hướng đi chậm. "5K dòng qua đêm trong một dự án mới" so với "10 dòng / ngày trên một dự án lớn". Điều đó có cho thấy "sức đề kháng" thay đổi tăng theo kích thước của cơ sở mã không?
  • Chúng tôi luôn tuyên bố "không có ngôn ngữ tốt nhất, nó phụ thuộc vào vấn đề". Một yêu cầu chính là mô hình hóa các thực thể vấn đề và hoạt động dễ dàng bằng ngôn ngữ lựa chọn. Không phải điều đó gợi ý rằng việc chọn một ngôn ngữ mà việc diễn đạt vấn đề của bạn phức tạp hơn sẽ tệ hơn và không phải điều đó lại tương quan với kích thước cuối cùng của cơ sở mã sao?

Bây giờ, có một vài lập luận để chống lại điều đó một cách dễ dàng. Hãy để tôi địa chỉ những người tôi có thể nghĩ ra:

  • kích thước so với sự đơn giản: Tất nhiên có thể làm cho mã ngắn hơn và xấu hơn. Tuy nhiên, đó chỉ là một vấn đề khi so sánh các cơ sở mã với các tỷ lệ đơn giản so với đơn giản khác nhau, đối với cuộc thảo luận, người ta có thể cho rằng chúng ta có thể kiểm soát được yếu tố này bằng cách nào đó.

  • Các bài kiểm tra đơn vị gây áp lực cho bạn để giảm sự phụ thuộc và tôi đồng ý về mặt thực nghiệm rằng việc giảm các khoản phụ thuộc có thể giảm thiểu các vấn đề về kích thước mã (theo nghĩa là hai cơ sở mã có kích thước tương tự nhau, một trong số đó có nhiều phụ thuộc lẫn nhau thì tệ hơn). Tuy nhiên , trong khi giảm các phụ thuộc đơn vị mã sản xuất betwwen, nó giới thiệu khớp nối giữa thử nghiệm và chính đơn vị.


TL; DR: Tôi không cho rằng các bài kiểm tra đơn vị là xấu; Tôi hỏi: có điểm hòa vốn trong đó các bài kiểm tra bị tổn thương có liên quan đến số lượng mã không?


2

Tôi nghĩ rằng bạn đang ở một vị trí khó khăn. Tôi đã ở trong một đội nơi mọi người sẽ không viết bài kiểm tra đơn vị, hoặc tệ hơn, những bài kiểm tra đơn vị khủng khiếp không thể bảo trì. Nhưng mọi người đều biết rằng thực tế là thử nghiệm đơn vị là tốt.

Vì vậy, để bộ thử nghiệm đơn vị của nhóm có chất lượng tốt là một con đường dài khó khăn. Luôn luôn tìm kiếm nơi mọi thứ có thể được cải thiện, truyền đạt ý tưởng, chia sẻ kinh nghiệm.

Mặt khác, bạn có một nhà phát triển thậm chí chưa nhận ra lợi ích. Và sau đó cũng mã mã spaghetti. Tôi đoán một trong những lý do quan trọng nhất trong trường hợp cụ thể này là việc viết các bài kiểm tra đơn vị tốt buộc một thiết kế ghép lỏng lẻo. Vì vậy, để cô ấy viết bài kiểm tra có thể hy vọng về lâu dài cũng cải thiện mã "thực".

Nhưng tôi nghĩ rằng cuối cùng, đó là quyết định của đội (tôi không biết bạn có bao nhiêu trong đội?). Nếu nhóm có thể đạt được sự đồng thuận rằng cần có một bộ kiểm tra đơn vị bao quát, thì mọi người phải tuân thủ, chia sẻ kinh nghiệm và để nhóm của bạn phát triển mạnh mẽ cùng nhau.

Tuy nhiên, nếu nhóm không thể đạt được sự đồng thuận rằng bạn nên viết bài kiểm tra đơn vị, thì tôi khuyên bạn nên tìm một nhóm phát triển khác để làm việc cùng;)


2

Cô ấy có phải là ông chủ không?

Nếu vậy ... bạn đang bị mắc kẹt trừ khi bạn có thể thuyết phục cô ấy về những lợi ích cơ bản dọc theo dòng chữ "một ounce phòng ngừa đáng giá một pound thuốc chữa bệnh". Lỗi nhận được thông qua. TDD giúp giảm thiểu điều đó bằng cách xây dựng đầu ra nhất quán.

Có phải cô ấy không phải là ông chủ?

Các tiêu chuẩn mã hóa nơi bạn làm việc là gì? Tại sao cô ấy được phép phun ra mã spaghetti? Trình bày một trường hợp kinh doanh cho ông chủ nói rằng "Chúng tôi sẽ dành ít thời gian hơn cho các lỗi nếu chúng tôi dành nhiều thời gian hơn cho TDD". Thuyết phục một người có thể thực thi thay đổi với một trường hợp kinh doanh.

Các trường hợp tài liệu trong đó TDD có thể đã tiết kiệm thời gian & $$ TIỀN $$.

Lỗi này tự trình bày. Nó sẽ bị bắt trước khi đi vào cuộc sống. Dành 2 giờ phòng ngừa sẽ giúp chúng tôi tiết kiệm được 10 giờ. Nó đã xảy ra ở đây và ở đây và ở đây. 10 giờ làm việc đó đã giúp công ty tiết kiệm được 30 giờ. Đó là rất nhiều tiền.


1
Cố gắng thực thi các bài kiểm tra đơn vị từ trên cũng giống như buộc vợ / chồng của bạn ăn nhiều rau hơn. Họ sẽ tuân thủ một cách miễn cưỡng tốt nhất, và rơi vào thói quen cũ khi bạn ngừng xem. Đối xử tốt hơn với các nhà phát triển như người lớn có trách nhiệm và cam kết với họ rằng các bài kiểm tra đơn vị là hữu ích.
nikie

1

Điều này khiến tôi ở vị trí sửa đổi một cái gì đó

Tại sao?

Họ đã tạo ra vấn đề. Họ nên giải quyết nó.

Người quản lý nào đang cho phép điều này xảy ra? Tại sao bây giờ mã lỗi của người khác lại là vấn đề của bạn?

Bạn có một đồng nghiệp một người quản lý đang làm cho điều này xảy ra. Và bằng cách dọn dẹp mớ hỗn độn của họ, bạn là một người tham gia sẵn sàng và tích cực.

Sẽ không có gì thay đổi nếu họ không cảm thấy nỗi đau của chất lượng kém.


> Họ đã tạo ra vấn đề => Họ nên giải quyết nó. Đôi khi những người gần bức tranh nhất không thể nhìn thấy toàn bộ bức tranh. Viết một bài kiểm tra đơn vị sẽ làm một chút công việc nhưng không nhất thiết phải làm sạch công việc của người khác. Một cơ hội để dẫn dắt bằng ví dụ.
JBRWilkinson

1
@JBRWilkinson: Mặc dù đúng - và những gì tôi thường làm - nó không ảnh hưởng đến bất kỳ thay đổi văn hóa nào. Nếu ai đó từ chối làm các bài kiểm tra, có một nền văn hóa làm cho sự từ chối này (a) có thể và (b) được củng cố như hành vi tốt. Âm thầm gánh vác gánh nặng sửa chữa mớ hỗn độn của người khác sẽ không khắc phục được những nguyên nhân cơ bản.
S.Lott

Mặc dù tôi đồng ý rằng sẽ không bền vững khi các thành viên trong nhóm chỉ đưa ra mã tào lao và trông cậy vào những người khác xử lý mớ hỗn độn của họ, tôi nghĩ rằng việc áp dụng "nếu bạn phá vỡ nó, bạn sở hữu nó" là điều không có ích. Bạn không muốn mọi người sợ thay đổi và cải thiện mã. Thay vào đó, tập trung vào việc truyền bá các thực tiễn tốt và xây dựng một bộ kiểm tra âm thanh. Sau đó, bạn có thể làm việc hướng tới một tư duy "sở hữu chung" hơn. Đó là mã của mọi người. Mọi người sửa nó, mọi người cải thiện nó và chịu trách nhiệm.
sara

1

Cô ấy khá chính xác, bài kiểm tra đơn vị là "nhiều mã hơn".

Tuy nhiên, nó chỉ đơn giản là nhiều mã hơn phải được viết để xác định rằng chương trình hoạt động như thế nào (lặp đi lặp lại). Nó không lãng phí thời gian. Nó là một phần của hệ thống cũng như các thành phần cốt lõi của nó.

Thử thách cô ấy trên:

  1. Điều gì xảy ra nếu ai đó không quen thuộc với mã thay đổi điều gì đó.
  2. Điều gì xảy ra nếu ai đó thiếu kinh nghiệm thay đổi điều gì đó.
  3. Chi phí duy trì một hệ thống không được đo lường trong bao lâu để tạo ra. Đó là một đề xuất dài hạn hơn. Hãy suy nghĩ về tổng chi phí sở hữu.
  4. Ước tính của cô ấy (nếu điều đó là bắt buộc trước khi bắt đầu mã hóa) nên bao gồm yêu cầu viết bài kiểm tra đơn vị. Người kinh doanh không tạo ra các yêu cầu yêu cầu kiểm tra đơn vị trực tiếp, nhưng họ có một yêu cầu ngầm về chất lượng và yêu cầu các thay đổi trong tương lai không bị lỗi hoặc cùng một lập trình viên thay đổi nguồn.

Tôi không chắc chắn tôi mua "đó là nhiều mã hơn" như thế. Có thể là. Nó có lẽ thường là. Nhưng nó không phải như vậy. Một bộ kiểm tra tốt giúp bạn bắt đầu viết ít mã hơn (bạn biết khi nào bạn hoàn thành và có thể dừng ngay lập tức) và giúp bạn cấu trúc lại và thu nhỏ mã thường xuyên hơn. Điều này dẫn đến rất nhiều thử nghiệm và không có nhiều mã sản xuất, trái ngược với không có thử nghiệm và một đống mã sản xuất lộn xộn lớn sẽ không bao giờ được làm sạch.
sara

1

Nói như một mã hiện đang làm mã sản xuất, được theo dõi bởi các thử nghiệm đơn vị thay vì TDD, dường như không phù hợp với vị trí hiện tại của tôi (Tôi đã thực hiện TDD trên một số dự án, nhưng xem nó như một công cụ khác trong túi ol ', không phải viên đạn bạc) ...

Nó có thể là một khó bán. Tôi vẫn chưa thể bán đồng nghiệp của mình khi thử nghiệm đơn vị. Tôi biết rằng tôi có xu hướng mắc nhiều lỗi trong mã kiểm tra đơn vị hơn là mã sản xuất. Vì vậy, thật là một chút bực bội khi phải dành quá nhiều thời gian để sửa mã kiểm tra đơn vị ... Tuy nhiên, đó là bảo hiểm tốt khi mã được sửa đổi. Cách tuyệt vời để kiểm tra điều kiện cạnh tự động.


1

Chỉ cho cô ấy biết bao nhiêu bài kiểm tra đơn vị giúp bằng cách tự tạo bài kiểm tra đơn vị.

Như thánh Phanxicô đã từng nói: "Luôn luôn rao giảng. Khi cần thiết, hãy dùng từ ngữ."

Nếu cô ấy thấy rằng mã của bạn đang sử dụng các bài kiểm tra đơn vị và rằng bạn có thể giải quyết các lỗi nhanh hơn bằng các bài kiểm tra đơn vị, thì nó có thể thay đổi suy nghĩ của cô ấy. Nhưng, nó có thể không.

Cho dù kết quả thế nào, cô ấy không xem bạn là điều gì đó với cô ấy mà bạn không sẵn sàng làm. Đó là những gì bạn phải thay đổi, nhận thức mà bạn không dẫn đầu bằng ví dụ.

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.