Đăng ký mã "đã nhận xét" [đã đóng]


94

Ok, đây là điều gì đó đã gây ra một số mâu thuẫn trong công việc hiện tại của tôi và tôi thực sự không mong đợi điều đó. Phát triển phần mềm có tổ chức trong nhà là một khái niệm mới ở đây và tôi đã đưa ra bản thảo đầu tiên về một số hướng dẫn viết mã.

Tôi đã đề xuất rằng không bao giờ nên kiểm tra mã "đã nhận xét ra" vào kho lưu trữ. Lý do tôi đã nêu điều này là kho lưu trữ duy trì lịch sử đầy đủ của các tệp. Nếu bạn đang xóa mã chức năng thì hãy xóa nó hoàn toàn. Kho lưu trữ giữ các thay đổi của bạn để có thể dễ dàng xem những gì đã được thay đổi.

Điều này đã gây ra một số mâu thuẫn trong đó một nhà phát triển khác tin rằng việc sử dụng tuyến đường này là quá hạn chế. Nhà phát triển này muốn có thể bình luận về một số mã mà anh ta đang làm việc nhưng chưa hoàn chỉnh. Mã này sau đó sẽ không bao giờ được đăng ký trước đó và sau đó không được lưu ở bất kỳ đâu. Chúng tôi sẽ sử dụng TFS vì vậy tôi đã đề xuất rằng tạm dừng các thay đổi sẽ là giải pháp đúng đắn nhất. Tuy nhiên, nó không được chấp nhận vì anh ta muốn có thể kiểm tra các thay đổi từng phần có thể được triển khai hoặc không.

Cuối cùng, chúng tôi muốn đạt được điểm mà chúng tôi đang tận dụng tối đa Tích hợp liên tục và tự động triển khai lên máy chủ web phát triển. Hiện tại không có phiên bản phát triển của máy chủ web hoặc máy chủ cơ sở dữ liệu nhưng tất cả sẽ sớm được thay đổi.

Dù sao, suy nghĩ của bạn là gì? Bạn có tin rằng mã "đã nhận xét ra" hữu ích để có trong kho lưu trữ không?

Tôi rất muốn nghe ý kiến ​​từ những người khác về chủ đề này.

Chỉnh sửa: Vì lợi ích rõ ràng, chúng tôi không sử dụng các chi nhánh tư nhân. Nếu chúng tôi đã làm thì tôi sẽ nói làm những gì bạn muốn với nhánh riêng của bạn nhưng đừng bao giờ hợp nhất mã đã nhận xét với thân hoặc bất kỳ nhánh nào được chia sẻ.

Chỉnh sửa: Không có lý do hợp lệ nào mà chúng tôi không sử dụng các nhánh riêng tư hoặc theo người dùng. Đó không phải là một khái niệm tôi không đồng ý. Chúng tôi vẫn chưa thiết lập nó theo cách đó. Có lẽ đó là điểm trung bình cuối cùng. Hiện tại chúng tôi sử dụng giá đỡ TFS.


2
Đảm bảo rằng bạn đào tạo đầy đủ các nhà phát triển của mình về cách sử dụng TFS đúng cách. Nhóm làm việc của tôi đã gặp vấn đề nghiêm trọng với TFS và điều này đã dẫn đến việc tôi bị mất mã. Có thể là lỗi "ID10T", nhưng tôi vẫn không tin tưởng TFS.
James Schek

@John: Có lý do gì khiến bạn không cho phép các chi nhánh tư nhân không? Điều đó sẽ giải quyết được vấn đề, anh ấy có thể vui vẻ gửi và lưu bất cứ thứ gì ở đó, và bạn sẽ không bị làm phiền chút nào trong nhánh chính.
Frank

@null - như đã đề cập trong bản chỉnh sửa, tôi không có vấn đề gì với chúng, chỉ là chúng tôi vẫn chưa làm được. Mặc dù vậy, vấn đề trong kịch bản này là chúng tôi sẽ không phát hành từ một chi nhánh tư nhân và anh ấy muốn một giải pháp từng phần được triển khai.
John


Câu trả lời:


123

Có thể có những người khác với những trải nghiệm khác nhau, nhưng đối với tôi, kiểm tra mã đã hoàn thành là một ý tưởng kinh khủng.

Dưới đây là những nguyên tắc tôi đã học được và cố gắng làm theo:

  • Kiểm tra thường xuyên - ít nhất một lần, nhưng tốt nhất là nhiều lần mỗi ngày
  • Chỉ kiểm tra chức năng hoàn chỉnh
  • Nếu xung đột đầu tiên và thứ hai (ví dụ: mất hơn một ngày để chức năng hoạt động) thì nhiệm vụ quá lớn - hãy chia nó thành các nhiệm vụ có thể hoàn thành nhỏ hơn.

Điều này có nghĩa là:

  • Mã nhận xét không bao giờ được đăng ký vì nó không hoạt động
  • Nhận xét không phải là một chiến lược lưu trữ hợp lệ, vì vậy cho dù đó là mã chưa hoàn thành hay mã đang được gỡ bỏ, nhận xét và kiểm tra không có ý nghĩa gì.

Vì vậy, tóm lại, KHÔNG! Nếu mã chưa sẵn sàng để chuyển sang giai đoạn tiếp theo (bất kỳ cái nào dành cho bạn: IntTest / QA / UAT / PreProd / Prod), nó không nên được cam kết với một nhánh hoặc nhánh đa nhà phát triển. Giai đoạn = Stage.

Chỉnh sửa: Sau khi đọc các câu trả lời và nhận xét khác, tôi sẽ nói thêm rằng tôi không nghĩ rằng việc cấm mã nhận xét là một ý kiến ​​hay (không chắc bạn sẽ thực thi mã đó như thế nào). Điều tôi sẽ nói là bạn nên kêu gọi mọi người trong nhóm của bạn mua theo triết lý mà tôi đã mô tả ở trên. Nhóm tôi làm việc hết lòng đón nhận nó. Do đó, kiểm soát nguồn là một thành viên trong nhóm không giới hạn, một thành viên giúp chúng tôi hoàn thành công việc của mình.

Những người không chấp nhận triết lý đó thường gây ra các cửa sổ bị vỡ và thường thất vọng với việc kiểm soát nguồn. Họ coi đó là điều tốt nhất cần thiết và điều tồi tệ nhất nên tránh; dẫn đến các lần kiểm tra không thường xuyên, có nghĩa là các tập thay đổi rất lớn và khó hợp nhất, điều này tạo nên sự thất vọng, khiến các lần kiểm tra trở thành thứ cần tránh nhiều hơn, v.v. Đây cuối cùng là một vấn đề thái độ, không thực sự là một quy trình. Thật dễ dàng để tạo ra những rào cản tinh thần chống lại nó; thật dễ dàng để tìm ra lý do tại sao nó không hoạt động, cũng giống như dễ dàng tìm thấy lý do để không ăn kiêng nếu bạn không thực sự muốn. Nhưng khi người ta muốn làm điều đó và cam kết thay đổi thói quen của họ, kết quả là rất ấn tượng. Bạn phải bán nó một cách hiệu quả.


2
Tôi đồng ý với cách làm rõ của bạn - không bao giờ đăng ký nửa chừng mới hoàn thành mã vào "trung kế" hoặc bất cứ điều gì tương đương. Luôn phải có một nhánh / trung kế là phiên bản "mã này luôn hoạt động". Hãy tiếp tục và đăng ký một nửa đã hoàn thành đến một chi nhánh nhà phát triển tư nhân, gương địa phương, giá đỡ, bất cứ thứ gì.
James Schek

2
Nhận xét @Eddie, theo định nghĩa, không bắt buộc phải đồng bộ với phần còn lại của cơ sở mã. Chúng có thể trở nên cũ và gây hiểu nhầm và góp phần làm hỏng các cửa sổ của hệ thống. Tất cả những điều đó là rủi ro đối với thời gian của nhà phát triển. Chúng tôi đã có đủ những thứ đó rồi. Thật dễ dàng đủ để tránh một này
Rex M

2
@Rex M: IMO, Nhận xét là một phần thiết yếu của mã. Trong bất kỳ mã nào tôi duy trì, nhận xét được đảm bảo đồng bộ với phần còn lại của cơ sở mã. Mã nơi nhận xét không đồng bộ bị hỏng. Bạn chỉ có thể chưa biết nó.
Eddie

2
@John: Có vẻ như lỗi đó là do sự giám sát của nhà phát triển. Làm thế nào mà lệnh cấm kiểm tra mã bình luận lại ngăn cản nhà phát triển đó thực hiện việc giám sát này? Lệnh cấm chỉ cung cấp cho bạn HAI điều để trừng phạt thay vì một. Nó không ngăn cản sự giám sát.
Eddie

9
Tôi gần như đã bỏ phiếu cho điều này, nhưng thực sự hiếm khi tôi nhận được thứ mà tôi đang làm ở trạng thái đăng ký chỉ trong một ngày làm việc. Tôi cho rằng có thể bạn là một nhà phát triển giỏi hơn tôi nhiều, nhưng tôi chọn tin rằng tôi làm việc trên những công việc khó hơn bạn. :-)
TED

43

"Không bao giờ" hiếm khi là một từ hay để sử dụng trong các hướng dẫn.

Đồng nghiệp của bạn có một ví dụ tuyệt vời về thời điểm có thể thích hợp để đăng ký mã được nhận xét: Khi nó chưa hoàn thành và có thể làm hỏng ứng dụng nếu đăng ký trong khi đang hoạt động.

Đối với hầu hết các phần, bình luận về mã chết là không cần thiết trong một hệ thống kiểm soát thay đổi được quản lý tốt. Tuy nhiên, không phải tất cả mã được nhận xét là "chết".


9
Tôi không đồng ý. Nếu mã không đầy đủ, tại sao nó được đăng ký ngay từ đầu. Các hệ thống điều khiển nguồn hiện đại có các cơ chế để tải lên chức năng đang được xử lý mà không cần cam kết với trung kế.
Rex M

9
+1, đôi khi đây là điều thích hợp nhất để làm. Không phải luôn luôn, nhưng không phải là không bao giờ . Không bao giờ là dễ dàng để nói, nhưng quá hạn chế.
Eddie

@Rex Tôi không nghĩ rằng có đủ thông tin trong bài đăng gốc để xác định sự khác biệt giữa tải lên chức năng đang tiến hành và cam kết với thân cây.
Jason Coco

Rex - nó là gì? Không bao giờ đăng ký không đầy đủ? Hoặc không bao giờ đăng ký không đầy đủ để trung kế? Đó không phải là những điều giống nhau.
James Schek,

@Jason "nhà phát triển muốn có thể bình luận về một số mã mà anh ấy đang làm việc nhưng chưa hoàn thiện". Có vẻ như anh ấy muốn kiểm tra chức năng đang tiến hành với tôi.
Rex M

24

Mã nhận xét không bao giờ được đăng ký với mục đích duy trì lịch sử. Đó là điểm kiểm soát nguồn.

Mọi người đang nói rất nhiều lý tưởng ở đây. Có thể không giống như những người khác, tôi phải làm việc trên nhiều dự án với nhiều lần bị gián đoạn với "thế giới thực" khiến ngày làm việc của tôi vô tình bị gián đoạn.

Đôi khi, thực tế là, tôi phải đăng ký một phần mã hoàn chỉnh. Có nguy cơ bị mất mã hoặc mã đăng ký không đầy đủ. Không phải lúc nào tôi cũng có đủ khả năng để "hoàn thành" một nhiệm vụ dù nhỏ đến đâu. Nhưng tôi sẽ không ngắt kết nối máy tính xách tay của mình khỏi mạng mà không kiểm tra tất cả mã.

Nếu cần, tôi sẽ tạo nhánh làm việc của riêng mình để thực hiện các thay đổi từng phần.


4
@James bit cuối cùng của bạn là chìa khóa - nếu bạn không thể kiểm tra mã làm việc, hãy tìm một nơi khác để đặt nó. Cho dù đó là một cành cây hay một tập hợp có giá đỡ hoặc bất cứ thứ gì.
Rex M

Nếu tôi có thể ủng hộ cái này nhiều hơn một lần, tôi sẽ. Cảm xúc của tôi chính xác!
Ola Eldøy

23

Một trường hợp mà tôi để lại mã đã nhận xét:

// This approach doesn't work
// Blah, blah, blah

khi đó là cách tiếp cận vấn đề rõ ràng nhưng nó lại ẩn chứa một số lỗ hổng tinh vi. Chắc chắn, kho lưu trữ sẽ có nó nhưng kho lưu trữ sẽ không cảnh báo bất kỳ ai trong tương lai không đi theo con đường đó.


6
Nếu nó được giới hạn trong một dòng thì đây có thể là một ngoại lệ. Tôi muốn xem một nhận xét khối ngắn gọn (vài dòng trên cùng) đề cập đến lý do thực hiện cách tiếp cận này so với cách tiếp cận khác. Trong trường hợp đó, tôi sẽ không coi đó là "bình luận" mà là tài liệu.
John

3
+1. Một ví dụ mà tôi đã thấy là nơi có thứ gì đó bị hỏng vì mã đặt một soTIMEOUT. Cách khắc phục là loại bỏ nó. Nếu bạn chỉ xóa dòng mã, sau đó ai đó có thể giới thiệu lại nó, nghĩ rằng họ đang sửa lỗi bằng cách làm như vậy, nhưng thực ra họ đang giới thiệu lại một lỗi.
Eddie

1
Vâng, đó là ý tưởng của tôi - đảm bảo rằng lỗi này sẽ không được giới thiệu lại trong tương lai. Bằng cách để lại mã thực, họ có thể thấy rằng đó không chỉ là một lỗi trong cách viết bản gốc.
Loren Pechtel

Đối với trường hợp này, tôi không coi đây là "đã nhận xét ra mã", nó là tài liệu.
hlovdal

1
đây là ví dụ duy nhất mà tôi để mã đã nhận xét hoạt động. trong trường hợp này, đó không phải là ý tưởng nửa vời của ai đó đang trôi nổi và gây nhầm lẫn cho các lập trình viên bảo trì, [hy vọng] đó là một ví dụ hợp pháp, chức năng về mã sẽ phá vỡ hoàn toàn ứng dụng, nhưng nếu không thì đây là cách tiếp cận rõ ràng.
worc

19

Tôi chắc chắn sẽ không khuyến khích, mạnh mẽ, bao giờ kiểm tra mã đã nhận xét. Tuy nhiên, tôi sẽ không tuyệt đối cấm nó. Đôi khi (nếu hiếm khi), kiểm tra mã đã nhận xét vào kiểm soát nguồn là thích hợp. Nói "không bao giờ làm điều đó" là quá hạn chế.

Tôi nghĩ tất cả chúng ta đều đồng ý với những điểm sau:

  • Không bao giờ kiểm tra mã chết trong kiểm soát nguồn
  • Không bao giờ kiểm tra mã bị hỏng (không hoạt động) trong điều khiển nguồn, ít nhất là không bao giờ chuyển sang trung kế và chỉ rất hiếm khi đến một nhánh riêng, YMMV
  • Nếu bạn đã tạm thời nhận xét điều gì đó hoặc bị hỏng điều gì đó cho mục đích gỡ lỗi, đừng kiểm tra mã cho đến khi bạn khôi phục mã về dạng chính xác của nó

Một số người nói rằng có các danh mục khác, chẳng hạn như tạm thời mã bị loại bỏ hoặc cải tiến gia tăng nhưng không hoàn chỉnh bao gồm một lượng nhỏ mã được nhận xét như tài liệu về những gì tiếp theo hoặc một đoạn trích nhận xét rất ngắn (lý tưởng là 1 dòng) ra mã hiển thị một cái gì đó không bao giờ nên được thêm lại. Mã nhận xét LUÔN LUÔN phải được kèm theo một nhận xét cho biết lý do tại sao nó được nhận xét (và không chỉ bị xóa) và cung cấp thời gian tồn tại dự kiến ​​của mã được nhận xét. Ví dụ: "Đoạn mã sau gây hại nhiều hơn lợi, vì vậy sẽ bị đưa ra bình luận, nhưng cần được thay thế trước khi phát hành XXX."

Nhận xét như trên là phù hợp nếu bạn đang phân phối một hotfix để cầm máu cho khách hàng và bạn không có cơ hội ngay lập tức để tìm ra giải pháp cuối cùng. Sau khi gửi hotfix, mã được nhận xét là lời nhắc nhở rằng bạn vẫn còn điều gì đó cần sửa.

Khi nào tôi đăng ký mã bình luận? Một ví dụ là khi tôi đang lưỡng lự loại bỏ một thứ gì đó mà tôi nghĩ có khả năng cao sẽ phải được thêm lại trong tương lai gần, dưới một số hình thức. Mã đã nhận xét ở đó để phục vụ như một lời nhắc nhở trực tiếp rằng điều này chưa hoàn thành. Chắc chắn, phiên bản cũ nằm trong quyền kiểm soát nguồn và bạn có thể chỉ cần sử dụng nhận xét FIXME như một lá cờ rằng cần có thêm thứ gì đó. Tuy nhiên, đôi khi (nếu không thường xuyên) mã là nhận xét tốt hơn.

Ngoài ra, khi một lỗi được khắc phục bằng cách xóa một dòng (hoặc hiếm hơn là hai dòng) mã, đôi khi tôi sẽ chỉ nhận xét dòng bằng một bình luận để không bao giờ bật lại mã đó với lý do tại sao. Loại nhận xét này rõ ràng, trực tiếp và ngắn gọn.

Rex M đã nói: 1) Chỉ kiểm tra chức năng hoàn chỉnh, 2) [Nếu] nhiệm vụ quá lớn - hãy chia nó thành các nhiệm vụ hoàn thành nhỏ hơn.

Đáp lại: Vâng, đây là lý tưởng. Đôi khi cả hai lựa chọn đều không thể đạt được khi bạn đang làm việc trên mã sản xuất và gặp một vấn đề nghiêm trọng, tức thời cần khắc phục. Đôi khi để hoàn thành một nhiệm vụ, bạn cần đặt một phiên bản mã trong trường trong một thời gian. Điều này đặc biệt đúng đối với các thay đổi mã thu thập dữ liệu khi bạn đang cố gắng tìm ra nguyên nhân gốc rễ của sự cố.

Đối với trường hợp cụ thể đang được hỏi trong câu hỏi tổng quát hơn ... miễn là nhà phát triển đang kiểm tra mã được nhận xét vào một nhánh riêng mà không ai sẽ thấy ngoại trừ nhà phát triển đó (và có thể là người mà nhà phát triển đang cộng tác), nó ít gây hại. Nhưng nhà phát triển đó không bao giờ nên (gần như) cung cấp mã như vậy vào trung kế hoặc tương đương. Thân cây phải luôn được xây dựng và phải luôn hoạt động. Cung cấp mã chưa hoàn thành cho thân cây hầu như luôn luôn là một ý tưởng rất tồi. Nếu bạn để một nhà phát triển kiểm tra mã chưa hoàn thành hoặc mã tạm thời vào một nhánh riêng, thì bạn phải dựa vào nhà phát triển để không quên làm sạch mã trước khi chuyển vào thân cây.

Để làm rõ khi trả lời các nhận xét cho các câu trả lời khác, nếu mã được nhận xét ra và được đăng ký, tôi kỳ vọng rằng mã sẽ hoạt động nếu không ghi chú giảm xuống cùng với khoảng thời gian mã được nhận xét. Rõ ràng, các công cụ tái cấu trúc không phải lúc nào cũng bao gồm các nhận xét trong việc tái cấu trúc của chúng. Hầu như luôn luôn, nếu tôi đưa mã bình luận vào sản xuất, thì mã đó ở đó để phục vụ như một bình luận tinh tế, một cái gì đó cụ thể hơn văn xuôi, cần phải làm gì đó ở đó. Nó không phải là một cái gì đó nên có một cuộc sống lâu dài.

Cuối cùng, nếu bạn có thể tìm thấy mã được chú thích trong mọi tệp nguồn, thì có gì đó không ổn. Cung cấp mã đã nhận xét vào trung kế vì bất kỳ lý do gì sẽ là một sự kiện hiếm. Nếu điều này xảy ra thường xuyên, thì nó sẽ trở nên lộn xộn và mất giá trị.


4
@camh: Hệ thống theo dõi sự cố sẽ không cung cấp cùng ngữ cảnh như lời nhắc trong chính mã, theo ngữ cảnh, với nhận xét ngắn gọn về sự cố. Theo dõi vấn đề không được tích hợp sâu với IDE. Đề xuất của bạn loại bỏ nhiều thông tin vì lý do giáo điều.
Eddie

1
@John: Không, tôi làm việc với hàng triệu SLOC và hàng chục nghìn tệp nguồn. Nếu bạn cho rằng loại nhận xét mà tôi đang đề cập là lộn xộn, thì điều này có nghĩa là bạn không hiểu tôi và / hoặc tôi không đủ rõ ràng. Tôi đang nói về một trường hợp cạnh, không phải là một trường hợp phổ biến, như tôi đã nói nhiều lần trong các chủ đề để trả lời câu hỏi của bạn. Và này, cửa hàng của bạn không phải là cửa hàng không có chi nhánh tư nhân sao? Đừng kiêu ngạo với tôi.
Eddie

1
@John: Ví dụ: hãy xem nhận xét cuối cùng của tôi cho stackoverflow.com/questions/758279/… - và cung cấp cho tôi cách tốt hơn để ngăn chặn việc tái giới thiệu lỗi đó. Hoặc với @camh, hãy cho tôi biết cách một hệ thống theo dõi vấn đề sẽ ngăn chặn việc tái xuất hiện lỗi đó. Khi bạn làm việc trên thiết bị của 5-9 có nhiệm vụ quan trọng, những thứ như thế này rất quan trọng.
Eddie

1
@John: Làm thế nào để tôi không bị xúc phạm khi "Tôi có ấn tượng khác biệt khi bạn làm việc trên hầu hết là những thứ quy mô nhỏ"? aka, chỉ vì chúng ta bất đồng về một điều gì đó khá nhỏ, chắc tôi còn thiếu kinh nghiệm? Tất nhiên bạn luôn có quyền đưa ra ý kiến ​​của mình, và chúng tôi không đồng ý thì cũng tốt thôi. Nhưng hãy lưu ý khi tôi không đồng ý với bạn, tôi không chỉ trích mức độ kinh nghiệm của bạn chỉ vì chúng ta thấy mọi thứ khác nhau. Trên thực tế, tôi 98% hoặc 99% đồng ý với bạn. Tôi chỉ không thích chủ nghĩa tuyệt đối.
Eddie

1
@Eddie - Hiện thân của câu trả lời của bạn gần hơn nhiều so với việc đồng ý với những gì tôi cho là phương pháp hay nhất. Tuy nhiên, như thường lệ khi nói đến các phương pháp hay nhất, bạn sẽ không bao giờ nhận được sự đồng ý 100% từ mọi người rằng bất cứ điều gì cũng là phương pháp tốt nhất hợp pháp. Tôi không mong đợi khi tôi đăng câu hỏi của mình :)
John

15

Tôi nghĩ không bao giờ là một điều kiện quá mạnh.

Tôi có xu hướng nhận xét, đăng ký, chạy thử nghiệm, suy nghĩ và sau đó xóa nhận xét sau bản phát hành tiếp theo.


Nếu bạn chưa chạy các bài kiểm tra, thì bạn chưa nên kiểm tra nó. Đừng kiểm tra mã sẽ không thành công trong các bài kiểm tra hoặc phá vỡ bản dựng.
John Saunders

@John Saunders: Điều này phụ thuộc vào việc kiểm tra hoạt động gì trong hệ thống kiểm soát nguồn của bạn. Nếu bạn đang sử dụng một cái gì đó như ClearCase với UCM, thì các thẻ kiểm tra luôn nằm trên một nhánh riêng và cần có một bước riêng để chuyển sang tương đương với "TRUNK".
Eddie

Chính xác, nhưng rất tiếc là một số lượng lớn các nhà phát triển ngoài kia nghĩ rằng "cam kết" có nghĩa là "đưa các thay đổi vào thân cây", tôi đoán là nhờ CVS và SVN. Hệ thống May mắn thay mới như GIT đang giảng dạy phương pháp mới ...
pablo

@john, ý tôi là: comment out, test, checkin ..! Bạn nói đúng.
Fortyrunner

14

Nói chung, việc kiểm tra mã nhận xét là sai vì nó tạo ra sự nhầm lẫn giữa những người không phải là tác giả gốc và cần phải đọc hoặc sửa đổi mã. Trong mọi trường hợp, tác giả gốc thường bị nhầm lẫn về mã sau 3 tháng trôi qua.

Tôi tán thành niềm tin rằng mã thuộc về công ty hoặc nhóm và rằng bạn có trách nhiệm làm mọi thứ trở nên dễ dàng với các đồng nghiệp của mình. Kiểm tra mã đã nhận xét mà không thêm nhận xét về lý do tại sao nó được giữ lại tương đương với việc nói:

Tôi không phiền nếu bạn hoàn toàn bối rối về lý do tại sao những thứ này lại ở đây. Nhu cầu của tôi quan trọng hơn nhu cầu của bạn, đó là lý do tại sao tôi đã làm điều này. Tôi không cảm thấy cần phải thanh minh cho bạn hoặc bất kỳ ai khác, tại sao tôi lại làm điều này.

Đối với tôi, mã bình luận thường được coi là dấu hiệu của sự thiếu tôn trọng từ một đồng nghiệp kém chu đáo.


3
Dòng cuối cùng của bài đăng của bạn đã chết. Tôi ước tôi có thể bỏ phiếu cho bạn nhiều hơn một lần
MikeJ

2
Đôi khi những gì thuận tiện cho bạn không phải là điều cần cân nhắc duy nhất. Tất nhiên, một trong những trách nhiệm quan trọng đối với một nhà phát triển là làm cho mọi thứ trở nên dễ dàng với các nhà phát triển trong tương lai, nhưng điều đó phải cạnh tranh với các lợi ích khác. Nhìn vào thứ gì đó hơi bất tiện và ngay lập tức cho rằng nó được thêm vào chỉ để chọc tức bạn cho thấy một thái độ rất tự trọng của bạn.
Andrew Shelansky

6

Tôi hoàn toàn đồng ý với nguyên tắc rằng không nên đăng nhập mã đã nhận xét. Hệ thống kiểm soát nguồn là một tài nguyên được chia sẻ và đồng nghiệp của bạn, ở một mức độ nào đó, sử dụng nó như một tập giấy nháp cá nhân của mình. Điều này không được chú ý nhiều đối với những người dùng khác, đặc biệt nếu bạn đăng ký ý tưởng về quyền sở hữu chung đối với cơ sở mã.

Nhà phát triển tiếp theo nhìn thấy mã được nhận xét đó sẽ không biết rằng đó là một công việc đang được tiến hành. Anh ta có tự do thay đổi nó không? Nó là mã chết? Anh ấy không biết.

Nếu thay đổi của đồng nghiệp của bạn không ở trạng thái có thể kiểm tra được, anh ấy cần phải hoàn thành thay đổi đó và / hoặc học cách thực hiện những thay đổi nhỏ hơn, gia tăng.

"Kiểm tra các thay đổi từng phần có thể được triển khai hoặc không" - có lẽ điều đó cũng có nghĩa là có thể hoặc không thể kiểm tra? Đó là một con dốc trơn trượt đến một cơ sở mã rất chằng chịt.


6

Khi bạn cần thêm một tính năng nhỏ hoặc sửa lỗi như NGAY BÂY GIỜ, trong vòng 3 phút tới và bạn phải sửa một tệp mà bạn có một nửa mã đã phát triển trên đó, tôi sẽ nói rằng không sao cả, nhu cầu thực tế sẽ thống trị những lý tưởng thực dụng trên chiến trường.


Quản lý thay đổi phù hợp với kịch bản này ở đâu? Tôi đồng ý rằng có những cửa hàng mà mọi thứ luôn luôn xảy ra hỏa hoạn lớn nhưng nó không có nghĩa là mọi thứ nên được thực hiện theo cách đó. Tôi cũng gợi ý rằng nó có thể là một lý do cho vấn đề. Không đủ quyền kiểm soát cơ sở mã.
John

1
Tôi hoàn toàn đồng ý loại điều này NÊN tránh, nhưng vì một số lý do, quản lý dường như không đồng ý :)
Robert Gould

5

Điều này cho thấy sự khác biệt cơ bản trong hai trường phái suy nghĩ: Những người chỉ kiểm tra mã làm việc mà họ hài lòng và cảm thấy đáng được lưu, và những người kiểm tra công việc của họ để kiểm soát sửa đổi ở đó để ngăn chặn việc mất dữ liệu.

Tôi mô tả cái sau là "những người thích sử dụng hệ thống kiểm soát sửa đổi của họ như một bản sao lưu băng của người nghèo", nhưng điều đó sẽ khiến tôi không biết tôi đang ở trại nào. :-)

Tôi đoán là bạn thuộc trại "mã tốt", còn anh ta thuộc trại "mã làm việc".

[BIÊN TẬP]

Từ các ý kiến, vâng, tôi đã đoán đúng.

Như tôi đã nói, tôi đi cùng bạn, nhưng gần như tôi có thể nói rằng đây là một ý kiến ​​thiểu số, cả ở đây trên stackoverflow và nơi tôi làm việc. Như vậy, tôi không nghĩ rằng bạn thực sự có thể ghi nó vào các tiêu chuẩn phát triển của mình như một cách duy nhất để vận hành. Không nếu bạn muốn các tiêu chuẩn được tuân theo. Một điều mà một nhà lãnh đạo giỏi biết là không bao giờ ra lệnh mà họ biết sẽ không được tuân theo.

btw: Các biên tập viên giỏi sẽ giúp giữ các phiên bản cũ. Ví dụ: trong Emacs, tôi đặt phiên bản cũ và phiên bản cũ thành 10, điều này sẽ giữ khoảng 10 lần lưu tệp cuối cùng của tôi. Bạn có thể xem xét điều đó như một cách để giúp lập luận của bạn chống lại đám đông kiểm soát sửa đổi-như-dự phòng. Tuy nhiên, bạn sẽ không bao giờ thắng trong cuộc tranh cãi.


1
Điều này cũng đã được nêu ở đây. Tuy nhiên, theo suy nghĩ của tôi, kho lưu trữ không phải là một công cụ ngăn ngừa mất dữ liệu. Nó là một hệ thống kiểm soát sửa đổi. Vì chúng tôi đang sử dụng TFS nên anh ta có thể sử dụng giá đỡ để sao lưu mã chưa hoàn chỉnh. Anh ta cũng có thể sử dụng công cụ sao lưu hoặc đặt mã trên một chia sẻ được sao lưu.
John

1
Bản sao lưu IDE không bảo vệ khỏi mất dữ liệu. Hệ thống sao lưu của công ty không phải lúc nào cũng đáp ứng được nhu cầu mất dữ liệu mã. Kiểm soát nguồn là một hệ thống có thể dễ dàng xử lý cả hai nhu cầu. Tương đối dễ dàng để phát triển một chính sách đáp ứng nhu cầu của cả hai phe thay vì loại trừ phe này hay phe kia.
James Schek

Các bản sao lưu Emacs của tôi không bảo vệ tôi theo cách nào, James? BTW: Tôi hoàn toàn đồng ý với câu cuối cùng của bạn.
TED

Bản sao lưu Emacs được dùng để hoàn nguyên về trạng thái trước đó trên một tệp cụ thể. Hướng các tệp sao lưu tới máy chủ tệp không được bật theo mặc định và yêu cầu tôi yêu cầu sysadmin cho dung lượng trên máy chủ tệp. Nếu tôi có một FS, tôi sẽ chuyển toàn bộ dự án cho FS và hoàn thành nó. Hơn nữa, "trạng thái" hoàn chỉnh của không gian làm việc / dự án là "dữ liệu" quan trọng đối với tôi. Emacs (và hầu hết các IDE) không có cơ chế để lưu điều đó.
James Schek

@ ted.dennison: Nhìn vào điểm số của hai câu trả lời hàng đầu, tôi sẽ nói rằng ý kiến ​​của bạn là ý kiến đa số về SO.
Eddie

4

Theo kinh nghiệm của tôi, các thiết bị chuyển mạch của nhà phát triển được nhận xét ra mã.

Đôi khi, back-end mới được xây dựng song song, với các công tắc kích hoạt được ghi chú trong điều khiển nguồn.

Một số tính năng kỳ lạ chúng ta cần một lần trên mặt trăng xanh nhưng không khách hàng nào cần thường được triển khai theo cách đó. Những thứ này thường mang rủi ro cao về bảo mật hoặc bỏ qua tính toàn vẹn dữ liệu, vì vậy chúng tôi không muốn chúng hoạt động bên ngoài quá trình phát triển. Yêu cầu một nhà phát triển sử dụng nó để bỏ ghi chú mã trước có vẻ là cách dễ nhất để lấy nó.


4

Một lý do khác cho mã đã nhận xét đã đăng ký:

Bạn đang sửa đổi mã hiện có và tìm thấy một lỗi nhỏ, một lỗi rất dễ bỏ qua và có lẽ ngay cả khi nhìn sơ qua cũng có thể đúng. Nhận xét nó ra, đặt bản sửa lỗi vào vị trí của nó và thêm nhận xét về những gì đang xảy ra và lý do nó được sửa đổi. Kiểm tra điều đó để nhận xét của bạn về bản sửa lỗi có trong kho lưu trữ.


5
+1: Để nguyên mã đã nhận xét - nếu và chỉ khi nó ngắn gọn và không phô trương - ngăn ai đó quên "đừng làm điều này" và giới thiệu lại lỗi. ĐẶC BIỆT khi bản sửa lỗi liên quan đến việc xóa các dòng mã, không viết lại các dòng mã.
Eddie

Chắc chắn là trên các dòng mã loại bỏ. Đó là một điểm hay.
thursdaysgeek

1
Tôi không đồng ý. Để lại nhận xét về những điều cần tránh là cần thiết, nhưng không phải ở dạng mã, thay vì mô tả nó bằng lời.
thSoft

3

Có lẽ câu hỏi thực sự ở đây là liệu các nhà phát triển có nên được phép kiểm tra mã chưa hoàn chỉnh hay không?

Thực tiễn này dường như mâu thuẫn với mục tiêu đã nêu của bạn là thực hiện tích hợp liên tục.


3

Nó phụ thuộc. Nếu nó được để ở đó cho mục đích minh họa, có thể. Nó có thể hữu ích trong quá trình tái cấu trúc. Nếu không, và nói chung, không. Ngoài ra, bình luận về mã chưa hoàn thành chắc chắn sẽ dễ bị lỗi và mất thời gian. Tốt hơn là anh ta nên chia mã thành các phần nhỏ hơn và kiểm tra chúng khi chúng hoạt động.


3

Quan điểm của tôi: nếu các nhà phát triển đang làm việc trên các chi nhánh của riêng họ hoặc trong khu vực hộp cát của riêng họ, thì họ có thể đăng ký bất cứ thứ gì họ muốn. Đó là khi họ kiểm tra mã vào một nhánh chia sẻ (một nhánh tính năng, hoặc một nhánh của nhóm, hoặc tất nhiên là CHÍNH / thân cây) thì mã đó phải nguyên bản nhất có thể (không có mã nhận xét, không có thêm FIXME, v.v.).


3
Không có một dự án có ý nghĩa nào trên thế giới mà không có TODOs và FIXME hoặc HACK trong trung kế chính. Hãy mơ đi.
Robert Gould

1
@Robert chỉ vì nó xảy ra nhiều không có nghĩa là chúng ta không nên cố tránh nó.
Rex M

2
Wow, đây thực sự là một giấc mơ. Mã sản xuất không có FIXMEs? Nó phải hoàn toàn có tính năng hoàn chỉnh, không có lỗi và không có hành vi không giải thích được. Chờ đã, mã như vậy không tồn tại! :)
Eddie

1
Vâng, rõ ràng là một giấc mơ - tôi chỉ đang cố gắng nói rằng tiêu chuẩn để cam kết vào một nhánh chia sẻ cao hơn nhiều so với cam kết vào hộp cát cá nhân / nhánh đang tiến hành của bạn.
jean

@jean: Vâng, chúng tôi hoàn toàn đồng ý về điều đó.
Eddie

2

Tôi nghĩ "Không bao giờ" là một quy tắc quá mạnh. Tôi muốn bỏ phiếu để bỏ qua một số thời gian cá nhân xung quanh việc mọi người có kiểm tra mã đã nhận xét trong kho lưu trữ hay không. Mục tiêu cuối cùng phải là năng suất lập trình viên, không phải là "một kho lưu trữ nguyên sơ".

Để cân bằng sự lỏng lẻo đó, hãy đảm bảo rằng mọi người đều biết rằng mã đã nhận xét có ngày hết hạn. Bất kỳ ai cũng được phép xóa mã đã nhận xét nếu nó đã tồn tại cả tuần và chưa bao giờ hoạt động. (Thay "một tuần" bằng bất cứ điều gì bạn cảm thấy phù hợp.) Bằng cách đó, bạn có quyền loại bỏ sự lộn xộn khi bạn nhìn thấy nó, mà không can thiệp quá trực tiếp vào phong cách cá nhân của mọi người.


2

Tôi hoàn toàn đồng ý rằng không nên kiểm tra mã đã nhận xét vào kho lưu trữ, đó là mục đích kiểm soát mã nguồn.

Theo kinh nghiệm của tôi khi một lập trình viên kiểm tra mã đã nhận xét, đó là bởi vì anh ấy / cô ấy không chắc đâu là giải pháp phù hợp và hạnh phúc hơn khi để giải pháp thay thế trong nguồn với hy vọng rằng ai đó sẽ đưa ra quyết định đó.

Tôi thấy nó làm phức tạp mã và làm cho nó khó đọc.

Tôi không gặp vấn đề gì với việc kiểm tra một nửa mã đã hoàn thành (vì vậy bạn sẽ có được lợi ích của việc kiểm soát nguồn) mà hệ thống trực tiếp không gọi. Vấn đề của tôi là với việc tìm kiếm các phần của mã được nhận xét mà không có lời giải thích, tình huống tiến thoái lưỡng nan đã dẫn đến mã bị loại trừ.


2

Tôi nghĩ rằng việc đăng ký mã nhận xét trong hệ thống kiểm soát mã nguồn nên được thực hiện hết sức thận trọng, đặc biệt nếu các thẻ ngôn ngữ được sử dụng để nhận xét mã được viết bởi các khối, tức là:

/* My commented code start here
My commented code line 1
My commented code line 2
*/

Thay vì trên cơ sở từng dòng riêng lẻ, như:

// My commented code start here
// My commented code line 1
// My commented code line 2

(bạn có ý tưởng)

Lý do tôi cần hết sức thận trọng là tùy thuộc vào công nghệ, bạn nên rất cẩn thận về công cụ khác biệt / hợp nhất mà bạn đang sử dụng. Với hệ thống kiểm soát mã nguồn nhất định và ngôn ngữ nhất định, công cụ khác biệt / hợp nhất có thể dễ bị nhầm lẫn. Ví dụ, sự khác biệt / hợp nhất tiêu chuẩn của ClearCase nổi tiếng là không tốt cho việc hợp nhất các tệp .xml.

Nếu xảy ra trường hợp các dòng chặn nhận xét không được hợp nhất đúng cách, trước khi mã của bạn sẽ hoạt động trong hệ thống khi không nên. Nếu mã không đầy đủ và phá vỡ bản dựng, đó có lẽ là điều ít ác nhất, vì bạn sẽ phát hiện ra nó ngay lập tức.

Nhưng nếu mã vượt qua bản dựng, nó có thể hoạt động khi không nên ở đó, và từ góc độ CM, đó có thể là một kịch bản ác mộng. QA thường kiểm tra những gì nên có ở đó, họ không kiểm tra mã không được cho là có ở đó, vì vậy mã của bạn có thể kết thúc trong quá trình sản xuất trước khi bạn biết và đến thời điểm nó sẽ được nhận ra mã ở đó khi nó không nên, chi phí bảo trì tăng gấp nhiều lần (vì "lỗi" sẽ được phát hiện trong quá trình sản xuất hoặc khách hàng, địa điểm hoặc thời gian tồi tệ nhất từ ​​trước đến nay).


Vâng tôi đồng ý. Chúng tôi cũng đã đặc biệt không cho phép kiểu bình luận / * * / trong tất cả các chương trình C # của chúng tôi.
John

2

Ý tưởng cho phép lịch sử kiểm soát nguồn minh họa "cách cũ" của việc làm điều gì đó thay vì nhận xét nó và kiểm tra trong phần nhận xét cùng với giải thích là một ý tưởng hay về lý thuyết.

Tuy nhiên, trong thế giới thực, không ai từng xem lịch sử kiểm soát nguồn trên các tệp mà họ đang làm việc trừ khi đó là một phần của quy trình đánh giá chính thức thuộc một số loại (chỉ được thực hiện định kỳ) hoặc nếu điều gì đó không hoạt động và nhà phát triển không thể tìm ra lý do tại sao.

Ngay cả sau đó, nhìn lại nhiều hơn khoảng 3 phiên bản về cơ bản không bao giờ xảy ra.

Một phần, điều này là do các hệ thống kiểm soát nguồn không làm cho loại đánh giá thông thường này trở nên dễ dàng. Thông thường, bạn phải kiểm tra một phiên bản cũ hoặc khác với một phiên bản cũ, bạn chỉ thấy hai phiên bản và không có cái nhìn ngắn gọn tốt về những gì đã thay đổi có thể cho bạn một cái nhìn thoáng qua về những gì đã thay đổi.

Một phần, đó là sự kết hợp giữa bản chất con người và nhu cầu của đội. Nếu tôi phải sửa điều gì đó và tôi có thể sửa nó trong vài giờ, tôi sẽ không dành một giờ để điều tra các phiên bản mã cũ chưa "tồn tại" trong một tháng (điều này với mỗi nhà phát triển sẽ kiểm tra thường, có nghĩa là quay lại nhiều lần sửa đổi), trừ khi tôi tình cờ biết rằng có điều gì đó trong đó (chẳng hạn như nếu tôi nhớ một cuộc thảo luận về việc thay đổi điều gì đó liên quan đến những gì tôi đang làm bây giờ).

Nếu mã bị xóa và được kiểm tra lại, thì đối với tất cả các ý định và mục đích (ngoại trừ mục đích giới hạn là khôi phục hoàn toàn), mã sẽ không còn tồn tại. Có, nó ở đó cho mục đích sao lưu, nhưng nếu không có một người trong vai trò thủ thư mã, nó sẽ bị mất.

Cây kiểm soát nguồn trong dự án hiện tại của tôi đã được khoảng 10 tuần tuổi, trong một nhóm chỉ có khoảng 4 kỹ sư và có khoảng 200 danh sách thay đổi được cam kết. Tôi biết rằng nhóm của tôi không làm tốt công việc như lẽ ra phải đăng ký ngay khi có điều gì đó chắc chắn và sẵn sàng để đi. Điều đó làm cho nó khá khó khăn khi dựa vào việc đọc lịch sử mã cho mọi phần của mã để nắm bắt mọi thay đổi quan trọng.

Hiện tại, tôi đang làm việc trên một dự án ở chế độ phát triển ban đầu, rất khác với một dự án ở chế độ bảo trì. Nhiều công cụ giống nhau được sử dụng trong cả hai môi trường, nhưng nhu cầu khác nhau khá nhiều. Ví dụ: thường có một nhiệm vụ yêu cầu hai hoặc nhiều kỹ sư làm việc chặt chẽ với nhau để xây dựng một thứ gì đó (giả sử một máy khách và một máy chủ nào đó).

Nếu tôi đang viết máy chủ, tôi có thể viết mã cho giao diện nháp mà máy khách sẽ sử dụng và kiểm tra nó ở trạng thái hoàn toàn không hoạt động, để kỹ sư viết máy khách có thể cập nhật. Điều này là do chúng tôi có chính sách nói rằng cách duy nhất để gửi mã từ kỹ sư này sang kỹ sư khác là thông qua hệ thống kiểm soát nguồn.

Nếu nhiệm vụ diễn ra đủ lâu, có lẽ nên tạo một chi nhánh để hai chúng tôi cùng làm việc (mặc dù điều đó trái với chính sách trong tổ chức của tôi - các kỹ sư và trưởng nhóm cá nhân không có quyền cần thiết đối với máy chủ điều khiển nguồn). Cuối cùng, đó là một sự đánh đổi, đó là lý do tại sao chúng tôi cố gắng không đưa ra quá nhiều chính sách "luôn luôn" hoặc "không bao giờ".

Tôi có thể sẽ phản ứng với chính sách không-bình-luận-code-bao-giờ như vậy bằng cách nói rằng nó hơi ngây thơ. Có chủ đích tốt, có lẽ, nhưng cuối cùng không đạt được mục đích của nó.

Mặc dù nhìn thấy bài đăng này nhưng tôi sẽ quay lại mã mà tôi đã kiểm tra vào tuần trước và xóa phần nhận xét chưa bao giờ là cuối cùng (mặc dù nó đã hoạt động) và cũng không bao giờ có khả năng được mong muốn nữa.


Tại sao rất ít người đồng ý với những lập luận này?
pabrams

2

Tôi nghĩ rằng mã bình luận ra được coi là "lãng phí".

Tôi cho rằng bạn đang làm việc trong môi trường đồng đội. Nếu bạn đang làm việc một mình và bạn nhận xét mã bằng 'việc cần làm' và bạn sẽ quay lại với nó thì điều đó đã khác. Nhưng trong môi trường nhóm, bạn có thể yên tâm cho rằng một khi mã đã nhận xét được kiểm tra, nó sẽ ở lại và nó rất có thể sẽ gây ra nhiều đau đớn hơn là sự hài lòng.

Nếu bạn đang thực hiện đánh giá mã ngang hàng thì nó có thể trả lời câu hỏi của bạn. Nếu một nhà phát triển khác đánh giá mã của bạn và nói "tại sao lại có mã được nhận xét này đang cố gắng thực hiện 'blah'" thì mã của bạn đã không thành công trong quá trình xem xét mã và bạn không nên kiểm tra nó.

Mã được nhận xét sẽ chỉ đặt ra câu hỏi với các nhà phát triển khác - do đó lãng phí thời gian và năng lượng.

Bạn cần đặt câu hỏi " tại sao " mã được nhận xét. Một số gợi ý:

Nếu bạn đang bình luận về mã vì bạn "không chắc chắn về các quy tắc kinh doanh" thì có thể bạn đang gặp vấn đề với "phạm vi creep" - tốt nhất đừng làm bẩn cơ sở mã của bạn với các yêu cầu "sẽ rất tốt nhưng chúng tôi không có thời gian để thực hiện "- giữ cho nó sạch sẽ với mã rõ ràng và các thử nghiệm xung quanh những gì thực sự ở đó.

Nếu bạn đang nhận xét mã vì bạn "không chắc đó có phải là cách tốt nhất để làm điều đó hay không" thì hãy nhờ đồng nghiệp mã của bạn xem xét! Thời đại đang thay đổi, bạn sẽ nhìn vào đoạn mã bạn viết ngày hôm nay sau 2 năm và nghĩ rằng nó thật kinh khủng! Nhưng bạn không thể đi bình luận những điều mà bạn 'biết' có thể được thực hiện tốt hơn nhưng bạn không thể tìm ra cách ngay bây giờ. Hãy để bất cứ ai duy trì codebase lâu dài xác định xem có cách nào tốt hơn hay không - chỉ cần viết mã, kiểm tra và làm việc và tiếp tục.

Nếu bạn đang bình luận về mã vì "cái gì đó không hoạt động" thì hãy KHẮC PHỤC NÓ ! Một kịch bản phổ biến là "kiểm tra hỏng" hoặc "việc cần làm" . Nếu bạn có những thứ này, bạn sẽ tiết kiệm được rất nhiều thời gian bằng cách sửa chữa chúng hoặc chỉ cần loại bỏ chúng. Nếu chúng có thể bị "hỏng" trong một khoảng thời gian, rất có thể chúng sẽ bị hỏng vĩnh viễn.

Tất cả những kịch bản tiềm năng này (và những kịch bản tôi chưa đề cập ở đây) đều bị lãng phí thời gian và công sức. Mã được nhận xét có vẻ như là một vấn đề nhỏ nhưng có thể là một chỉ báo cho một vấn đề lớn hơn trong nhóm của bạn.


1

Kho lưu trữ là bản sao lưu của mã. Nếu tôi đang làm việc trên mã nhưng nó chưa hoàn thành, tại sao không bình luận nó ra và kiểm tra nó vào cuối ngày. Bằng cách đó, nếu ổ cứng của tôi chết qua đêm, tôi sẽ không mất công. Tôi có thể kiểm tra mã vào buổi sáng và bỏ ghi chú nó và tiếp tục.

Lý do duy nhất tôi muốn bình luận nó là bởi vì tôi không muốn phá vỡ cấu trúc chỉ sau một đêm.


Kho lưu trữ là một hệ thống kiểm soát phiên bản không phải là một công cụ sao lưu trong suy nghĩ của tôi.
John

@John: Nhiều nhà phát triển sẽ xem nó như cả hai.
Eddie

@Eddie, họ sẽ làm được, nhưng không phải vậy. Đối với sao lưu, có tất cả các loại tùy chọn tốt, kiểm soát phiên bản không thực sự là một trong số chúng, phải không?
David nói hãy phục hồi Monica vào

@ricebowl: Tôi không nói rằng tôi đồng ý với những nhà phát triển đó! Nhiều nơi sẽ không trả tiền để sao lưu hộp của từng nhà phát triển. Kiểm tra công việc chưa hoàn thành cho một chi nhánh tư nhân trước khi đi nghỉ dài hạn có chức năng như một bản sao lưu tốt cho công việc đã hoàn thành cho đến nay. Các nhà phát triển thực dụng.
Eddie

1

Rõ ràng có một sự căng thẳng giữa 1) đăng ký sớm và 2) luôn duy trì kho lưu trữ ở trạng thái hoạt động. Nếu bạn có nhiều hơn một vài nhà phát triển, thì cái sau sẽ được ưu tiên ngày càng tăng, bởi vì bạn không thể có một nhà phát triển nhồi nhét tất cả những người khác vào quy trình làm việc cá nhân của mình. Điều đó nói rằng , bạn không nên đánh giá thấp giá trị của nguyên tắc đầu tiên. Các nhà phát triển sử dụng tất cả các loại cột rào tinh thần khác nhau và quy trình làm việc được cá nhân hóa là một cách mà các nhà phát triển tuyệt vời loại bỏ những dấu X bổ sung đó. Là một nhà quản lý, công việc của bạn không phải là cố gắng hiểu tất cả những sắc thái này - điều mà bạn sẽ thất bại trừ khi bạn là một thiên tài và tất cả các nhà phát triển của bạn đều là những kẻ ngốc - mà là tạo điều kiện cho các nhà phát triển của bạn trở thành những người giỏi nhất có thể thông qua việc ra quyết định của riêng họ.

Bạn đề cập trong bình luận rằng bạn không sử dụng nhánh riêng. Câu hỏi của tôi dành cho bạn là tại sao không? Được rồi, tôi không biết gì về TFS, vì vậy có lẽ có lý do chính đáng. Tuy nhiên, sau khi sử dụng git trong một năm, tôi phải nói rằng một DVCS tốt hoàn toàn làm giảm căng thẳng này. Có những trường hợp tôi thấy bình luận về mã sẽ hữu ích khi tôi đang xây dựng một mã thay thế, nhưng tôi sẽ mất ngủ vì nó nếu tôi gây ra nó cho người khác. Có thể phân nhánh cục bộ có nghĩa là tôi có thể giữ các cam kết có ý nghĩa cho quy trình cá nhân của mình mà không cần phải lo lắng về (hoặc thậm chí thông báo) cho các nhà phát triển hạ nguồn về những rắc rối tạm thời.


Lý do chúng tôi không sử dụng các nhánh riêng là vì chúng tôi chỉ mới bắt đầu sử dụng kiểm soát nguồn gần đây. Tôi còn rất mới đối với công ty và tôi có trách nhiệm giúp giải quyết tất cả những điều này. Tôi không đồng ý với khái niệm này nhưng hiện tại chúng tôi sử dụng giá đỡ trong TFS để thay thế.
John

1

Chỉ vang lên điệp khúc. Từ chối điều này bằng mọi giá. Nó làm cho mã khó đọc hơn và khiến mọi người tự hỏi điều gì tốt / xấu về mã đó thậm chí không phải là một phần của ứng dụng vào thời điểm hiện tại. Bạn luôn có thể tìm thấy các thay đổi bằng cách so sánh các bản sửa đổi. Nếu có một số cuộc phẫu thuật lớn và mã đã được nhận xét rõ ràng, nhà phát triển nên ghi chú nó trong ghi chú sửa đổi về đăng ký / hợp nhất.

mã không đầy đủ / thử nghiệm nên nằm trong một nhánh được phát triển để hoàn thành. head / trunk phải là dòng chính luôn biên dịch và vận chuyển là gì. khi nhánh thử nghiệm hoàn tất, nó / được chấp nhận, nó nên được hợp nhất vào dòng tiêu đề / chính. Thậm chí còn có tiêu chuẩn IEEE (IEEE 1042) mô tả điều này nếu bạn cần tài liệu hỗ trợ.


Chủ yếu là đồng ý. Nhưng bạn sẽ làm gì khi cần gửi mã thử nghiệm vì bạn đang cố gắng xác định nguyên nhân gốc rễ của sự cố của trang web? Khi nói về phát triển, tôi đồng ý với bạn, nhưng khi nói về hỗ trợ, đôi khi bạn cần gửi mã thử nghiệm.
Eddie

@Eddie - Tôi đồng ý với việc mã thử nghiệm cần được giao hàng theo thời gian. Nhưng nó không nên được bình luận ra khi nó không còn cần thiết theo quan điểm của tôi.
John

@Eddie - tôi hiểu. nhưng nhánh là một bản sao hoàn chỉnh của phiên bản head / release tại thời điểm bạn tạo nhánh. nếu bạn thực hiện một bản sửa đổi, nó phải có thể xây dựng / có thể chuyển đổi. nếu bạn thích những thay đổi trong nhánh, bạn sẽ hợp nhất chúng trở lại phần đầu hoặc bạn giữ nó thuận tiện cho việc gỡ lỗi / cấu hình khi cần thiết.
MikeJ

@John: Hoàn toàn đồng ý. Khi mã thử nghiệm không còn là thử nghiệm nữa, nó nên được giữ nguyên hoặc xóa hoàn toàn, tùy theo điều kiện nào phù hợp. @MikeJ: Phản hồi tốt.
Eddie

1

Tôi muốn thấy mã có thể bị hỏng, có thể truy cập được nhưng chưa được sử dụng để đăng ký hơn là mã hoàn toàn không khả dụng. Vì tất cả các phần mềm điều khiển phiên bản đều cho phép một số loại 'bản sao làm việc' tách biệt khỏi thân cây, nên sử dụng các tính năng đó thực sự tốt hơn nhiều.

Mã mới, không chức năng trong cốp cũng được, vì nó mới. Nó có thể không phá vỡ bất cứ điều gì đã hoạt động. Nếu nó phá vỡ mã làm việc, thì nó chỉ nên đi vào một nhánh để các nhà phát triển khác có thể (nếu họ cần) kiểm tra nhánh đó và xem cái gì bị hỏng.


1

" Scar Tissue " là những gì tôi gọi là mã đã nhận xét. Trong những ngày trước khi hệ thống kiểm soát phiên bản được sử dụng rộng rãi, Code Monkeys sẽ để lại mã nhận xét trong tệp trong trường hợp chúng cần khôi phục chức năng.

Thời gian duy nhất có thể chấp nhận đăng ký "mô sẹo" là

  1. Nếu bạn có một chi nhánh riêng
  2. Bạn không có thời gian để biên dịch mã mà không có lỗi
  3. Bạn đang đi nghỉ dài ngày
  4. Bạn không tin tưởng VCS của mình, chẳng hạn như nếu bạn sử dụng Nguồn trực quan An toàn HOẶC .
    [BIÊN TẬP]
  5. Bạn có một lỗi nhỏ có thể được giới thiệu lại nếu mã không chính xác không được để lại như một lời nhắc. (điểm tốt từ các câu trả lời khác).

Hầu như không có lý do gì cho # 4 vì có rất nhiều hệ thống VCS mạnh mẽ và miễn phí xung quanh, Git là ví dụ điển hình nhất .

Nếu không, hãy để VCS là nhà phân phối mã và kho lưu trữ của bạn. Nếu một nhà phát triển khác muốn xem mã của bạn, hãy gửi email cho họ về điểm khác biệt và để họ áp dụng trực tiếp những thứ họ muốn. Trong bất kỳ trường hợp nào, việc hợp nhất không quan tâm đến lý do hoặc cách mã hóa của hai tệp khác nhau.

Bởi vì nó là mã, mô sẹo có thể gây mất tập trung hơn cả một nhận xét được viết tốt. Về bản chất của nó là mã, bạn khiến lập trình viên bảo trì phải tiêu tốn chu kỳ cpu tinh thần để tìm ra liệu mô sẹo có liên quan gì đến những thay đổi của anh ta hay không. Không quan trọng là vết sẹo đã 1 tuần tuổi hay 10 năm tuổi, việc để lại mô sẹo trong mã tạo ra gánh nặng cho những người phải giải mã mật mã.

[EDIT] Tôi muốn nói thêm rằng có hai tình huống chính cần được phân biệt:

  • phát triển tư nhân, viết mã một dự án cá nhân hoặc đăng ký vào một chi nhánh tư nhân
  • Phát triển bảo trì, trong đó mã đang được kiểm tra được dự định đưa vào sản xuất.

Chỉ cần nói "KHÔNG" với mô sẹo!


-1 Mã nhận xét rất hữu ích để hiểu mục đích của một hàm. Trong một thế giới hoàn hảo, mọi người đều để lại những bình luận tuyệt vời cho điều này. Nhưng trong thế giới thực, tôi thấy mã nhận xét rất hữu ích và Andrew Shelansky đã chỉ ra lý do tại sao tôi không muốn phải tra cứu nó trong kiểm soát nguồn.
Brandon Moore

0

Tôi không biết - tôi luôn nhận xét những dòng ban đầu trước khi tôi thực hiện thay đổi - nó giúp tôi hoàn nguyên chúng nếu tôi thay đổi ý định. Và có, tôi kiểm tra chúng.

Tuy nhiên, tôi sẽ loại bỏ mọi mã nhận xét cũ từ lần đăng ký trước.

Tôi biết mình có thể xem các bản ghi khác biệt để xem những gì đã thay đổi nhưng thật là khó - thật tuyệt khi thấy những thay đổi cuối cùng ngay trong mã.


1
Có lẽ bạn cần các công cụ khác biệt tốt hơn?
jw.

Một lý do để không làm điều đó là để bạn có thể thấy ai đã viết dòng gốc một cách tầm thường (ví dụ: git đổ lỗi)
gtd

Rất tiếc. Đối với tôi, điều này tương tự như nói "Tôi luôn xả nước trước khi đi vệ sinh. Nhưng không phải sau đó."
benjismith

0

Một sự thỏa hiệp tốt đẹp là viết một công cụ nhỏ để lưu các tệp đã kiểm tra / sửa đổi của bạn vào ổ đĩa sao lưu mạng. Bằng cách đó, bạn có thể sửa đổi nội dung trái tim của mình và sao lưu công việc của bạn, nhưng bạn không bao giờ phải kiểm tra mã thử nghiệm hoặc chưa hoàn thành.


0

Tôi nghĩ rằng mã đăng ký đã nhận xét phải hợp lệ, chỉ vì thay đổi mới đã vượt qua các thử nghiệm nên có thể hữu ích hơn khi xem những gì đã có trước đó và xem liệu thay đổi mới có thực sự là một cải tiến hay không.

Nếu tôi phải quay lại nhiều phiên bản để xem một thay đổi trước đó dẫn đến một cú đánh hiệu suất thì điều đó sẽ rất khó chịu.

Đôi khi mã được nhận xét là một lịch sử tốt, nhưng, hãy đặt ngày khi mã được nhận xét. Sau đó, một người nào đó đang làm việc gần đó có thể xóa mã đã nhận xét vì nó đã được chứng minh là không cần thiết.

Cũng sẽ rất tốt nếu biết ai đã bình luận về đoạn mã đó để nếu cần một số lý do cần thiết thì họ có thể được hỏi.

Tôi thích viết chức năng mới, đảm bảo các bài kiểm tra đơn vị vượt qua, kiểm tra nó, sau đó cho phép người khác sử dụng nó và xem nó hoạt động như thế nào.


Nếu bạn có cả một nhóm người đang phát triển và sau đó duy trì mã theo cách này, nó sẽ nhanh chóng trở nên không thể đọc được. Với hệ thống kiểm soát phiên bản phù hợp, bạn có thể dễ dàng tìm thấy sự khác biệt giữa các phiên bản tùy ý.
Eddie

0

Nếu nhà phát triển đã nhận xét ra một số mã vì nó vẫn chưa hoàn tất, thì giá trị đúng "kiểm soát nguồn" cách để đối phó với điều này sẽ cho rằng nhà phát triển để giữ nó trong một nhánh riêng biệt của riêng mình, cho đến khi mã mà sẵn sàng để kiểm tra trong.

Với một DVCS (như git, bazaar, hoặc tensurial), điều này rất dễ dàng vì nó không yêu cầu thay đổi trong kho lưu trữ trung tâm. Nếu không, có lẽ bạn có thể nói về việc cung cấp cho các nhà phát triển các chi nhánh của riêng họ trên máy chủ nếu họ đang làm việc trên các tính năng cụ thể sẽ khiến họ mất một thời gian đủ dài (tức là nhiều ngày).

Không có gì sai khi kiểm tra mã đã nhận xét trong một số tình huống, chỉ là đây là một tình huống có thể có cách tốt hơn để làm điều đó, vì vậy nhà phát triển có thể theo dõi các thay đổi đối với nguồn của mình ngay cả khi nó chưa sẵn sàng. đã đăng ký vào kho lưu trữ chính.


0

Rõ ràng, nhà phát triển đang kiểm tra mã nhận xét phải làm việc trong một nhánh riêng biệt, hợp nhất các thay đổi từ nhánh thân là điều cần thiết.

Hệ thống VCS phụ thuộc vào hệ thống VCS để hỗ trợ nhà phát triển trong quy trình làm việc này (git là một hệ thống VCS tuyệt vời hoạt động với điều này rất độc đáo).

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.