Được 'chỉnh sửa bởi' nhận xét nội tuyến là tiêu chuẩn trong các cửa hàng sử dụng kiểm soát sửa đổi?


17

Nhà phát triển cấp cao trong cửa hàng của chúng tôi khẳng định rằng bất cứ khi nào mã được sửa đổi, lập trình viên chịu trách nhiệm nên thêm một nhận xét nội tuyến nêu rõ những gì anh ta đã làm. Những bình luận này thường trông giống như// YYYY-MM-DD <User ID> Added this IF block per bug 1234.

Chúng tôi sử dụng TFS để kiểm soát sửa đổi và đối với tôi, các nhận xét thuộc loại này phù hợp hơn nhiều so với ghi chú đăng ký thay vì nhiễu nội tuyến. TFS thậm chí cho phép bạn liên kết đăng ký với một hoặc nhiều lỗi. Một số tệp lớp cũ hơn, thường được sửa đổi của chúng tôi trông giống như chúng có tỷ lệ nhận xét-LỘC gần bằng 1: 1. Trước mắt tôi, những bình luận này làm cho mã khó đọc hơn và thêm giá trị 0.

Đây có phải là một tiêu chuẩn (hoặc ít nhất là phổ biến) trong các cửa hàng khác?


12
Tôi đồng ý với bạn, đó là những gì bản ghi sửa đổi trong kiểm soát phiên bản dành cho.
TZHX

1
Nhà phát triển cấp cao trong nhóm của bạn đã làm điều này trước khi kiểm soát phiên bản được phổ biến rộng rãi và đã không nhận ra rằng nó thuộc về nơi nào khác để loại bỏ mùi mã. Chỉ cho anh ta sáu dự án nguồn mở sử dụng hệ thống bugzilla và vc, hỏi anh ta nếu anh ta cần biết trong các nhận xét của Thư viện jQuery rằng $ .ajax () gần đây đã được jaubourg thay đổi 4 tháng trước và tất cả các thay đổi nhỏ được thực hiện bởi hàng trăm người thuộc về đó. Toàn bộ thư viện jQuery sẽ là một mớ bình luận lộn xộn và không thu được gì!
Ẩn danh

1
Chúng tôi thực sự có một chính sách bất thành văn không có tên trong mã nguồn vì nó có thể tạo ra ý thức về quyền sở hữu mã được coi là BadThing TM.
Stephen Paulger

Câu trả lời:


23

Tôi thường coi những bình luận như vậy là một thông lệ xấu và tôi nghĩ loại thông tin này thuộc về nhật ký cam kết SCM. Nó chỉ làm cho mã khó đọc hơn trong hầu hết các trường hợp.

Tuy nhiên , tôi vẫn thường làm một cái gì đó như thế này cho các loại chỉnh sửa cụ thể.

Trường hợp 1 - Nhiệm vụ

Nếu bạn sử dụng một IDE như Eclipse, Netbeans, Visual Studio (hoặc có một số cách thực hiện tìm kiếm văn bản trên cơ sở mã của bạn với bất cứ điều gì khác), có thể nhóm của bạn sử dụng một số "thẻ nhận xét" hoặc "thẻ nhiệm vụ" cụ thể. Trong trường hợp này có thể hữu ích.

Thỉnh thoảng, khi xem lại mã, hãy thêm một số thứ như sau:

// TOREVIEW: [2010-12-09 haylem] marking this for review because blablabla

hoặc là:

// FIXME: [2010-12-09 haylem] marking this for review because blablabla

Tôi sử dụng các thẻ tác vụ tùy chỉnh khác nhau mà tôi có thể thấy trong Eclipse trong khung nhìn tác vụ cho điều này, bởi vì có một cái gì đó trong nhật ký cam kết là một điều tốt nhưng không đủ khi bạn có một giám đốc điều hành hỏi bạn trong một cuộc họp đánh giá tại sao lỗi bug XY hoàn toàn bị lãng quên và trượt qua. Vì vậy, đối với các vấn đề khẩn cấp hoặc các đoạn mã thực sự đáng nghi ngờ, đây là một lời nhắc bổ sung (nhưng thông thường tôi sẽ giữ bình luận ngắn và kiểm tra nhật ký cam kết vì đó là những gì nhắc nhở ở đây, vì vậy tôi cũng không làm lộn xộn mã nhiều).

Trường hợp 2 - Bản vá lỗi của Libs bên thứ 3

Nếu sản phẩm của tôi cần gói một đoạn mã của bên thứ 3 dưới dạng nguồn (hoặc thư viện, nhưng được xây dựng lại từ nguồn) vì nó cần được vá vì một số lý do, chúng tôi sẽ ghi lại bản vá trong một tài liệu riêng biệt trong đó chúng tôi liệt kê các "cảnh báo" đó để tham khảo trong tương lai và mã nguồn thường sẽ chứa một nhận xét tương tự như:

// [PATCH_START:product_name]
//  ... real code here ...
// [PATCH_END:product_name]

Trường hợp 3 - Sửa lỗi không rõ ràng

Điều này gây tranh cãi hơn một chút và gần hơn với những gì nhà phát triển cấp cao của bạn đang yêu cầu.

Trong sản phẩm tôi làm việc tại thời điểm này, đôi khi chúng tôi (chắc chắn không phải là một điều phổ biến) có một nhận xét như:

// BUGFIX: [2010-12-09 haylem] fix for BUG_ID-XYZ

Chúng tôi chỉ làm điều này nếu lỗi không rõ ràng và mã đọc bất thường. Ví dụ, đây có thể là trường hợp đối với các yêu cầu của trình duyệt hoặc các bản sửa lỗi CSS tối nghĩa mà bạn cần thực hiện chỉ vì có lỗi tài liệu trong sản phẩm. Vì vậy, nói chung, chúng tôi sẽ liên kết nó với kho lưu trữ vấn đề nội bộ của chúng tôi, sau đó sẽ chứa lý do chi tiết đằng sau lỗi và con trỏ đến tài liệu về lỗi của sản phẩm bên ngoài (giả sử, một lời khuyên bảo mật cho lỗi Internet Explorer 6 nổi tiếng, hoặc đại loại như thế).

Nhưng như đã đề cập, nó khá hiếm. Và nhờ các thẻ tác vụ, chúng tôi có thể thường xuyên chạy qua các thẻ này và kiểm tra xem các bản sửa lỗi kỳ lạ này có còn ý nghĩa hay có thể được loại bỏ hay không (ví dụ: nếu chúng tôi bỏ hỗ trợ cho sản phẩm lỗi gây ra lỗi ngay từ đầu).


Điều này chỉ trong: Một ví dụ thực tế cuộc sống

Trong một số trường hợp, tốt hơn là không có gì :)

Tôi vừa bắt gặp một lớp tính toán thống kê khổng lồ trong cơ sở mã của mình, trong đó nhận xét tiêu đề ở dạng thay đổi với yadda yadda thông thường: người đánh giá, ngày tháng, ID lỗi.

Lúc đầu, tôi nghĩ đến việc loại bỏ nhưng tôi nhận thấy ID lỗi không những không phù hợp với quy ước của trình theo dõi vấn đề hiện tại của chúng tôi mà còn không khớp với trình theo dõi được sử dụng trước khi tôi gia nhập công ty. Vì vậy, tôi đã cố gắng đọc qua mã và hiểu được những gì lớp đang làm (không phải là một nhà thống kê) và cũng đã cố gắng khai thác các báo cáo khiếm khuyết này. Khi điều đó xảy ra, họ khá quan trọng và sẽ đánh lừa cuộc sống của anh chàng tiếp theo để chỉnh sửa tập tin mà không biết về họ khá kinh khủng, vì nó xử lý các vấn đề chính xác nhỏ và các trường hợp đặc biệt dựa trên các yêu cầu rất cụ thể được phát ra từ khách hàng ban đầu. . Điểm mấu chốt, nếu những thứ này không có ở đó, tôi sẽ không biết. Nếu họ không ở đó VÀ tôi đã hiểu rõ hơn về lớp học,

Đôi khi thật khó để theo dõi các yêu cầu rất cũ như thế này. Cuối cùng, những gì tôi đã làm vẫn là loại bỏ tiêu đề, nhưng sau khi lén đọc một bình luận khối trước mỗi hàm phân biệt mô tả lý do tại sao các tính toán "kỳ lạ" này là những yêu cầu cụ thể.

Vì vậy, trong trường hợp đó tôi vẫn coi đây là một thực hành tồi, nhưng cậu bé rất vui vì nhà phát triển ban đầu ít nhất đã đưa chúng vào! Thay vào đó, tốt hơn là bình luận mã rõ ràng, nhưng tôi đoán điều đó tốt hơn là không có gì.


Những tình huống này có ý nghĩa. Cảm ơn các đầu vào.
Joshua Smith

trường hợp thứ hai là một nhận xét mã thông thường tại sao có một bản vá trong mã. trường hợp đầu tiên là một trường hợp hợp lệ: chỉ cần một nhận xét rằng mã không kết thúc hoặc có thêm một số việc phải làm đối với phần đó.
Salandur

Vâng, nhà phát triển cấp cao tại nơi tôi làm việc (tôi) nói rằng những thay đổi sẽ xuất hiện trong các nhận xét cam kết của hệ thống quản lý cấu hình phần mềm của bạn. Bạn đã có SCM và trình theo dõi lỗi của bạn được nối với nhau, phải không? (google SCMBUG) Đừng làm thủ công những gì có thể được tự động hóa.
Tim Williscroft

@Tim: Vâng, tôi đồng ý với bạn, như đã nói dòng đầu tiên của câu trả lời. Nhưng trong những trường hợp không rõ ràng, các lập trình viên (vì sự lười biếng, tôi cho rằng, vì họ không muốn lãng phí thời gian cho nó) sẽ không kiểm tra nhật ký cam kết và sẽ bỏ lỡ một số thông tin chính, trong khi một bình luận 10char có thể chỉ ra cho họ ID lỗi đúng sẽ chứa nhật ký của các bản sửa đổi liên quan đến lỗi đó nếu bạn đã thiết lập SCM và trình theo dõi để hoạt động cùng nhau. Tốt nhất trong tất cả các thế giới, thực sự.
haylem

Theo kinh nghiệm của tôi, các thông điệp cam kết thường bị bỏ qua (mặc dù các chính sách bao gồm chúng, nếu chúng tồn tại) hoặc vô dụng (chỉ là một số vấn đề và thường là sai). Tuy nhiên, những người đó sẽ để lại bình luận trong mã ... Tôi thà có những tin nhắn đó và không có thông điệp cam kết nào hơn là không có gì cả (và trong nhiều môi trường tôi đã làm việc để nhận được thông điệp cam kết / lịch sử nguồn rất khó gần như không thể , tối đa và bao gồm phải yêu cầu nguồn từ người khác vì quyền truy cập vào kiểm soát phiên bản bị giới hạn "vì lý do bảo mật").
jwenting

3

Chúng tôi sử dụng thực hành đó cho các tệp không thuộc kiểm soát phiên bản. Chúng tôi có các chương trình RPG chạy trên máy tính lớn và điều đó chứng tỏ khó thực hiện hơn là sao lưu chúng.

Đối với mã nguồn được phiên bản, chúng tôi sử dụng ghi chú đăng ký. Tôi nghĩ đó là nơi họ thuộc về, không làm lộn xộn mã. Đó là siêu dữ liệu, sau tất cả.


Tôi đồng ý, các tập tin không thuộc kiểm soát phiên bản là một câu chuyện khác nhau.
Joshua Smith

1
"được chứng minh là khó thực hiện nhiều hơn là sao lưu chúng." Không thực sự là một cái cớ CTO của tôi sẽ dạ dày.
Tim Williscroft

@Tim: Luôn luôn mở để đề xuất - Tôi có thể nâng chúng lên chuỗi lệnh. :) Máy tính lớn khó làm việc để tắt và bật các tệp.
Michael K

Đề nghị của tôi - có lẽ bạn có thể tắt chúng (sao lưu); Tại sao không bỏ đi đâu đó và có một chút kịch bản đẩy thay đổi thành đồng bóng mỗi đêm?
Wyatt Barnett

2

Chúng tôi đã từng thực hành điều này từ lâu trong một cửa hàng SW nơi người quản lý của chúng tôi khẳng định rằng anh ấy muốn có thể đọc các tệp mã trên giấy và theo dõi lịch sử sửa đổi của họ. Không cần phải nói, tôi không nhớ bất kỳ dịp cụ thể nào khi anh ấy thực sự nhìn vào một bản in tệp nguồn: - /

May mắn thay, những người quản lý của tôi từ đó đã hiểu biết nhiều hơn về những gì hệ thống kiểm soát phiên bản có thể làm (tôi phải nói thêm rằng chúng tôi đã sử dụng SourceSafe trong cửa hàng đầu tiên đó). Vì vậy, tôi không thêm siêu dữ liệu phiên bản vào mã.


2

Nói chung, không bắt buộc nếu SCM và IDE của bạn cho phép bạn sử dụng tính năng "hiển thị chú thích" (được gọi là tính năng này trong Eclipse), bạn có thể dễ dàng thấy những gì các cam kết đã thay đổi một đoạn mã và các nhận xét cam kết sẽ cho biết ai và tại sao.

Lần duy nhất tôi đưa một nhận xét như thế này vào mã là nếu đó là một đoạn mã đặc biệt kỳ lạ có thể khiến ai đó nhầm lẫn trong tương lai, tôi sẽ bình luận ngắn gọn với số lỗi để họ có thể đi đến báo cáo lỗi và đọc chi tiết về nó.


"Bạn không cần phải hiểu điều này" có lẽ là một nhận xét tồi để đưa vào mã. Một lần nữa, tôi sẽ nói liên kết SCM và trình theo dõi lỗi của bạn với nhau.
Tim Williscroft

2

Rõ ràng, bất kỳ ý kiến ​​như vậy gần như được đảm bảo là không chính xác theo thời gian; Nếu bạn chỉnh sửa một dòng hai lần, bạn có thêm hai bình luận không? Họ đi đâu? Vì vậy, một quá trình tốt hơn là dựa vào các công cụ của bạn.

Đây là một dấu hiệu cho thấy, vì bất kỳ lý do gì, nhà phát triển cấp cao không thể dựa vào quy trình mới để theo dõi các thay đổi và kết nối các thay đổi với hệ thống theo dõi vấn đề. Bạn phải giải quyết sự khó chịu này để giải quyết xung đột.

Bạn cần hiểu lý do tại sao anh ta không thể dựa vào nó. Có phải là thói quen cũ? Một trải nghiệm tồi tệ với hệ thống SCM? Một định dạng trình bày mà không làm việc cho anh ta? Có lẽ anh ta thậm chí không biết về các công cụ như 'git đổ lỗi' và chế độ xem dòng thời gian của Perforce (về cơ bản cho thấy điều này, mặc dù nó có thể không hiển thị vấn đề gì đã kích hoạt thay đổi).

Không hiểu lý do của anh ta về yêu cầu, bạn sẽ không thể thuyết phục anh ta.


2

Tôi làm việc trên một sản phẩm Windows hơn 20 năm tuổi. Chúng tôi có một thực tế tương tự đã được thực hiện trong một thời gian dài. Tôi không thể đếm số lần thực hành này đã cứu thịt xông khói của tôi.

Tôi đồng ý rằng một số thứ là dư thừa. Nó được sử dụng để phát triển sử dụng thực hành này để nhận xét mã. Khi tôi xem lại điều này, tôi bảo họ tiếp tục xóa mã và nhận xét là không cần thiết.

Nhưng, nhiều lúc, bạn có thể xem mã đã tồn tại khoảng một thập kỷ và được sửa đổi bởi 20 nhà phát triển nhưng không bao giờ được cấu trúc lại. Mọi người từ lâu đã quên tất cả các chi tiết yêu cầu có trong mã gốc, không bao giờ bận tâm đến tất cả các thay đổi và không có tài liệu đáng tin cậy.

Một nhận xét với một số khiếm khuyết cho tôi một nơi để tìm kiếm nguồn gốc của mã.

Vì vậy, yeah, hệ thống SCM làm rất nhiều, nhưng không phải tất cả mọi thứ. Đối xử với những điều này như bất kỳ bình luận nào khác, và thêm chúng vào bất cứ nơi nào có sự thay đổi đáng kể. Nhà phát triển nhìn vào mã của bạn hơn 5 năm từ đó sẽ cảm ơn bạn như thế nào.


1

Đề cập đến mọi thay đổi trong nhận xét là vô nghĩa nếu bạn có VCS. Đề cập đến một lỗi cụ thể hoặc lưu ý quan trọng khác liên quan đến dòng cụ thể là hữu ích. Một thay đổi có thể bao gồm nhiều dòng thay đổi, tất cả dưới cùng một thông điệp cam kết.


1

Không phải là tôi có thể nói.

Tôi thực hiện splatter TODO trong mã của mình khi tôi đi cùng và mục tiêu là xóa chúng theo thời gian 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.