Cách hiệu quả nhất để thực hiện đánh giá mã là gì? [đóng cửa]


71

Tôi chưa bao giờ tìm thấy cách lý tưởng để thực hiện đánh giá mã và thường thì khách hàng của tôi yêu cầu chúng. Mỗi khách hàng dường như thực hiện chúng theo một cách khác nhau và tôi chưa bao giờ cảm thấy hài lòng ở bất kỳ ai trong số họ.

Điều gì là cách hiệu quả nhất để bạn thực hiện đánh giá mã?

Ví dụ:

  • Là một người được coi là người gác cổng về chất lượng và đánh giá mã, hoặc nhóm sở hữu tiêu chuẩn?
  • Bạn có xem lại mã dưới dạng bài tập nhóm bằng máy chiếu không?
  • Nó được thực hiện trực tiếp, qua email hoặc sử dụng một công cụ?
  • Bạn có tránh đánh giá và sử dụng những thứ như lập trình cặp và quyền sở hữu mã tập thể để đảm bảo chất lượng mã không?

Phần mềm Smart Bear có một cuốn sách miễn phí có tên Bí mật tốt nhất về đánh giá mã ngang hàng Miễn phí vận chuyển miễn phí. Và trong khi họ theo dõi với email bán hàng thường xuyên. Họ hầu như không xâm phạm. Và nhân tiện ... cuốn sách khá hay.
John MacIntyre

Câu trả lời:


32

Trong công việc của tôi, chúng tôi có một quy tắc rất đơn giản: các thay đổi phải được xem xét bởi ít nhất một nhà phát triển khác trước khi hợp nhất hoặc cam kết với trung kế . Trong trường hợp của chúng tôi, điều này có nghĩa là người khác ngồi cùng bạn tại máy tính của bạn và xem qua danh sách thay đổi. Đây không phải là một hệ thống hoàn hảo, nhưng dù sao nó cũng đã cải thiện đáng kể chất lượng mã.

Nếu bạn biết rằng mã của bạn sẽ được xem xét buộc bạn phải xem nó trước. Nhiều vấn đề trở nên rõ ràng sau đó. Theo hệ thống của chúng tôi, bạn phải giải thích những gì bạn đã làm với người đánh giá, điều này một lần nữa khiến bạn nhận thấy những vấn đề bạn có thể đã bỏ lỡ trước đó. Ngoài ra, nếu một cái gì đó trong mã của bạn không rõ ràng ngay lập tức đối với người đánh giá, thì đó là một dấu hiệu tốt cho thấy cần phải có tên tốt hơn, nhận xét hoặc tái cấu trúc. Và, tất nhiên, người xem xét cũng có thể tìm thấy vấn đề. Hơn nữa, ngoài việc xem xét sự thay đổi, người đánh giá cũng có thể nhận thấy các vấn đề trong mã gần đó.

Có hai nhược điểm chính của hệ thống này. Khi sự thay đổi là không đáng kể, sẽ không có ý nghĩa gì khi xem xét nó. Tuy nhiên, chúng tôi hoàn toàn phải tuân thủ các quy tắc, để tránh độ dốc trơn trượt khi tuyên bố các thay đổi là "tầm thường" khi không. Mặt khác, đây không phải là một cách rất tốt để xem xét các thay đổi quan trọng đối với hệ thống hoặc bổ sung các thành phần mới lớn.

Chúng tôi đã thử đánh giá chính thức hơn trước đây, khi một nhà phát triển sẽ gửi email mã để được xem xét cho phần còn lại của nhóm và sau đó toàn bộ nhóm sẽ cùng nhau thảo luận về nó. Điều này đã mất rất nhiều thời gian của mọi người và kết quả là những đánh giá này rất ít và chỉ có một tỷ lệ nhỏ trong số các cơ sở mã được xem xét. "Một người khác đánh giá các thay đổi trước khi cam kết" đã làm việc tốt hơn cho chúng tôi.


Rất hữu ích, cảm ơn! Tôi đang chuẩn bị các phiên của nhóm của riêng mình và tôi nghĩ rằng đây có thể là một cách tiếp cận tốt.
Sơ sinh

13

Tôi thích đánh giá mã, mặc dù chúng có thể là một nỗi đau. Lý do tôi thích chúng là vì chúng nhận được nhiều thông tin hơn về mã và một góc nhìn khác. Tôi tin rằng ngay cả với lập trình cặp, mã nên được xem xét. Thật dễ dàng để hai người làm việc trên cùng một mã có thể cùng mắc một lỗi mà một bộ mắt khác nhau có thể không bỏ sót.

Nếu được thực hiện như một nhóm với máy chiếu, nó thực sự cần được xem xét riêng trước cuộc họp. Nếu không, nó chỉ là một sự lãng phí thời gian.

Tôi chỉ thực hiện đánh giá mã qua email và trong một nhóm. Nói chung, tôi không nghĩ rằng họ nên được thực hiện trong người. Bạn cảm thấy áp lực hơn một chút để lao qua mã với ai đó nhìn qua vai bạn. Tôi tin rằng một công cụ được thiết kế để xem xét mã sẽ là một tài sản tốt, vì nó có thể giúp với một số khía cạnh trần tục và nó sẽ giúp việc gắn cờ các vấn đề về mã trở nên dễ dàng hơn thông qua email.

Vấn đề với việc một người thực hiện tất cả các đánh giá mã là nó có thể là một nút cổ chai. Với các tiêu chuẩn mã hóa được thiết kế và tài liệu tốt, nó không cần thiết. Tùy thuộc vào môi trường / lịch phát hành, có thể nên luôn có ai đó làm người đánh giá mã dự phòng.

Tôi tin rằng quyền sở hữu mã là một ý tưởng tốt vì người này có thể ưu tiên họ hiểu mã đó và có khả năng đóng vai trò người gác cổng.


+1 cho "Nếu được thực hiện như một nhóm với máy chiếu, nó thực sự cần được xem xét riêng trước cuộc họp. Nếu không, đó chỉ là một sự lãng phí thời gian khó chịu."
AShelly

1
"Nếu được thực hiện như một nhóm với máy chiếu thì thật lãng phí thời gian" .. Ở đó, đã sửa nó cho bạn.
gbjbaanb

Khi bạn đang thực hiện nó trực tiếp, đó là một quá trình khác, không phải là bạn đang xem lại mã của người khác trong khi anh ta nhìn qua vai bạn. Đó là anh ấy giải thích từng dòng những gì anh ấy đã thay đổi, những thay đổi của anh ấy và tại sao trong khi bạn lắng nghe anh ấy. Nó gây áp lực cho người đã tạo ra mã để giải thích nó, không phải để bạn hiểu và xem xét nó.
Didier A.

6

Tại SmartBear, chúng tôi không chỉ tạo ra một công cụ đánh giá mã , chúng tôi còn sử dụng nó hàng ngày. Đó là một phần thiết yếu của quá trình phát triển của chúng tôi. Chúng tôi xem xét mọi thay đổi được kiểm tra.

Tôi nghĩ rằng đó là một ý tưởng tồi để có một người đánh giá mã gatekeeper vì nhiều lý do. Người đó trở thành nút cổ chai và họ phải thực hiện quá nhiều việc xem xét mã (chỉ để giữ cho dự án di chuyển) để thực sự hiệu quả với nó (60-90 phút một lần là giới hạn hiệu quả). Đánh giá mã là một cách tuyệt vời để chia sẻ ý tưởng và kiến ​​thức. Cho dù người gác cổng của bạn có bao nhiêu siêu sao, họ có thể học hỏi từ những người khác trong đội. Ngoài ra, việc mọi người thực hiện đánh giá mã cũng tạo ra môi trường "quyền sở hữu mã tập thể" - nơi mọi người cảm thấy rằng họ sở hữu chất lượng của mã (không chỉ QA hay người gác cổng).

Chúng tôi có một whitepaper miễn phí về " Thực tiễn tốt nhất để đánh giá mã ngang hàng " có 11 mẹo để đánh giá mã hiệu quả. Phần lớn đây là cùng một nội dung từ cuốn sách mà John đã đề cập ở dạng chưng cất hơn.


1
Liên kết xuống ...........
Pacerier 22/2/2015

Xin lỗi về thối liên kết. Tôi đã chỉnh sửa URL hiện tại, nhưng điều đó sẽ không ngăn nó xảy ra lần nữa.
Brandon DuRette

3

Không có lý do. Thực hành lập trình cặp. Đánh giá mã tốt nhất của nó có thể. Bất kỳ cơ chế khác dẫn đến trò chơi đổ lỗi. Lập trình cặp gây ra tinh thần đồng đội và sở hữu tập thể. Ngoài ra, bạn tranh luận về ý tưởng của mình với cặp của mình, thất bại nhanh chóng, thực hiện hành động khắc phục và đó chỉ là mã được mã hóa và đánh giá được đưa vào Hệ thống quản lý cấu hình (CMS). Chúc mừng lập trình cặp!


Tôi hoàn toàn đồng ý. Lập trình cặp đảm bảo rằng chất lượng mã được hiệu đính như đã viết. Hơn nữa, giới thiệu TDD và bạn sẽ kiểm tra, mã được kiểm soát chất lượng sẽ được phát hành thành một nhánh tính năng. Kiểm tra các tính năng trong chi nhánh chống lại các bài kiểm tra QA bằng văn bản riêng biệt. Trên đường chuyền, hợp nhất để làm chủ. Làm sạch mã, sạch chủ.
dooburt

Lập trình cặp không hoạt động đối với một tỷ lệ rất lớn các nhà phát triển phần mềm và tôi muốn nói rằng nó có thể loại trừ các nhà phát triển tốt nhất. Hầu hết các nhà phát triển SW đều thích lập trình máy tính vì họ sống nội tâm, nghĩa là họ thích làm việc với máy tính hơn mọi người. Tôi cho một, cần phải vào "khu vực" để có hiệu quả và điều đó có nghĩa là "đừng làm phiền tôi". Để tôi trong khu vực của tôi và tôi sẽ làm công việc của 4 hoặc 5 nhà phát triển khác và sau đó là một số.
Dunk

2

Nếu bạn đang làm việc trên một dự án nơi nhiều người sẽ đóng góp cho cơ sở mã, một tiêu chuẩn cần phải được thiết lập.

Tại thời điểm này, theo kinh nghiệm của tôi, tốt nhất là chỉ định một người là "vua" đánh giá mã nếu bạn muốn và những gì anh ấy / cô ấy nói đi. Về vấn đề này, nếu một người dùng không tuân thủ các tiêu chuẩn, nhà vua sẽ chăm sóc nó.

Là một nhà phát triển, tôi xem lại mã của mình nhiều lần để có thể đọc được, hợp lý và mọi thứ khác. Thông thường chúng tôi sử dụng javadoc hoặc tương tự trong các ngôn ngữ nhất định mà chúng tôi mã hóa và sử dụng thẻ @ Tác giả để gắn quyền sở hữu với các hàm, lớp, v.v.

Nếu một chức năng không chính xác, chúng tôi nói chuyện với chủ sở hữu, cùng với lớp, v.v.


2

Tại công ty của tôi, mỗi nhiệm vụ được chỉ định một người kiểm tra để kiểm tra nhiệm vụ và cũng là người xem mã để xem lại mã.

Nếu sản phẩm của bạn đã được phát hành và bạn muốn đảm bảo rằng bạn không làm gì sai (chẳng hạn như rò rỉ xử lý hoặc rò rỉ bộ nhớ) là một điều tuyệt vời. Tôi nghĩ trong quá trình phát triển ban đầu trước khi phát hành sản phẩm của bạn, đánh giá mã có thể là quá nhiều công việc.

Nếu nhóm của bạn có tất cả các nhà phát triển cao cấp, thì đánh giá ngang hàng vẫn hữu ích. Ai cũng có lúc mắc lỗi. Nếu nhóm của bạn có một số người cao niên và một số đàn em, thì hãy để các nhà phát triển cấp cao thực hiện đánh giá mã, nhưng vẫn có các đánh giá mã cho mã của cấp cao.

Một điều quan trọng về việc xem xét mã là nó có thể bắt lỗi mà chúng tôi mắc phải, nhưng nó không phải là sự thay thế để kiểm tra.


2

Tôi khuyên bạn nên sử dụng đánh giá mã nếu bạn không làm lập trình cặp.

Không tranh luận về ưu và nhược điểm với việc ghép nối, nhưng khó có thể tranh cãi về những tác động tích cực của việc mã của bạn liên tục được xem xét bởi (ít nhất là) một người khác. Mã thậm chí được viết và thiết kế bởi (ít nhất) hai lập trình viên - nó khó có thể trở nên tốt hơn thế. Tôi nói "ít nhất" vì imo, bạn nên cố gắng chuyển cặp rất nhiều để mọi người có được một shot tại làm việc với mã.


2

Một trong những điều tôi cố gắng thực hiện trong các bài đánh giá mã mà tôi tham gia là sau khi tự mình xem lại mã, tôi phân tích tĩnh mã, sử dụng các công cụ như Findbugs, PMD, JavaNCCP et al và xem xét bất kỳ vấn đề nào mà các công cụ này tìm thấy trong mã được xem xét. Tôi đặc biệt muốn xem xét bất cứ điều gì có mức độ phức tạp cao bất thường, yêu cầu họ giải thích tại sao mức độ phức tạp đó là cần thiết hoặc tại sao lỗ hổng được đề xuất không quan trọng.

YMMV


2

Nơi tôi đang làm việc, chúng tôi sản xuất các thiết bị phần cứng và phần mềm có giao diện với chúng đi vào cơ sở hạ tầng quan trọng. Do đó, chúng tôi tập trung rất cao vào chất lượng phát hành. Chúng tôi sử dụng một biến thể của Thanh tra Fagan và có một quy trình đánh giá chính thức. Chúng tôi được chứng nhận ISO 9001, trong số các chứng chỉ khác.

Ngành công nghiệp cơ sở hạ tầng quan trọng rất quan tâm đến độ tin cậy và độ lặp lại như nhau. :-)


2

Tại công ty của tôi, chúng tôi có các đánh giá mã bắt buộc cho các lập trình viên cơ sở và đánh giá tự nguyện cho người cao niên. Không có người xem mã được chỉ định, yêu cầu đánh giá được gửi đến tất cả các nhà phát triển.

Hệ thống này hoạt động tốt - đánh giá được thực hiện khi thời gian cho phép và thay đổi có thể được xem xét bởi một số bộ nhãn cầu.

Công cụ Bảng đánh giá tuyệt vời và miễn phí hoạt động thực sự tốt cho chúng tôi và đã được chứng minh là một cách tuyệt vời để truyền đạt ý kiến.


2
đánh giá tự nguyện cho người cao niên. Tôi đã làm việc trên nhiều dự án nơi các lập trình viên cao cấp chắc chắn có thể sử dụng các đánh giá mã ...
Michel

1

Trong công ty của tôi, chúng tôi không bao giờ thực hiện đánh giá mã chính thức trước khi đăng ký, trừ khi chúng tôi sửa đổi một số sản phẩm cực kỳ quan trọng và không có thời gian để thực hiện quy trình QA tiêu chuẩn của chúng tôi.

Những gì chúng tôi làm là mỗi khi chúng tôi cảm thấy đánh giá mã sẽ hữu ích, chúng tôi sẽ thêm nhận xét "// todo: code review by joe" vào mã đã sửa đổi. Thông thường, chúng tôi chọn Joe vì anh ấy sở hữu mã sửa đổi, nhưng nếu tiêu chí lựa chọn này không áp dụng (thông thường, nó sẽ), chúng tôi chỉ chọn ngẫu nhiên một người khác. Và tất nhiên, nếu Joe tình cờ có mặt tại thời điểm đó, chúng tôi sử dụng phương pháp đánh giá cũ tốt.

Là người đánh giá, điều duy nhất bạn phải làm là tìm kiếm định kỳ toàn bộ mã cho "// todo: code review by me" , xem xét các thay đổi và kiểm tra lại mã mà không cần bình luận "todo ..."

Nếu có vấn đề, chúng tôi sẽ chuyển về các phương thức liên lạc truyền thống (mail / chat / etc).

Phương pháp này cung cấp cho chúng tôi hai phẩm chất chính mà chúng tôi đang tìm kiếm trong một hệ thống đánh giá:

  • trên cao rất nhẹ
  • truy xuất nguồn gốc

1

Chúng tôi thấy cách hiệu quả nhất để thực hiện đánh giá mã là 1 trên 1 bằng cách sử dụng github để hiển thị sự khác biệt trong chi nhánh.


  • Là một người được coi là người gác cổng về chất lượng và đánh giá mã, hoặc nhóm sở hữu tiêu chuẩn?

    • Phụ thuộc vào quy mô của đội - nhóm 3 sẽ có 1 người có kiến ​​thức tốt nhất về thực hành tốt, trong khi nhóm 12 người có thể có 3 hoặc 4 người sẽ hoàn thành vai trò đó.
  • Bạn có xem lại mã dưới dạng bài tập nhóm bằng máy chiếu không?

    • Mặt đối mặt. 1 trên 1 để ít đe dọa hơn. Đôi khi được thực hiện trong khu vực xã mặc dù cho kiến ​​thức lan truyền. Phụ thuộc vào tình hình chính xác, con người, thời gian biểu, v.v.
  • Nó được thực hiện trực tiếp, qua email hoặc sử dụng một công cụ?

    • Mặt đối mặt. Chúng tôi sử dụng git và github và nó có các công cụ đánh giá mã và so sánh khác nhau để làm cho việc đánh giá mã dễ dàng hơn.
  • Bạn có tránh đánh giá và sử dụng những thứ như lập trình cặp và quyền sở hữu mã tập thể để đảm bảo chất lượng mã không?

    • Chúng tôi cố gắng làm cả hai khi thích hợp. Điều đó có nghĩa là khi bị mắc kẹt trong một vấn đề đặc biệt gai góc, hoặc khi làm việc trên cơ sở hạ tầng cốt lõi hoặc khi chuẩn bị đi nghỉ hoặc rời công ty, việc ghép đôi có thể được thực hiện để chia sẻ và chuyển giao kiến ​​thức. Hầu hết các mã hoặc mã có bất cứ điều gì nhiều hơn thay đổi mỹ phẩm nên được xem xét ở cuối.

Như với tất cả các mục mã hóa, câu trả lời đúng cần được tính đến:

  • Loại công ty (ví dụ: khởi nghiệp so với tập đoàn lớn)
  • Quy mô công ty
  • Số lượng nhà phát triển
  • Ngân sách
  • Khung thời gian
  • Khối lượng công việc
  • Độ phức tạp của mã
  • Khả năng của người đánh giá
  • Sẵn có của người đánh giá

0

Tôi đã làm việc tại nhiều công ty và thấy nhiều quy trình. Đội ngũ hiện tại của tôi xử lý việc này tốt nhất mà tôi đã thấy cho đến nay.

Chúng tôi sử dụng một quá trình phát triển nhanh và như một phần trong đó chúng tôi có các cổng mà mỗi câu chuyện phải trải qua. Một trong những cổng đó là đánh giá mã. Câu chuyện không di chuyển để kiểm tra cho đến khi đánh giá mã được thực hiện.

Ngoài ra, chúng tôi lưu trữ mã của chúng tôi tại github.com. Vì vậy, sau khi một nhà phát triển hoàn thành thay đổi của họ, họ đăng liên kết đến (các) cam kết trên câu chuyện.

Sau đó, chúng tôi gắn thẻ một nhà phát triển đồng nghiệp để xem xét. Github có một hệ thống bình luận cho phép ai đó bình luận ngay trên dòng mã được đề cập. Github sau đó gửi email đến bản phân phối, vì vậy đôi khi chúng tôi thực sự nhận được thêm đôi mắt từ một số đội khác của chúng tôi.

Quá trình này đã làm việc rất tốt cho chúng tôi. Chúng tôi sử dụng một công cụ xử lý nhanh giúp việc đăng các cam kết dễ dàng cũng như tạo điều kiện giao tiếp.

Nếu một vấn đề đặc biệt khó khăn, chúng tôi sẽ ngồi lại và thảo luận về nó. Điều này hoạt động vì nó không thể thiếu trong quy trình của chúng tôi và mọi người đã mua về cách thức hoạt động của quy trình. Chúng tôi có thể chuyển vé trở lại trong tiến trình nếu đánh giá mã dẫn đến việc làm lại cần thiết và sau đó có thể xem lại sau khi thay đổi được thực hiện hoặc người đánh giá có thể lưu ý về câu chuyện sửa các mục là đủ và không cần xem lại.

Nếu thử nghiệm đưa một cái gì đó trở lại, nó sẽ quay trở lại tiến trình và mọi thay đổi tiếp theo cũng được xem xét.

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.