Điều gì sẽ là cách thực hành tốt nhất để có mã nguồn 'được xem xét' trong kho lưu trữ kiểm soát nguồn?


12

Điều gì sẽ là cách tốt nhất để quản lý mã nguồn được xem xét trong kho lưu trữ kiểm soát nguồn? Mã nguồn có nên trải qua quá trình xem xét trước khi đăng ký hay không, nếu mã được thực hiện sau khi mã được cam kết? Nếu đánh giá xảy ra sau khi mã được kiểm tra vào kho lưu trữ, thì điều đó nên được theo dõi như thế nào?

Câu trả lời:


4

Google có các thực tiễn đánh giá mã tốt nhất ở bất kỳ nơi nào tôi từng thấy. Mọi người tôi gặp ở đó hoàn toàn đồng ý về cách thực hiện đánh giá mã. Câu thần chú là "xem xét sớm và thường xuyên".

Giả sử bạn sử dụng một quy trình trông giống như những gì Graham Lee đề xuất. (Đó là một quá trình trước đây tôi đã sử dụng bản thân mình.) Vấn đề là các nhà đánh giá đang được yêu cầu xem xét các đoạn mã lớn. Đó là một nỗ lực nhiều hơn nữa, và khó hơn để có được người đánh giá để làm điều đó. Và khi họ làm điều đó, sẽ khó hơn để họ làm một công việc thấu đáo về nó. Hơn nữa, khi họ nhận thấy các vấn đề về thiết kế, sẽ khó hơn để khiến các nhà phát triển quay lại và làm lại tất cả các mã làm việc của họ để làm cho nó tốt hơn. Bạn vẫn nắm bắt được công cụ và nó vẫn có giá trị, nhưng bạn sẽ không nhận thấy rằng bạn đang thiếu hơn 90% lợi ích.

Ngược lại, Google có đánh giá mã trên mỗi cam kết trước khi có thể đi vào kiểm soát nguồn. Rất nhiều người nghĩ rằng đây sẽ là một quá trình nặng nề. Nhưng nó không hoạt động theo cách đó trong thực tế. Nó trở nên dễ dàng hơn để xem xét các đoạn mã nhỏ trong sự cô lập. Khi các vấn đề được tìm thấy, việc thay đổi thiết kế sẽ ít hơn nhiều vì bạn chưa viết một loạt mã xung quanh thiết kế đó. Kết quả là việc xem xét mã kỹ lưỡng sẽ dễ dàng hơn nhiều và dễ dàng hơn nhiều để khắc phục các sự cố đã thay đổi.

Nếu bạn muốn thực hiện đánh giá mã như Google (mà tôi thực sự, thực sự khuyên dùng), có phần mềm giúp bạn làm như vậy. Google đã phát hành công cụ của họ được tích hợp với Subversion là Rietveld . Go (ngôn ngữ) được phát triển với phiên bản Rietveld được sửa đổi để sử dụng với Mercurial. Có một bản viết lại cho những người sử dụng git tên là Gerrit . Tôi cũng đã thấy hai công cụ thương mại được đề xuất cho việc này, CrucibleHội đồng Đánh giá .

Phiên bản duy nhất tôi đã sử dụng là phiên bản nội bộ của Rietveld của Google và tôi rất hài lòng với nó.


4

Một kỹ thuật tôi đã sử dụng trên nhiều đội là:

  • nhà phát triển có thể tích hợp nguồn trên chi nhánh hoặc repo cục bộ của họ mà không cần xem xét
  • nhà phát triển có thể tích hợp với trung kế / chủ mà không cần xem xét
  • mã phải được xem xét và các ý kiến ​​đánh giá được xử lý, trước khi có thể được tích hợp từ thân cây / chủ vào một nhánh ứng viên phát hành

Trách nhiệm của tác giả mã là tìm kiếm đánh giá và trách nhiệm của người bảo trì chi nhánh phát hành để đảm bảo rằng chỉ có mã được xem xét được hợp nhất.

Có những công cụ hỗ trợ xem lại mã, nhưng tôi chưa bao giờ sử dụng chúng. Theo dõi ai đã thực hiện đánh giá cho bất kỳ sự hợp nhất nào có thể được thực hiện trong repo. Tôi đã sử dụng các thuộc tính svn và các công việc bắt buộc gắn liền với các cam kết để cho biết ai đã xem lại những gì.


2
+1: ngoại trừ "đó là trách nhiệm của tác giả mã khi tìm kiếm đánh giá". Trừ khi quản lý yêu cầu đánh giá được hoàn thành, họ sẽ trượt vào không liên quan. Phải có một số loại hệ thống phần thưởng (thậm chí thông thường hoặc không chính thức) nếu không nó sẽ không được thực hiện. Người bảo trì chi nhánh trả lời cho ai đó và có một số loại phần thưởng cho việc bị kỷ luật trong việc kiểm tra đánh giá mã. Mảnh ghép này cũng quan trọng Bạn có thể mô tả lý do tại sao mọi người sẽ bị kỷ luật khi làm điều này?
S.Lott

@ S.Lott về các đội tôi đã làm việc, niềm tự hào chuyên nghiệp. Ngoài ra, nếu bạn không được xem xét, mã của bạn sẽ không được tích hợp (như được mô tả ở trên). Do đó, mã của bạn không vào được sản phẩm và bạn đã không thực hiện công việc nào trong ngày / tuần / lần lặp đó. Nếu nhà phát triển của bạn không có động lực để thực hiện công việc của họ, bạn sẽ gặp vấn đề tồi tệ hơn là tổ chức kho lưu trữ kiểm soát nguồn của mình.

@Graham Lee: "Niềm tự hào chuyên nghiệp"? Tôi chế giễu (nhưng không có nhiều thứ để tiếp tục.) "Các nhà phát triển không có động lực để thực hiện công việc của họ" là vấn đề. Nhiều nhà quản lý sẽ lật đổ một quy trình tốt bằng cách yêu cầu phát hành trước lịch trình hoặc yêu cầu các tính năng bổ sung được đưa vào. Những yếu tố thúc đẩy nào được đưa ra để ngăn chặn quá trình này? Điều gì ngăn người quản lý nói "Chúng tôi cần điều này vào ngày mai, chúng tôi không có thời gian để đánh giá mã"?
S.Lott

@ S.Lott Tôi không biết về bạn, nhưng tôi không phát hành một đống rác rưởi cho dù người quản lý nghĩ rằng anh ta hiểu rõ hơn về công việc của tôi được thực hiện như thế nào.

@Graham Lee: Tôi cố gắng tránh phát hành mã lỗi. Câu hỏi của tôi là "điều gì thúc đẩy nhóm của bạn tránh quản lý phá vỡ quy trình của bạn." Đó là một quá trình tốt, tôi muốn biết thêm.
S.Lott

1

Tôi chưa bao giờ tách mã để xem xét theo tiêu chí đã cam kết / không cam kết - tiêu chí duy nhất tôi gặp phải là các bài kiểm tra đơn vị và kiểm tra tích hợp có màu xanh lá cây.

Để theo dõi, tôi khuyên bạn nên cập nhật luồng trong trình theo dõi vấn đề yêu thích của bạn. Đối với exampe thay vì:

  • Chủ sở hữu sản phẩm -> Nhà phân tích -> Nhà phát triển -> QA -> Kỹ sư phát hành

Bạn có thể muốn giới thiệu thêm một giai đoạn (đánh giá):

  • Chủ sở hữu sản phẩm -> Nhà phân tích -> Nhà phát triển -> Người đánh giá -> QA -> Kỹ sư phát hành

Do đó, đối với mỗi vé ở trạng thái Đã triển khai, bạn có thể chỉ định người đánh giá và chỉ những vé được đánh giá mới được chuyển sang QA.


1

Tôi chỉ có một kinh nghiệm về đánh giá mã, vì vậy tôi không thể nói nó tốt như thế nào.

Tôi đã làm việc với một nhóm nhỏ các lập trình viên (~ 10-15) và chúng tôi đang sử dụng VS Team Foundation Studio. Chúng tôi đã được yêu cầu cam kết mã khoảng một lần một ngày và trước khi mỗi mã cam kết được xem xét bởi một người khác trong nhóm (hy vọng ai đó cũng tham gia vào dự án). Trong thời gian cam kết, tên của người đó cũng được đưa vào một lĩnh vực.


Chỉ cam kết một lần mỗi ngày đánh tôi như một lá cờ đỏ. Lấy làm tiếc.
btilly

Có lẽ. Tôi cũng hơi ngạc nhiên lúc đầu. Tuy nhiên, đó không phải là một quy tắc khó và nhanh và bạn có thể "tạm gác" những thay đổi cục bộ theo ý muốn.
apoorv020

0

Tôi đã làm việc trong một nhóm mã đã xem xét mọi thứ đã được kiểm tra về sự thay đổi bằng cách thay đổi trong một vài đánh giá một tuần. Điều này có nghĩa là chúng tôi không luôn cập nhật các đánh giá về mã nhưng nó đã đạt được những gì chúng tôi đặt ra để đạt được.

Vì vậy, trước tiên, hãy hỏi những gì bạn muốn đạt được bằng cách xem lại mã. Trong trường hợp của chúng tôi, nó đã không bắt được các nhà phát triển ngu ngốc, có một giả định về năng lực hơn là một giả định về sự bất tài. Nó đã cho phép nhóm nghiên cứu có được cái nhìn tổng quan về các lĩnh vực khác của hệ thống và cho phép một số quyết định thiết kế đáng ngờ được sửa chữa trước khi chúng trở nên ổn định. Có thể nghi ngờ, ý tôi là luôn có nhiều hơn một cách để lột da một con mèo và không phải ai cũng biết rằng có một con dao lột da mèo đã có sẵn trong hộp công cụ.


0

Cách mà chúng tôi đã giải quyết các đánh giá mã là mọi nhiệm vụ từ phần mềm theo dõi dự án của chúng tôi đã được xem xét. Lúc đó chúng tôi đang sử dụng Thần chú và SVN. Cam kết dự án của chúng tôi đã được gắn vào cả hai hệ thống. Mỗi cam kết phải được gắn với một nhiệm vụ trong bọ ngựa. Khi nhiệm vụ đã hoàn thành, trạng thái "Sẵn sàng để đánh giá" được gán cho nó.

Các mục RFR sau đó được chọn bởi bất kỳ ai có thời gian rảnh để đánh giá hoặc được chỉ định cho một người cụ thể để xem xét. Vào thứ Sáu, tất cả các mặt hàng RFR phải được xem xét trước khi kết thúc ngày để không mang theo đến tuần sau.

Vấn đề duy nhất mà chúng tôi gặp phải trong quá trình này là các mục lớn có hàng tấn tệp. Để xử lý việc này, người viết mã và người đánh giá sẽ kết hợp với nhau và người viết mã sẽ chạy qua các thay đổi cho đến khi người đánh giá hiểu chúng. Họ sẽ làm mã xem lại với nhau.

Quá trình này đã bị phá vỡ khi quản lý ra lệnh rằng nếu lập trình ngang hàng được thực hiện thì việc xem xét mã riêng là không cần thiết. Các nhà phát triển trở nên lỏng lẻo về quy trình và các lỗi nhỏ ngu ngốc bắt đầu được giới thiệu. Cuối cùng, chúng tôi đã quay lại quy trình ban đầu và mọi thứ trở lại với nhau.


0

Trong nhóm của tôi, chúng tôi đã sử dụng một thực hành trong năm qua hoặc có vẻ như hoạt động rất tốt.

Tổ chức của chúng tôi sử dụng Perforce để kiểm soát phiên bản. Perforce (tính đến một năm trước) bao gồm một tính năng gọi là Kệ. Với giá đỡ, tôi có thể "tạm gác" những thay đổi của mình cho một vấn đề cụ thể. Chúng được lưu trữ trong hệ thống kiểm soát phiên bản nhưng không được kiểm tra. Sau đó, tôi yêu cầu một nhà phát triển khác trong nhóm của tôi xem xét mã.

Nhà phát triển khác có thể xem các thay đổi đang chờ xử lý của tôi trong Perforce từ máy tính của mình và so sánh các thay đổi với các phiên bản gần đây nhất. Anh ấy cũng có thể "hủy kết nối" với máy cục bộ của mình nếu anh ấy muốn thử các thay đổi của tôi. Khi anh ấy hoàn thành đánh giá, anh ấy cho tôi biết. Sau đó tôi kiểm tra mã của mình bằng "Được đánh giá bởi Bob" ở cuối bình luận.

Điều này đã làm việc thực sự tốt cho chúng tôi. Trước hết, đánh giá mã nói chung đã được chứng minh là cực kỳ hữu ích. Ngoài ra, tính năng giá đỡ của Perforce cho phép chúng tôi thực hiện đánh giá mà không cần kiểm tra hoặc gặp bất kỳ khó khăn lớn nào mặc dù nhóm của chúng tôi có phạm vi rộng về mặt địa lý - điều đó rất quan trọng. Và nó hoạt động rất tố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.