Làm thế nào tôi có thể ước tính tuổi thọ của một dòng mã?


11

Tôi đang cố gắng tìm ra một cách để phân tích tuổi thọ mã trong các dự án nguồn mở: đó là, một dòng mã cụ thể được kích hoạt và sử dụng trong bao lâu.

Suy nghĩ hiện tại của tôi là tuổi thọ của một mã bắt đầu khi nó được cam kết lần đầu tiên và kết thúc khi một trong những điều sau đây xảy ra:

  • Nó được chỉnh sửa hoặc xóa,
  • Không bao gồm từ các bản dựng,
  • Không có mã nào trong bản dựng của nó được duy trì trong một khoảng thời gian (giả sử, một năm).

LƯU Ý: Để làm rõ lý do tại sao "chỉnh sửa" được tính là "chết", các dòng được chỉnh sửa sẽ được tính là một thế hệ "mới" hoặc dòng mã. Ngoài ra, trừ khi có một cách dễ dàng để làm điều này, sẽ không có sự tính toán về tuổi thọ của dòng dõi, hoặc dòng dõi từ tổ tiên.

Điều gì khác sẽ xác định tuổi thọ của mã?


2
"Bao lâu một dòng mã cụ thể được kích hoạt và sử dụng" tại sao bạn nghĩ rằng đây là một số liệu tốt?
Pieter B

Câu trả lời:


10

Andy Ozment đã xem xét OpenBSD năm 2006 với cùng một loại câu hỏi: Sữa hoặc rượu: Bảo mật phần mềm có cải thiện theo tuổi tác không?

Bạn có thể học hỏi từ định nghĩa của anh ấy. Đây cũng là một bài viết rất thú vị, với một kết luận thú vị, một bài viết chưa được tích hợp vào truyền thuyết quản lý phần mềm:

Trong khoảng thời gian 7,5 năm và mười lăm bản phát hành, 62% trong số 140 lỗ hổng được báo cáo trong OpenBSD là nền tảng : có mặt trong mã khi bắt đầu nghiên cứu.

Phải mất hơn hai năm rưỡi để nửa đầu của những lỗ hổng nền tảng này được báo cáo. Chúng tôi thấy rằng 61% mã nguồn trong phiên bản cuối cùng được nghiên cứu là nền tảng: nó vẫn không thay đổi so với phiên bản ban đầu được phát hành 7,5 năm trước. Do đó, tỷ lệ báo cáo các lỗ hổng nền tảng trong OpenBSD có thể sẽ tiếp tục ảnh hưởng lớn đến tỷ lệ báo cáo lỗ hổng nói chung.

Chúng tôi cũng tìm thấy bằng chứng có ý nghĩa thống kê rằng tỷ lệ báo cáo lỗ hổng cơ sở giảm trong thời gian nghiên cứu. Chúng tôi đã sử dụng một mô hình tăng trưởng độ tin cậy để ước tính rằng 67,6% các lỗ hổng trong phiên bản nền tảng đã được tìm thấy. Ước tính của mô hình về số lượng lỗ hổng dự kiến ​​được báo cáo mỗi ngày đã giảm từ 0,051 khi bắt đầu nghiên cứu xuống còn 0,024.


1
+1 @Bruce Ediger: Tuyệt vời, cảm ơn - nhìn vào nó ngay bây giờ!
sai lầm ngớ ngẩn

Một lần nữa, cảm ơn, vì vậy thông tin duy nhất tôi có thể tìm thấy sử dụng là "Chúng tôi biết rằng 61% dòng mã trong OpenBSD ngày nay là nền tảng: chúng được giới thiệu trước khi phát hành phiên bản ban đầu mà chúng tôi đã nghiên cứu và chưa đã bị thay đổi kể từ đó. " - mà trong khi thú vị, không thực sự liên quan. Mọi thứ khác dường như tập trung vào việc mất bao lâu các lỗ hổng để sửa, điều này một lần nữa, rất thú vị, nhưng không nói gì về các yếu tố để tính đến tuổi thọ mã. Có thiếu điều gì không?
sai lầm ngớ ngẩn

1

Tôi không nghĩ rằng có một câu trả lời cho điều đó. Nó phụ thuộc rất nhiều vào dự án. Một số ổn định hơn trong những năm qua, một số khác có nhiều biến động / tái cấu trúc / phát triển qua các năm.

Hơn nữa, thật khó để đo lường. Là một dòng chỉnh sửa thực sự là kết thúc của tuổi thọ của nó? Điều gì về chỉ một thay đổi mỹ phẩm như định dạng lại cơ sở mã với các tab hoặc dấu cách? IMHO không được tính là cơ sở mã mới, nhưng nó sẽ theo tiêu chí của bạn.

Điều đó nói rằng, tôi nghĩ rằng một đoạn tốt của các LỘC sống mãi mãi.

Lý do rất đơn giản: cách dễ dàng hơn để thêm mã mới hơn là loại bỏ một số mã. Đặc biệt là khi hệ thống phức tạp và phát triển qua nhiều năm. Sau đó, nó nhanh chóng đi đến điểm "mạo hiểm" để loại bỏ hoặc thay đổi mã không tầm thường. Nó có thể giới thiệu các lỗi, phá vỡ tính tương thích, giới thiệu hiệu ứng cánh bướm của các thay đổi ... Vì vậy, tôi nghĩ rằng, cơ sở mã hóa càng lớn thì càng cũ, càng nhiều LỘC sẽ tồn tại.

Hơn nữa, chỉ những lập trình viên giỏi mới có xu hướng dọn sạch các cơ sở mã hóa và giảm các dòng. Tất cả những người khác có xu hướng chồng chất các LỘC. Và cho đến nay, sau này là chiến thắng cho đến nay. ;)


0

Xóa hoặc loại trừ một dòng mã chắc chắn là một dấu hiệu cho thấy sự kết thúc của tuổi thọ của nó.

Về việc chỉnh sửa, tôi sẽ hỏi câu hỏi này: Liệu tuyên bố này có tạo ra kết quả khác sau khi chỉnh sửa không?

Nếu câu trả lời là có, thì tôi sẽ nói rằng tuyên bố trước đó không còn nữa, nếu không tôi vẫn coi đó là sự tiếp tục của tuyên bố trước đó.

Ví dụ về thay đổi kết quả:

if ( a && b )

đến:

if ( a || b )

Ví dụ về tiếp tục tuổi thọ:

foo.bar( baz );

đến:

foo.prototype.bar.call( this, baz );
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.