Cách tốt nhất để xem lại mã trước khi cam kết với thân cây là gì? (SVN)


14

Cách tốt nhất để xem lại mã trước khi cam kết với trung kế SVN là gì? Một ý tưởng mà tôi đang nghĩ đến là yêu cầu nhà phát triển cam kết mã của mình cho một chi nhánh và sau đó xem xét mã của mình trong khi hợp nhất các bản sửa đổi chi nhánh vào thân cây. Đây có phải là một thực hành tốt? Nếu không, có thể làm gì khác để xem lại mã trước khi cam kết với trung kế?


2
Bạn có thể xem xét một số công cụ như Crucible cung cấp hỗ trợ cho các đánh giá trước khi cam kết.
Gyan aka Gary Buyn

3
bất kỳ lý do để không xem lại mã sau khi cam kết với thân cây?
gnat

3
@geat Bạn biết đấy, một nhà phát triển cấp cao, sau khi xem xét mã được cam kết trực tiếp vào trung kế có thể quyết định rằng mã này có vấn đề nên được khôi phục. Chúng tôi có thể đã ngăn chặn mã có vấn đề này được cam kết vào thân cây ngay từ đầu. Đó là toàn bộ ý tưởng.
Meysam

Bạn đã thử cách khác hay đây chỉ là phỏng đoán?
gnat

Câu trả lời:


12

Mặc dù có hai trường - những gì bạn đề xuất hoặc "xem xét trước khi cam kết". Hầu hết các khác biệt có thể được coi là tiêu cực và / hoặc tích cực. - ví dụ: Không theo dõi các thay đổi do đánh giá gây ra - bạn có muốn xem đây là các cam kết riêng biệt hay bạn chỉ quan tâm đến công việc cuối cùng?

Xem lại trước khi cam kết - không yêu cầu phân nhánh (mặc dù có thể thực hiện nếu muốn), phải cung cấp cho người đánh giá quyền truy cập vào các thư mục làm việc. Mã có thể được thay đổi trong và sau khi xem xét mà không theo dõi. Sửa chữa gây ra bởi đánh giá không xuất hiện trong kho lưu trữ.

Đánh giá sau khi cam kết (trên một chi nhánh) - Cần quay một chi nhánh cho mỗi đánh giá (mặc dù điều này có thể nằm trong quy trình làm việc rồi). Mã được gửi để xem xét không thể thay đổi mà không theo dõi các thay đổi. Ai đó phải hợp nhất các chi nhánh được đánh giá và theo dõi những gì đã được xem xét và những gì chưa.

Nó phần lớn phụ thuộc vào văn hóa đội và kinh nghiệm. Những gì bạn tin tưởng mô hình, mục đích chính của đánh giá là gì? Cá nhân tôi thích xem xét sau khi cam kết, vì nó cho phép thay đổi do đánh giá được theo dõi. Bây giờ chúng tôi sử dụng Git và Gerrit vì chúng cung cấp sự cân bằng tốt giữa hai tùy chọn.


1
Tạo chi nhánh liên tục và sáp nhập lặp đi lặp lại là một sự gièm pha vượt xa khả năng gây ô nhiễm (và không thể khắc phục). Nói chung, chỉ thị chính cho kiểm soát phiên bản là "không phá vỡ bản dựng". Nếu bạn có thể làm điều đó, sẽ không có tác hại thực sự nào trong việc kiểm tra và mọi thứ khác chỉ là sự điều chỉnh sau thực tế.
Spencer Kormos

Xem lại sau khi cam kết trên một nhánh hoạt động tốt với việc sử dụng các nhánh tính năng: bạn bắt đầu một nhánh mới cho mỗi tính năng mới hoặc sửa lỗi. Khi hoàn thành và thông qua đánh giá, nó sẽ được hợp nhất vào thân cây. Bằng cách này, thân cây chỉ chứa các thay đổi hoàn chỉnh, được xem xét. Vì các nhánh tính năng có thời gian tồn tại ngắn, nên sự hợp nhất thường không đáng kể. Ưu điểm khác là thân cây chỉ chứa các tính năng và sửa lỗi hoàn chỉnh - mọi thứ được nướng một nửa sẽ chỉ tồn tại trên một nhánh.
Stephen C. Steel

7
  1. Trước khi cam kết chạy 'svn diff' để tạo tệp vá.
  2. Gửi tệp vá cho người đánh giá, người áp dụng nó vào một bản sao sạch của thân cây.
  3. Người đánh giá đi qua các thay đổi bằng cách sử dụng trình xem khác nhau của sự lựa chọn.
  4. Người kiểm tra thực hiện xây dựng và chạy thử nghiệm.
  5. Nếu mọi việc suôn sẻ, hãy nói với nhà phát triển, họ có thể kiểm tra những thay đổi của họ. Nếu
    có vấn đề, nhà phát triển quay lại bước 1.

5

Có thế giới lý tưởng, và thế giới thực.

Trong thế giới lý tưởng , tất cả mã của bạn đều được kiểm tra, vì vậy bạn có thể chắc chắn rằng mọi thứ được kiểm tra sẽ hoạt động hoặc bạn sẽ biết nó bị hỏng vì thất bại một hoặc nhiều thử nghiệm. Thêm vào đó, bất kỳ ai không có kinh nghiệm sẽ được ghép đôi với một người có kinh nghiệm, vì vậy việc đánh giá mã được thực hiện nhanh chóng (bạn cam kết khi bạn đi).

Trong thế giới thực , mọi thứ khác nhau. Doanh nghiệp muốn thay đổi trực tiếp ngay bây giờvà sẽ nói với bạn, với một khuôn mặt hoàn toàn thẳng thắn, rằng có, bạn sẽ có thời gian để làm sạch mã và thêm các trường hợp kiểm tra sau. Bạn có thể sẽ không có thời gian để xem lại mã mọi thứ và tỷ lệ phần trăm mã được kiểm tra liên tục giảm. Lý do chính để đánh giá mã là để các nhà phát triển cơ sở học hỏi từ các nhà phát triển cấp cao (khi có thời gian cho việc đó) bằng cách nhờ một người có kinh nghiệm hơn xem xét các thay đổi và đề xuất "cách làm việc tốt hơn (TM)". Bạn sẽ có các nhà phát triển cao cấp chỉ cam kết mã chưa được xem xét. Chi nhánh chỉ để xem xét mã và sau đó hợp nhất là một sự lãng phí rất lớn thời gian. Một cách để khắc phục vấn đề này là tuyên bố một cuộc họp nhóm 2 giờ (hoặc hơn) thường xuyên trong đó bạn chọn một hoặc hai thay đổi gần đây mà mọi người đã làm trong thời gian ngắn và để tác giả của họ "trình bày" cách tiếp cận của họ bằng cách xem mã cùng nhau trên máy chiếu hoặc một cái gì đó Điều này có thể dẫn đến một số cuộc thảo luận thú vị (thường đi lạc đề khá nhiều) nhưng nhìn chung cải thiện sự hiểu biết của mọi người về cách làm đúng. Cộng với áp lực có thể phải trình bày mã của bạn làm cho một số người làm điều đó tốt hơn ;-)

Hoặc bạn có thể may mắn và được làm việc trong môi trường thế giới thực, nơi không quá bận rộn, các lập trình viên thực sự được đánh giá cao về những gì họ làm thay vì lạm dụng và có thời gian để làm mọi thứ đúng. Trong trường hợp đó, câu trả lời của tôi sẽ là: thử một số phương pháp khác nhau được đề xuất trong câu trả lời ở đây và xem phương pháp nào phù hợp với nhóm của bạn và cách bạn làm việc tốt nhất.


+1 cho ý tưởng đánh giá hàng tuần. Tôi có thể phải thử cái này
Jamie Taylor

@JamieTaylor: Chà, đó là một chút thỏa hiệp - rõ ràng, nếu bạn (và nhóm nhà phát triển của bạn) có thời gian, tôi muốn đề nghị đánh giá mã đầy đủ thay thế. Nhưng đó là một cách tốt để chia sẻ kiến ​​thức trong nhóm.
Amos M. Carpenter

2

Các chi nhánh nên hoạt động tốt, dựa trên kinh nghiệm của tôi về việc sử dụng chúng trong các đánh giá trước khi cam kết tại công việc trước đó.

Lưu ý trước đó, chúng tôi chỉ sử dụng các đánh giá trước khi cam kết cho các bản vá quan trọng cho mã ứng viên phát hành sản xuất, do đó không có nhiều chi nhánh (các thay đổi thường lệ được chuyển qua các đánh giá sau cam kết).

Vì dường như bạn sẽ sử dụng các đánh giá trước khi cam kết cho tất cả các thay đổi, bạn có thể cần phải quản lý số lượng lớn các chi nhánh. Nếu bạn mong đợi nhà phát triển thực hiện trung bình một thay đổi "có thể xem lại" mỗi tuần, thì cuối cùng bạn sẽ có khoảng 50 chi nhánh cho mỗi nhà phát triển trong nhóm. Nếu bạn đang sử dụng các khối công việc nhỏ hơn - như những người mất 1, 2, 3 ... ngày - nhân 50 với 2, 3, 5 ... tương ứng.

Dưới đây là một vài cân nhắc khác cần tính đến nếu bạn muốn nó cách tốt nhất .

1. xử lý các trường hợp khi trì hoãn xem lại mã khối cần thiết cho các thành viên khác trong nhóm

Thiết lập, giám sát và giải quyết các xung đột liên quan đến thời hạn xem xét mã. Theo hồi ức của tôi về các đánh giá trước khi cam kết với các thay đổi thường lệ tôi đã xử lý trong một trong các dự án trước đây, thời hạn hợp lý là khoảng 3 ngày và thời gian để bắt đầu lo lắng là khi việc đánh giá không hoàn thành hơn 1 ngày sau khi gửi.

Để so sánh, tại các đánh giá sau cam kết, các yêu cầu này thoải mái hơn nhiều (tôi đang sử dụng thời hạn 2 tuần và bắt đầu lo lắng sau 1 tuần) - nhưng vì bạn nhắm mục tiêu đánh giá trước khi cam kết, điều này có thể không thú vị.

2. hợp nhất xung đột khi gửi mã được xem xét

Phải làm gì nếu cam kết cho mã được đánh giá bị chặn bởi những thay đổi xung đột được cam kết bởi người khác trong khi mã đang chờ xem xét?

Một vài lựa chọn để xem xét là

  • quay trở lại để bắt đầu và yêu cầu các nhà phát triển triển khai lại và xem xét lại sự thay đổi
    Đối với trường hợp đó, bạn có thể cần phải giải quyết một tác động tiêu cực đến tinh thần của đội mà điều này có thể (sẽ!).
  • chuyển trách nhiệm hợp nhất cho thành viên khác trong nhóm ("hợp nhất chủ")
    Trong trường hợp đó, bạn cũng sẽ cần phải quyết định liệu hợp nhất có nên thông qua đánh giá trước khi cam kết hay không - và nếu có, thì phải làm gì trong trường hợp nếu hợp nhất lần lượt gặp một cuộc xung đột khác.
  • bỏ qua các thay đổi được thực hiện đối với mã được xem xét ở giai đoạn hợp nhất
    Trong trường hợp đó, bạn có thể cần phải giải quyết tác động tiêu cực đến tinh thần nhóm liên quan đến thực tế là mã đã cam kết khác với mã đã được xem xét.
  • phát minh ra một cách để tránh xung đột
    Cách tiếp cận đơn giản là chỉ cho phép một nhà phát triển sửa đổi tập tin cụ thể - mặc dù điều này sẽ không bảo vệ bạn khỏi loại thay đổi không sửa đổi trực tiếp tệp, nhưng tác động đến chúng thông qua thay đổi API nội bộ . Bạn cũng có thể phát hiện ra rằng loại "khóa bi quan" này làm cho các thay đổi trên toàn hệ thống và tái cấu trúc sâu khá rắc rối.

Để so sánh, sẽ không có vấn đề nào như vậy trong các đánh giá sau cam kết (vì các thỏa thuận này với mã đã được hợp nhất theo định nghĩa) - nhưng vì bạn nhắm mục tiêu đánh giá trước khi cam kết, nên điều này có thể không thú vị.

3. tải nhà phát triển đang chờ xem xét

Thiết lập một chính sách rõ ràng cho dù nhà phát triển đã gửi đánh giá nên chuyển sang nhiệm vụ mới hoặc làm một việc khác (ví dụ như theo đuổi người đánh giá).

Để so sánh, đánh giá sau cam kết hầu như không cần chính sách rõ ràng (vì việc tiếp tục thực hiện nhiệm vụ tiếp theo sau khi bạn cam kết mã và tính đến thời hạn xem xét là một hoặc hai tuần) - nhưng vì bạn nhắm mục tiêu đánh giá trước khi cam kết, nên điều này có thể không thú vị.


0

Bất kỳ phần phát triển nào cần đánh giá sẽ phải nằm trong một nhánh riêng. Vì vậy, chi nhánh nên tồn tại trước khi đến thời điểm xem xét. Sau đó, bước cần phải là:

  1. Ôn tập
  2. Sửa đổi (có thể)
  3. lặp lại để xem lại (có thể)
  4. Hợp nhất vào thân cây

Sáp nhập là một chút khó khăn. Chi nhánh càng độc lập lâu thì càng khó hợp nhất trở lại vào thân cây. (Nó cũng có thể khó kiểm tra hơn.)

Hợp nhất chéo là một giải pháp có thể. Trước khi hợp nhất vào thân cây (bước 4 hoặc thậm chí sớm hơn, hãy nói trước bước 3 hoặc bước 1), hợp nhất thân cây vào nhánh. Các nhà phát triển có thể làm điều đó và kiểm tra nó. Sau đó, nhánh bắt kịp với thân cây và nó trở nên dễ dàng hơn để hợp nhất nó vào thân cây. Sáp nhập vào thân cây là tốt nhất do bạn, hoặc bất cứ ai phụ trách thân cây.

Một số người thử rebase thay vì hợp nhất chéo. Một số người cho rằng rebase là xấu xa. Đó là một cuộc tranh luận khác.

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.