Làm thế nào để theo dõi mã xem xét hiệu quả?


28

Tôi nghi ngờ đánh giá mã lớn bao gồm trong nhóm của tôi. Quá nhiều đánh giá mã được hợp nhất mà không có bất kỳ bình luận.

Dường như với tôi như không có một đánh giá mã nào mà không có một nhận xét nào.

Làm cách nào tôi với tư cách là một nhóm trưởng theo dõi chính xác rằng nhóm của tôi đang thực hiện quy trình xem xét mã phù hợp và làm cách nào tôi có thể giúp họ tối đa hóa lợi ích của quy trình?

Cập nhật

Nghĩ rằng mọi người có thể muốn biết về bất kỳ cập nhật. Tôi đã thử rất nhiều lời đề nghị được đưa ra ở đây. hầu hết đã được sử dụng. một số giúp đỡ một chút. Tuy nhiên, vấn đề vẫn còn - một số người liên tục nhận được mã xấu khi tôi không tìm kiếm.

Tôi thấy rằng việc theo dõi đánh giá mã không hữu ích bằng việc cung cấp cho các công cụ nhóm của tôi để làm cho mã của họ tốt hơn để bắt đầu.

Vì vậy, tôi đã thêm một thư viện có tên "jscpd" để phát hiện các bản sao dán. Việc xây dựng thất bại trên các bản sao dán. Điều đó đã loại bỏ một vấn đề ngay lập tức.

tiếp theo chúng ta sẽ thử dùng tiền mã hóa.

Tôi cũng đang thực hiện đánh giá thủ công các đánh giá mã cũ một lần chạy nước rút trong nửa ngày. Tôi đang chuyển đổi todothành các vấn đề / vé - vì tôi phát hiện ra mọi người đang viết chúng, nhưng chúng không bao giờ được xử lý tại một thời điểm sau đó. Tôi cũng đang thực hiện các cuộc họp với toàn đội để xem xét mã khi thấy phù hợp.

nói chung có cảm giác như chúng ta đang đi đúng hướng.


1
Trong trường hợp bạn đang sử dụng TFS, bạn có thể định cấu hình nó để kết hợp Tên của Người đánh giá mã.
Krishnandu Sarkar


11
@gnat tôi không đồng ý. Có một sự khác biệt giữa ai đó không thích đánh giá mã và câu hỏi này là gì. Câu hỏi này có thể bị tấn công từ góc độ truy xuất nguồn gốc (liên kết các thay đổi trong mã nguồn với đánh giá, hoặc khiếm khuyết / cải tiến / câu chuyện với các đánh giá về việc thực hiện đó, v.v.) hoặc từ quan điểm kiểm toán và chất lượng quá trình. Cả hai đều có ý nghĩa, ngay cả khi mọi người thường không gặp vấn đề gì khi xem xét mã.
Thomas Owens

3
Bạn có tham dự bất kỳ đánh giá nào? Có lẽ đã đến lúc thả vào một cái? Chỉ ra một vài điều cho bản thân bạn và hỏi từng người đánh giá tại sao anh ta bỏ lỡ tất cả chúng?
Mawg 10/03/2015

2
Bạn có thấy rằng các vấn đề rõ ràng đã không được phát hiện bởi đánh giá? Sẽ bạn đã thêm ý kiến (quan trọng)?
usr

Câu trả lời:


70

Tôi sẽ đưa ra một cách khác với những người trả lời đồng nghiệp của tôi. Họ đúng - được tham gia nếu bạn muốn xem mọi thứ diễn ra như thế nào. Nếu bạn muốn có nhiều khả năng truy nguyên hơn, có những công cụ cho việc đó.

Nhưng theo kinh nghiệm của tôi, tôi nghi ngờ rằng có điều gì khác đang xảy ra.

Bạn đã xem xét rằng nhóm của bạn có thể cảm thấy rằng quy trình bị hỏng / ngu ngốc / không hiệu quả đối với hầu hết các cam kết? Hãy nhớ rằng, quá trình là tài liệu những gì hoạt động tốt, không phải là quy tắc để tuân theo . Và với tư cách là trưởng nhóm, bạn ở đó để giúp họ trở thành người giỏi nhất của họ, không thực thi các quy tắc.

Vì vậy, trong phần hồi tưởng của bạn (nếu nhanh nhẹn) hoặc từng người một (nếu bạn là người quản lý) hoặc trong các cuộc họp hành lang ngẫu nhiên ngẫu nhiên (nếu bạn là người lãnh đạo nhóm không nhanh nhẹn và có người quản lý khác thực hiện từng bước một), hãy đưa nó lên . Hỏi mọi người nghĩ gì về quy trình xem xét mã. Nó hoạt động thế nào? Làm thế nào là nó không? Nói rằng bạn nghĩ rằng nó có thể không mang lại lợi ích cho đội nhiều như nó có thể. Hãy chắc chắn rằng bạn lắng nghe .

Bạn có thể thực hiện một số biện hộ cho các đánh giá mã trong các cuộc họp này, nhưng tốt hơn là lắng nghe phản hồi. Rất có thể, bạn sẽ thấy rằng nhóm của bạn nghĩ rằng quy trình "phù hợp" cần điều chỉnh hoặc có nguyên nhân gốc nào đó (áp lực thời gian, thiếu người đánh giá, Bob chỉ cam kết mã của mình để giải thích tại sao chúng ta không thể giải quyết .

Buộc một công cụ trên một quy trình bị hỏng sẽ không làm cho quy trình trở nên tốt hơn.


5
+1 cho cách tiếp cận đúng cho vấn đề này (và nhiều vấn đề khác!)
Olivier Dulac

7
+1 cho câu cuối cùng. Đây là điều mà hầu như không ai hiểu, nhưng cực kỳ quan trọng.
JohnEye 11/03/2015

1
Câu trả lời tốt đẹp. Đã thử rằng .. Nhóm của tôi nói rằng "công ty đang làm sai cách. Chúng tôi cần nhiều qa hơn .. và để các nhà phát triển phát triển" trong khi công ty nói "chúng tôi muốn các nhà phát triển gửi mã chất lượng tốt. Chúng tôi nhắm đến việc phân tán nhóm qa vì một khi mã có chất lượng tốt, qa không còn cần thiết nữa .. "... Điều cuối cùng đã xảy ra là những người có mã xấu liên tục bị sa thải và tôi đã xây dựng lại đội của mình.
anh chàng mograbi

43

Tôi không thích đăng câu trả lời một dòng, nhưng câu này có vẻ phù hợp:

Tham gia vào quá trình.


15
Tôi cũng không thích một câu trả lời. May mắn thay bạn đã lấy hai dòng - và câu trả lời của tôi. +1
Mawg 10/03/2015

1
Tôi là. nhưng khi tôi không .. chuyện xảy ra. đó chính xác là điều khiến tôi nghi ngờ ngay từ đầu. Tôi bắt đầu xem xét lại đánh giá của người khác và phát hiện ra những thứ khó chịu.
anh chàng mograbi

6

Nhận một công cụ, như plugin Codereview của ReviewBoard hoặc Redmine . Sau đó, mỗi đánh giá được tạo ra như một nhiệm vụ phải được đóng hoặc nhận xét bởi ai đó (giống như một vé lỗi). Sau đó, bạn có truy xuất nguồn gốc của người đã tạo ra vé xem xét và ai đã đóng nó. Bạn có thể buộc vé xem xét với mã đăng ký mã nguồn, tức là tạo vé từ bản sửa đổi.


2

Một vài điều (thành thật mà nói, hầu hết trong số này được trình bày trong các câu trả lời, nhưng tôi muốn đặt chúng ở một nơi duy nhất)

  • Bạn có thể áp dụng quy trình và quy tắc để đảm bảo việc xem xét mã xảy ra, nhưng thật khó để đưa chúng vào để việc xem xét mã thực sự không chỉ là một bài tập đánh dấu hộp. Cuối cùng, nhóm phải thấy được lợi ích của quy trình, nếu họ muốn tiếp cận nó một cách hữu ích

  • Dẫn bằng ví dụ. Tham gia đánh giá. Là một nhà phát triển, tôi cảm thấy tồi tệ nếu người quản lý của tôi (hiện không phải là nhà phát triển) phát hiện ra những thứ tôi không có. Làm nổi bật các vấn đề đáng lẽ phải được xem xét (theo cách không đổ lỗi). Nếu xảy ra sự cố sản xuất, nếu có vấn đề phát sinh trong QA (nếu bạn có quy trình QA riêng), hãy nhấn mạnh nơi chúng có thể đã bị bắt trong đánh giá mã. Thảo luận với nhóm làm thế nào chúng ta có thể đảm bảo các vấn đề trong tương lai bị bắt

  • Thảo luận với nhóm những gì họ muốn quá trình làm. Nếu họ không thấy bất kỳ điểm nào đối với nó (như có thể xảy ra lúc đầu), hãy sử dụng các vấn đề sản xuất và các kết hợp cần thiết làm bằng chứng về lợi ích của nó

  • Sử dụng phần mềm kiểm tra mã tự động như Sonarqube để đánh giá mã có thể tập trung vào các vấn đề như không thể hiểu được - mã, lỗi logic, thiếu tài liệu, v.v. không thể được phát hiện tự động.


2

Bạn có thể ghi lại những gì nhóm muốn trong các đánh giá mã mà bạn đã thảo luận và đồng ý với các nhà phát triển. Một số điều bạn có thể xem là một phần của đánh giá mã là:

  • Kiểm tra xem mã có làm những gì nó phải làm hay không, nghĩa là nó đáp ứng các yêu cầu

  • Kiểu mã để đảm bảo rằng các nhà phát triển đang mã hóa theo một kiểu nhất quán

  • Tối ưu hóa, ví dụ như số lượng cuộc gọi chức năng

  • Kiến trúc và tái sử dụng

  • Xử lý ngoại lệ và ghi nhật ký

  • Nợ kỹ thuật: là mã ở trạng thái tốt hơn so với khi nhà phát triển bắt đầu làm việc với nó

  • Kiểm tra và xây dựng mã (Tôi thấy điều này hữu ích nhưng các nhà phát triển khác trong nhóm của tôi thích để lại mã này cho người kiểm tra)

  • Sử dụng một công cụ tự động (Tôi đã sử dụng SonarQube ). Tôi thấy hữu ích khi tích hợp điều này vào quy trình xây dựng của bạn để thực thi các cải tiến cho mã, ví dụ: tăng phạm vi kiểm tra

Một số bước ở trên có thể được bao phủ bởi một công cụ tự động nhưng trong khi bạn đang cố gắng cải thiện cách đánh giá mã hoặc thực hiện thì có lẽ nên sử dụng cả công cụ và đánh giá nhãn cầu. Tuy nhiên, các bước quan trọng nhất để ngăn ngừa nợ kỹ thuật (kiến trúc và tái sử dụng) có thể hoàn toàn tự động.

Nếu nhóm của bạn không nhất quán trong việc áp dụng điều này, bạn có thể thử chỉ cho phép các nhà phát triển đang thực hiện đánh giá mã đúng cách để có quyền hợp nhất. Ví dụ, bạn có thể chỉ muốn bắt đầu với nhà phát triển chính trong nhóm. Sự đánh đổi với phương pháp này là những nhà phát triển đó có thể trở thành nút cổ chai trong quá trình phát triển, vì vậy bạn và nhóm cần quyết định xem bạn có muốn điều này không. Cá nhân tôi sẽ chấp nhận sự đánh đổi này và thông qua các đánh giá mã tăng tính kỷ luật trong phần còn lại của nhóm và sau đó khi sẵn sàng, bạn có thể tăng số lượng nhà phát triển có quyền hợp nhất.

Cuối cùng, nó đáng để xem xét các đánh giá. Vì vậy, mỗi tuần một lần hãy cùng với các nhà phát triển và thảo luận một cách xây dựng các đánh giá và cách cải thiện chúng.


Đây có phải là một quảng cáo cho SonarQube? Tôi đã thử nó - tôi sẽ không khuyên bạn, quá đau đớn để đi và trong khi chi phí "nguồn mở" cho tất cả các bit hữu ích.
gbjbaanb

Nó hoạt động tốt trong nhóm hiện tại của tôi và không quá khó để thiết lập và nó rất hữu ích - đó không phải là quảng cáo mà là công cụ duy nhất của loại này tôi đã có kinh nghiệm. Bạn có nói tương tự cho Redmine codereview và ReviewBoard không?
br3w5

Chúng tôi đang sử dụng SonarQube trong các nhóm của chúng tôi, phục vụ khoảng hơn 70 dự án, từ 10 nghìn đến 3M LỘC. Mặc dù một số nhóm chỉ bỏ qua các báo cáo của mình, hầu hết sử dụng nó để trực tiếp tái cấu trúc các quy trình. Nó hoạt động tốt, mặc dù cá nhân tôi thích các công cụ đơn giản, không tích hợp, chẳng hạn như Findbugs.
Dibbeke 10/03/2015

Và đây là tôi nghĩ rằng việc xem xét mã liên quan đến việc kiểm tra xem mã có khớp với tài liệu thiết kế hay không: - /
Mawg 11/03/2015

1
Cảm ơn, đây là những gì tôi đang làm vào lúc này. Tôi sẽ cập nhật trong vòng một vài tuần nó ảnh hưởng như thế nào.
anh chàng mograbi 13/03/2015

0

Tôi sẽ cho bạn biết làm thế nào nhóm của tôi nhanh chóng tích hợp đánh giá mã vào quy trình làm việc của nó.

Đầu tiên, hãy để tôi hỏi bạn một câu hỏi. Bạn có đang sử dụng hệ thống kiểm soát phiên bản (ví dụ: Mercurial, Git) không?

Nếu câu trả lời của bạn là có, thì hãy tiếp tục.

  1. cấm mọi người đẩy bất cứ thứ gì (ngay cả các bản sửa lỗi nhỏ) trực tiếp vào nhánh chính (thân cây) *
  2. phát triển các tính năng mới (hoặc sửa lỗi) trong các nhánh riêng biệt
  3. khi các nhà phát triển tin rằng chi nhánh đã sẵn sàng để được tích hợp trong tổng thể, họ sẽ tạo ra một "yêu cầu kéo"
  4. cấm mọi người hợp nhất yêu cầu kéo của riêng họ *
  5. có một nhà phát triển khác đánh giá yêu cầu kéo và xem lại mã mới
  6. Nếu mã vượt qua đánh giá, tốt, yêu cầu kéo có thể được hợp nhất, nếu không các bản sửa lỗi có thể được áp dụng
  7. lặp lại bước 6 cho đến khi mã đủ đáo hạn (có thể được thực hiện mà không cần bắt đầu lại) **
  8. xong, tất cả mã mới của bạn được xem xét (ít nhất là cuối cùng), bởi một người có tên

Bây giờ bạn có một điểm chính xác trong quy trình làm việc của mình, nơi đánh giá mã được thực hiện.

Hành động ở đó.

* có thể được thực thi tự động, với các móc phía máy chủ

** quy trình này được GitHub (trong số những người khác) hỗ trợ đầy đủ và khá dễ sử dụng, hãy kiểm tra nó


2
Ngay cả với một quá trình như vậy (mà tôi cho là thực sự xảy ra từ mô tả trong câu hỏi), đôi khi bạn có những nhà phát triển nghĩ rằng "ah, tôi tin tưởng đồng nghiệp của mình đủ và có quá nhiều việc phải làm, vì vậy tôi sẽ chỉ hợp nhất mà không cần đọc các chi tiết, hoặc thậm chí bình luận về nó ". (Chúng tôi có một quy trình tương tự trong nhóm của mình, với hai sự chấp thuận cần thiết (từ những người không phải là tác giả PR), trước khi có thể hợp nhất. Đôi khi, những thay đổi vẫn diễn ra mà không cần xem xét kỹ lưỡng.)
Paŭlo Ebermann 10/03/2015

1
@ PaŭloEbermann tôi thấy. Tôi e rằng đó là kết quả không thể tránh khỏi của hoàn cảnh, nếu bạn không có đủ thời gian để làm mọi thứ bạn cần, chất lượng sẽ phải chịu, bằng cách này hay cách khác. Sill, nếu nó không hoạt động "đôi khi", điều đó có nghĩa là nó hoạt động "hầu hết thời gian", phải không?
Agostino

1
Có, nó đã giúp một chút bằng cách chỉ cho phép hợp nhất cho một nhóm người giới hạn, những người có nhiệm vụ kiểm tra xem đánh giá thực tế đã được thực hiện đúng chưa.
Paŭlo Ebermann

Tôi đã có một lệnh cấm tương tự, và không cần phải nói: sự phát triển gần như dừng lại. Quy tắc đó kéo dài cả 2 tuần, sau đó các nhà quản lý phải điều chỉnh kế hoạch của họ.
Bовић 11/03/2015

@ BЈовић nhóm của bạn đã thực hiện đánh giá mã một cách thường xuyên trước đây ? Kỹ thuật này được nhiều người sử dụng, đặc biệt là trong hệ sinh thái Nguồn mở. Thực tế nó không hoạt động cho nhóm của bạn không có nghĩa là nếu không thể làm việc cho người khác.
Agostino

-2

Tôi nghĩ bạn nên tạo một mẫu và yêu cầu các thành viên trong nhóm của bạn cập nhật nó mỗi khi họ thực hiện đánh giá mã. Nhưng ngay cả khi đó, bạn nên tham gia vào quá trình xem xét ban đầu.

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.