Là mã xem xét thực hành tốt?


32

Khi công ty tôi làm việc thuê những người quản lý mới, họ đề nghị chúng tôi tổng quan về mã của ai đó trong mỗi cuộc họp. Chúng tôi có các cuộc họp hai tuần một lần, vì vậy mỗi lần một nhà phát triển sẽ hiển thị mã của anh ấy / cô ấy trên máy chiếu và những người khác sẽ thảo luận về nó.

Tôi nghĩ điều này sẽ rất tuyệt: mỗi nhà phát triển sẽ cẩn thận hơn khi viết mã và chúng tôi có thể chia sẻ kinh nghiệm của mình tốt hơn. Nhưng bằng cách nào đó chúng tôi quên mất điều này và lời đề nghị vẫn chỉ là một lời đề nghị.

Lợi ích của việc này là gì và có bất kỳ nhược điểm nào không?


9
Điều này nghe có vẻ như đánh giá mã không chính thức / thông thường và đánh giá mã là một điều tốt (tm). Chúng tôi thậm chí có một trang web chị em để đánh giá mã.
yannis

@ElYusubov, bình luận phải dưới câu trả lời của Oded, tôi đoán vậy)))
superM

2
Hỗ trợ môi trường học tập. Đó là nhiều cho người xem cũng như các nhà văn.
MathAttack

3
Miễn là nó vẫn hợp tác, thực hành tốt của nó. Có một số văn hóa công ty (lên hoặc ra) nơi các đồng nghiệp là đối thủ cạnh tranh nội bộ. Trong những trường hợp này, đánh giá mã yêu cầu các kỹ năng xã hội / chính trị bên cạnh các kỹ năng kỹ thuật. Trong trường hợp đó tôi sẽ nói nó quá căng thẳng. Các đánh giá mã tốt nhất là những đánh giá không chính thức giữa các đồng nghiệp: "hey tôi vừa lấy một bản cập nhật và thấy mã bạn đã kiểm tra ngày hôm qua. Có lẽ đó là một ý tưởng tốt hơn nếu bạn ... thay vì ...". Hợp tác và có lợi, không cạnh tranh. Ý tưởng máy chiếu bằng cách nào đó cảm thấy giống như một chuyến du ngoạn "hãy ném cà chua".
Louis Bolog

2
Một trong những lợi ích chính của đánh giá mã là bạn tự động viết mã tốt hơn nếu bạn biết nó sẽ được phát sóng công khai.
James Anderson

Câu trả lời:


52

Mã đánh giá là một thực hành tuyệt vời.

Đây có lẽ là cách tốt nhất để học hỏi từ những sai lầm và để xem những vấn đề nhất định được giải quyết bởi những người khác. Đó cũng là một trong những cách tốt nhất để duy trì chất lượng trong cơ sở mã.

Đánh giá mã xảy ra ở nhiều công ty, mặc dù rất khó để nói rằng có một quy trình cụ thể mà tất cả họ đều tuân theo.

Trong đánh giá mã chính thức hơn, một người cao niên (hoặc một vài người cao niên) sẽ ngồi cùng với một nhà phát triển để xem xét mã của họ, đưa ra các đề xuất và giảng dạy cùng một lúc.

Lợi ích bổ sung cho đánh giá mã (như đã nhận xét về câu hỏi này), bao gồm:

  • Một cách tuyệt vời để dạy và học
  • Chúng là một trong những cách tốt nhất để cải thiện và giữ tính nhất quán của cơ sở mã (kiểu và thành ngữ)
  • Chúng giúp đảm bảo tất cả các thành viên trong nhóm hiểu được phong cách và thành ngữ được sử dụng trong dự án và cách sử dụng chúng
  • Các đánh giá mã sẽ tăng tốc độ phát triển khi họ bắt lỗi và thiết kế các lỗi sớm (vì vậy, mặc dù chúng có thể làm chậm sự phát triển ban đầu, họ trả cổ tức trong các chu kỳ phát triển sau này)
  • Có công cụ hỗ trợ giúp hợp lý hóa quy trình xem xét mã

1
Có, mã đánh giá là tốt. Nhưng nó sẽ không làm chậm các nhà phát triển chứ?
Radu Murzea

4
@SoboLAN - Chà, nếu đánh giá mã có nghĩa là lỗi được phát hiện sớm hơn và các thiết kế xấu được sửa trước khi chúng có cơ hội đi vào sản xuất, bạn nghĩ sao?
Oded

9
@SoboLAN: chất lượng, tốc độ, giá cả - chọn bất kỳ hai.
Den

6
Đó cũng là cách tốt nhất để cải thiện và giữ tính nhất quán của cơ sở mã, tức là đảm bảo rằng các thành viên trong nhóm hiểu và chia sẻ các thành ngữ mã hóa được ưa thích trong dự án và sử dụng chúng một cách chính xác.
Péter Török

4
@SoboLAN: Theo kinh nghiệm của tôi, mã đánh giá tăng tốc các nhà phát triển. Bạn bắt được nhiều lỗi hơn, nhanh hơn và có được sự hài hòa các giải pháp của bạn với những gì các nhà phát triển khác đang làm.
Tynam

15

Đánh giá mã là công cụ rất hữu ích cho việc học tập , đặc biệt là khi bạn có thành viên nhóm mới trên tàu. Vâng, nó còn được gọi là quá trình đánh giá ngang hàng :)

Có nhiều loại đánh giá mã khác nhau:

  • Qua vai - nơi một nhà phát triển nhìn qua vai của tác giả mã khi người đi sau đi qua mã.
  • Email vượt qua - Hệ thống quản lý mã nguồn mã email tự động gửi đến người đánh giá sau khi đăng ký được thực hiện. Trích xuất từ ​​nhận xét: Đã thất bại trong việc quản lý thuyết phục để phân bổ thời gian cho bất kỳ loại đánh giá mã chính thức nào tôi đã xem xét thay đổi đồng nghiệp của mình bất cứ khi nào tôi gỡ bỏ các bản sửa đổi mới từ kiểm soát nguồn bằng cách sử dụng các công cụ lịch sử / khác biệt được tích hợp vào Tortise
  • Lập trình cặp - Hai tác giả phát triển mã cùng nhau tại cùng một máy trạm, như vậy là phổ biến trong Lập trình cực đoan.
  • Đánh giá mã được hỗ trợ bởi công cụ - Tác giả và người đánh giá sử dụng các công cụ chuyên dụng được thiết kế để đánh giá mã ngang hàng.

Chỉ có một associated disadvantagenơi mà các đánh giá mã chính thức yêu cầu một khoản đầu tư đáng kể để chuẩn bị cho sự kiện đánh giá và thời gian thực hiện.

Nhiều tài liệu tham khảo được liệt kê dưới đây (để đọc bài lặn sâu hơn)


1
Viên đạn thứ 2 của bạn có thể được mở rộng. Thất bại trong việc quản lý thuyết phục để phân bổ thời gian cho bất kỳ loại đánh giá mã chính thức nào mà tôi đã xem xét thay đổi đồng nghiệp của mình bất cứ khi nào tôi gỡ bỏ các bản sửa đổi mới từ kiểm soát nguồn bằng cách sử dụng các công cụ tìm kiếm / lịch sử được tích hợp trong Tortise.
Dan Neely

@DanNeely bình luận tốt, tôi sẽ bao gồm nó cho chắc chắn.
EL Yusubov

11

Cách làm đặc biệt đó có vẻ không hiệu quả và có khả năng gây lúng túng - những người muốn những sai lầm của họ chỉ ra cho cả một nhóm người. Vì vậy, nếu họ không thể chọn những gì sẽ được xem xét và mã chưa được sản xuất, điều này có thể khiến mọi người không thoải mái.

Tùy thuộc vào thời điểm mã được xem xét có thể tạo ra sự khác biệt lớn trong việc nhận xét đánh giá mã có làm mã đó hay không. Nếu nhà phát triển có thể chọn và chỉ chọn mã sản xuất, đánh giá nhận xét không có khả năng được triển khai. Thật tuyệt khi có các cuộc họp nơi các nhà phát triển có thể thể hiện một số kỹ thuật tiện lợi mà họ đã học được rằng những người khác sẽ quan tâm, nhưng đó không phải là đánh giá mã. Đó là đào tạo.

Chúng tôi xem xét mã của từng đoạn mã trước khi nó được chuyển sang QA. Mỗi mảnh. Nó thường chỉ liên quan đến người xem mã và nhà phát triển. Nó không đi đến QA cho đến khi người đánh giá mã chính thức vượt qua nó. Vì vậy, nhà phát triển phải thực hiện các thay đổi. Chúng tôi đã tìm thấy và nhanh chóng khắc phục nhiều vấn đề mà QA có thể không tìm thấy (họ cũng tìm thấy những điều chúng tôi không thấy trong phần đánh giá mã). Hơn nữa, cách này giúp giảm mã hóa cao bồi và nhanh chóng xác định những người hoạt động không tốt để chúng tôi có thể khắc phục sự cố của họ và đào tạo hoặc loại bỏ chúng trước khi họ làm hỏng ứng dụng của chúng tôi. Thời gian xem xét mã là một phần của ước tính thời gian của chúng tôi khi lập kế hoạch công việc để nó hoàn toàn không ảnh hưởng đến thời hạn. Và thực tế, nó giúp tiết kiệm thời gian trong thời gian dài bởi vì một vấn đề được phát hiện càng sớm thì càng dễ khắc phục.

Cá nhân tôi đã dạy cho các nhà phát triển ít kinh nghiệm hơn nhiều kỹ thuật tốt hơn thông qua đánh giá mã và tôi đã tự học một số kỹ thuật tốt hơn bằng cách xem lại mã của người khác cũng như nhận xét của họ về mã của tôi. Xem xét mã hơn nữa đảm bảo rằng người khác hiểu mã đi một chặng đường dài hướng tới việc làm cho nó dễ bảo trì hơn. Đôi khi, mã hoạt động nhưng các câu hỏi của đánh giá làm cho rõ ràng rằng sẽ có vấn đề về nguồn gốc vì mã khó hiểu. Tốt hơn là tái cấu trúc trong những trường hợp đó trong khi tất cả vẫn còn mới mẻ trong tâm trí của bạn hơn một năm sau đó, ngay cả khi tác giả mã vẫn gãi đầu và tự hỏi tại sao mã lại làm như vậy.


Tôi hoàn toàn đồng ý với bạn, nhưng tôi hy vọng rằng đội ngũ của chúng tôi đủ chuyên nghiệp để không cảm thấy xấu hổ mà thay vào đó hãy học hỏi.
superM

2
Cuối cùng là một câu trả lời hợp lý. Tôi thấy hiệu quả hơn nhiều khi thực hiện các cuộc biểu tình chỉ với nhà phát triển và một người đánh giá duy nhất so với thực hiện trong một nhóm. Bằng cách này, việc xử lý các lỗi cho cả hai bên sẽ dễ dàng hơn nhiều và bạn có thể thỉnh thoảng trượt vào lập trình cặp mà không lãng phí thời gian của những người khác trong nhóm.
x4u

5
@superM, quy tắc là "khen ngợi nơi công cộng, chỉ trích riêng tư" vì một lý do.
HLGEM

+1 cho thời gian. Tốt nhất là mã theo cặp, thử nghiệm đầu tiên. Nhưng trong mọi trường hợp bạn muốn xem lại mã trong khi bạn vẫn sẵn sàng viết lại nó. Có rất ít điểm trong việc xem xét mã nếu bạn không sẵn sàng làm sạch lớn. Tôi đã được đánh giá mã trong đó nhà phát triển ban đầu đã lấy hơn 50 dòng mã để thực hiện lại chức năng thư viện. Nhưng vì mã đó đã được thử nghiệm, thay thế 50 dòng không cần thiết bằng một lệnh gọi hàm không được phép! Điều này biến một chương trình 10.000 dòng có thể được duy trì bởi một nửa nhà phát triển thành chương trình 100.000 dòng yêu cầu bốn.
kevin cline

8

Vấn đề với loại đánh giá mã này, một nhà phát triển cứ hai tuần một lần, tiến độ sẽ chậm. Nó có thể là vài tháng trước khi tất cả mọi người đã có một lượt dưới ánh đèn sân khấu.

Mặc dù các đánh giá mã có thể tốt, nhưng phải có một lý do đằng sau chúng và đằng sau các thủ tục để thực hiện chúng.

Một số vấn đề sẽ phải được quyết định:

  • Ai sẽ chọn nhà phát triển và họ sẽ được thông báo bao nhiêu. Không có thông báo đánh giá là bẫy.
  • Ai sẽ chọn phần mã được xem xét: quản lý, nhà phát triển cao cấp trong dự án hoặc nhà phát triển đang được xem xét.
  • Mục đích là để dạy cho người có mã trên máy chiếu làm thế nào để làm điều gì đó tốt hơn, hay là mục đích cho người có mã trên máy chiếu để dạy cho mọi người khác trong phòng cách cải thiện mã của họ.
  • Bao nhiêu phần trăm mã sẽ được xem xét theo cách này, đây có phải là một phần của quy trình QA không?

Nếu những người đề xuất kế hoạch này chưa có câu trả lời cho những câu hỏi này thì có thể họ đã đọc một bài viết về cách tất cả các công ty tuyệt vời thực hiện đánh giá mã, vì vậy chúng ta cũng nên thực hiện chúng, mà không hiểu mục đích đằng sau chúng.


3

Đánh giá mã là thực tiễn tuyệt vời, chỉ khi ý tưởng cho đánh giá mã đến từ nhóm phát triển. Các nhà phát triển không cần máy chiếu và thuyết trình để xem lại mã khác. Nếu họ muốn - họ sẽ thích đi đến hội nghị.

Khi ý tưởng về đánh giá mã xuất phát từ quản lý - nó có vẻ giống như điều tra về chất lượng phần mềm thấp và có thể làm mất tinh thần nhóm phát triển. Tôi không nghĩ rằng nhóm quản lý nên tham gia vào quá trình xem xét mã. Mã xem xét bên cạnh đội ngũ quản lý - rất xấu, giết chết và thực hành phá hoại.


2

Đánh giá mã là một cách thực hành tuyệt vời, đặc biệt nếu nó được thực hiện bởi các nhà phát triển để chia sẻ kiến ​​thức và các quy tắc cơ bản được đặt ra trước thời hạn rằng các đề xuất và phê bình có nghĩa là XÂY DỰNG và không sử dụng một nhà phát triển riêng lẻ để thực hành mục tiêu.

Các nhà quản lý không phải là nhà phát triển sẽ được các nhà phát triển chào đón bằng sự nghi ngờ nếu họ quyết định thực hiện đánh giá mã. Hầu hết các loại người quản lý sẽ không muốn đi sâu vào chi tiết mà các nhà phát triển vốn đã có được khi xem mã. Hầu hết các nhà quản lý cũng sẽ không hiểu tại sao các nhà phát triển lại chỉ trích một cách tiếp cận khác.

Nếu bạn muốn giới thiệu các nhà phát triển công việc tốt đang làm để quản lý, thì "đánh giá mã" có ý nghĩa khác và không nên chi tiết như các đánh giá mã được thực hiện để hướng dẫn / cải thiện chất lượng mã giữa các nhà phát triển. Loại bản trình bày này có thể hữu ích trong việc chứng minh những gì nhà phát triển làm nếu bản trình bày có thể ở cấp độ cao hơn và ít mã cụ thể hơn, tập trung vào những gì người quản lý hiểu (giá trị, ROI, v.v.). Nó có thể khiến các nhà quản lý hiểu rằng Joe đã tăng thêm giá trị quan trọng cho công ty bằng cách xây dựng X, mà chúng tôi có thể hiển thị tiết kiệm thời gian Y, hoặc Z đô la cho mỗi đơn hàng, v.v ... Tôi nghĩ rằng có thể đáng để nỗ lực thể hiện giá trị của từng cá nhân các thành viên trong nhóm của bạn. Tuy nhiên, hãy nhớ rằng bạn cần cẩn thận, bạn không áp đảo đối tượng của mình bằng biệt ngữ hoặc quá nhiều mức độ chi tiết.


1

Mặc dù tôi hoàn toàn đồng ý rằng các đánh giá mã rất mang tính xây dựng cho việc giảng dạy mà tôi muốn nêu bật, đối với tôi, dù sao đi nữa, đó là để đảm bảo rằng các mẫu thiết kế của nhóm được tuân thủ chính xác.

Chúng tôi viết một tác phẩm nguyên mẫu nhỏ và chúng tôi tái cấu trúc các đoạn mã và trong khi chúng tôi cảm thấy thoải mái với sản phẩm cuối cùng thì khả năng đọc đã bị hỏng - mọi người không thể nhìn vào nó và xem rõ ràng những gì đang diễn ra.

Đôi mắt độc lập luôn có lợi tôi thấy khi bạn bị mắc kẹt trong những chế độ suy nghĩ nhất định và điều này ở tất cả các cấp độ kinh nghiệm. Bạn đã đầu tư hàng giờ vào thiết kế và mã và vì vậy các đánh giá mã rất khó đối phó khi có nỗi sợ nỗ lực của bạn sẽ bị ném ra ngoài. Tuy nhiên, cuối cùng, bạn hy vọng, kết thúc với một ứng dụng sạch hơn, gọn gàng hơn và dễ quản lý hơn và trải nghiệm đã ăn sâu vào bạn.

Đối với nhóm của chúng tôi, chúng tôi làm như @ElYusubov đã đề cập và sử dụng một công cụ dành riêng cho Đánh giá mã - Crucible. Mọi người xem xét, bình luận và ký tắt vào mã. Mỗi tuần chúng tôi ngồi xuống và xem xét trực tiếp các đoạn mã thú vị và / hoặc phức tạp.


+1 tất cả chúng ta đều có thể 'làm cho nó hoạt động' nhưng đó là về việc đảm bảo mã có thể đọc và duy trì được, đặc biệt là theo các quy ước. Không phải là công việc thú vị nhất nhưng rất có giá trị.
Kirk Broadhurst

1

Là một thực tập viên kỹ thuật phần mềm, tôi đã thấy các bài đánh giá mã vô cùng hữu ích.

Trong nhóm của tôi, cần phải xem xét mã cho từng cam kết (những thay đổi lớn cuối cùng là chính thức, những thay đổi nhỏ hơn cuối cùng là 'nhìn nhanh'). Tôi chắc chắn cảm thấy như thể các bộ phận kỹ thuật / thiết kế của tôi đã được tăng cường bởi điều này, đặc biệt là vì tôi có nhiều khả năng rút bảng trắng hơn thiết bị đầu cuối ngay lập tức vì tôi biết tôi đang bị 'theo dõi'. :)

Trên thực tế, tôi nghĩ rằng nó tạo ra mã tốt hơn nhiều với nhược điểm nhỏ là thời gian phát triển chậm hơn một chút (theo ý kiến ​​của tôi, nó đáng giá trong một thời gian dài khi bạn không phải sửa / mở rộng mã được thiết kế khủng khiếp). Ngoài ra, tôi nghĩ rằng nếu bạn có đàn em / thực tập trong nhóm, họ sẽ đánh giá cao cơ hội cho phản hồi có giá trị. Tôi biết tôi làm!


Tôi đã làm việc chỉ được 1,5 năm và tôi muốn những đánh giá mã đó vì những lý do tương tự. ))
superM

1

Từ kinh nghiệm của tôi, Code Review thực sự là điều tuyệt vời nếu bạn thực hiện tốt nó. Khi bạn có các thành viên nhóm chuyên nghiệp / trưởng thành và quản lý. Chúng tôi là lập trình viên là "người giải quyết giải pháp". Công việc của chúng tôi không phải là tạo ra các dòng "văn bản". Đó là lý do tại sao chúng ta phải chia sẻ ý tưởng, sai lầm, vấn đề, kinh nghiệm. Đánh giá mã thực sự là một thực hành tốt để đạt được điều này.

Thật không may, nó có vẻ tuyệt vời nhưng thực sự khó thực hiện ở hầu hết các công ty. Nhóm của bạn cần rất nhiều "quyền tự chủ". Thuyết phục người quản lý hoặc bộ phận tài chính của bạn mà không tạo ra tính năng mới có lợi nhuận có vẻ khó.

Trong công ty của tôi, chúng tôi đang cố gắng thực hiện một số đánh giá mã. Nhưng quá nhiều thời gian dành cho 'đuổi thỏ' (tạo ra các tính năng).


'Đuổi theo thỏ nghe có vẻ rất quen thuộc với tôi)). nhưng tôi vẫn hy vọng chúng tôi sẽ quản lý để giới thiệu đánh giá mã, đặc biệt là khi các nhà quản lý của chúng tôi không bận tâm chút nào.
superM

1

Ngày nay, rất nhiều kiểu kiểm tra kiểu cú pháp và kiểu cú pháp cơ bản được bắt gặp bằng các công cụ (FXCop, v.v.).

Tuy nhiên, đánh giá mã là tốt, đặc biệt là với các thành viên mới của nhóm, công cụ phức tạp hoặc có tác động cao (ví dụ: điều gì đó sẽ gây chú ý cho những người quan trọng nếu thất bại hoặc gây ra tác động kinh doanh) và đặc biệt là khi thuê ngoài hoặc sử dụng nhà thầu ngắn hạn (đặc biệt là một lần nữa khi họ không phải là người bản ngữ vì lỗi dịch thuật / vấn đề ngôn ngữ có thể cho phép phần mềm vượt qua tất cả các bài kiểm tra nhưng không thực sự làm những gì được cho là như vậy).

Tôi không phải là người thích đặt mã trên máy chiếu cho một nhóm để chọn - tốt hơn hết là có một cuộc họp đánh giá mã nơi một thành viên khác trong nhóm (trưởng nhóm, v.v.) đi qua một danh sách với nhà phát triển. Điều này tác động đến ít người hơn - ngăn chặn rất nhiều thời gian lãng phí cho các cuộc tranh luận về phong cách - và ít gây lúng túng cho nhà phát triển. Nó có tính xây dựng hơn và dễ dàng hơn cho các nhà phát triển để tiếp thu các vấn đề thực tế và không bị mù quáng bởi "Tôi sẽ làm điều này ..." loại bình luận.

Tôi cũng nghĩ rằng các đánh giá mã không được thi hành - như đặt mã trên một chia sẻ hoặc gửi email xung quanh với hy vọng ai đó từ bỏ thời gian ăn trưa của họ để vượt qua nó - là một sự lãng phí thời gian.

Một chỗ ngồi với một đống danh sách, một điểm đánh dấu và một tách cà phê trong khu vực cà phê là tuyệt vời cho việc này.


0

Loại chương trình và nói nhóm này sẽ tốt cho các công nghệ mới hoặc để có được một số jr. tăng tốc độ, nhưng tôi không nghĩ nó tốt như một đánh giá nhất quán về mã mới. Sẽ hiệu quả hơn khi phải làm từng cái một.


-2

Đánh giá mã giúp xem "toàn bộ". Các nhà phát triển riêng biệt có xu hướng chỉ nhìn thấy các yêu cầu / vấn đề của họ. CR khám phá những ý tưởng và giải pháp từ toàn bộ quan điểm. CR chủ yếu giúp loại bỏ lãng phí công việc không cần thiết. Toàn bộ sản phẩm rẻ hơn và chất lượng tốt hơn.


1
không có lời giải thích, câu trả lời này có thể trở nên vô dụng trong trường hợp nếu người khác đăng một ý kiến ​​trái ngược. Ví dụ: nếu ai đó đăng một yêu cầu như 'Đánh giá mã che khuất mọi thứ, khiến cho việc xem "toàn bộ" trở nên khó khăn hơn , thì câu trả lời này sẽ giúp người đọc chọn ra hai ý kiến ​​trái ngược nhau như thế nào? Xem xét chỉnh sửa ing nó thành một hình dạng tốt hơn, để đáp ứng hướng dẫn Cách trả lời
gnat
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.