Số liệu mã nguồn để đo độ ổn định của mã?


17

Xem xét cách phần mềm được phát triển trong một chu kỳ phát hành (triển khai, kiểm tra, sửa lỗi, phát hành) Tôi đã nghĩ rằng người ta sẽ có thể thấy một số mẫu trong các dòng mã được thay đổi trong cơ sở mã; ví dụ về cuối của một dự án, nếu mã trở nên ổn định hơn, người ta sẽ thấy rằng ít dòng mã được sửa đổi trên mỗi đơn vị thời gian.

Ví dụ, người ta có thể thấy rằng trong sáu tháng đầu tiên của dự án, trung bình là 200 dòng mã mỗi ngày trong khi trong tháng trước đó là 50 dòng mã mỗi ngày và trong tuần trước (ngay trước DVD của sản phẩm đã được vận chuyển), không có dòng mã nào được thay đổi cả (mã đóng băng). Đây chỉ là một ví dụ và các mẫu khác nhau có thể xuất hiện theo quy trình phát triển được thông qua bởi một nhóm cụ thể.

Dù sao, có bất kỳ số liệu mã nào (có tài liệu nào về chúng không?) Sử dụng số lượng dòng mã được sửa đổi trên một đơn vị thời gian để đo lường tính ổn định của cơ sở mã? Chúng có hữu ích để có được cảm giác nếu một dự án đang ở đâu đó hoặc nếu nó vẫn chưa sẵn sàng để phát hành? Có công cụ nào có thể trích xuất thông tin này từ hệ thống kiểm soát phiên bản và đưa ra số liệu thống kê không?



4
"Thứ hai, cơ chế là trừu tượng, sản xuất của nó được đặt trong thiết kế của nó. Về mặt này, một chương trình giống như một bài thơ: bạn không thể viết một bài thơ mà không viết nó. Tuy nhiên, mọi người nói về lập trình như thể đó là một quá trình sản xuất và đo lường" năng suất lập trình viên "về mặt" số dòng mã được sản xuất ". Vì vậy, họ đặt số đó ở phía bên trái của sổ cái: chúng ta nên luôn luôn đề cập đến" số lượng dòng mã đã sử dụng "." - Thành quả của sự hiểu lầm , Edsger W. Dijkstra.
yannis

3
@Yannis Rizos: Tôi không có nghĩa là đề nghị đo lường năng suất hoặc độ phức tạp của mã bởi LỘC bởi vì tôi biết rằng đây không phải là một biện pháp tốt. Mặt khác, nếu 300 dòng mã được thay đổi hai ngày trước khi giao hàng, tôi với tư cách là người quản lý sẽ có một đèn "RED ALERT" lớn (trừ khi điều này được lên kế hoạch và là kết quả của việc đánh giá rất cẩn thận các rủi ro ). Nói chung, tôi cho rằng mã đã được sử dụng (và được kiểm tra) mà không bị thay đổi trong một thời gian dài là "ổn định" hơn mã trong đó 100 dòng được thay đổi mỗi ngày.
Giorgio

2
@Giorgio Argh, tôi đã bị gián đoạn (giữa ngày làm việc ở đây) trong khi tôi đang đăng một bình luận khác (đạt giới hạn char trong lần đầu tiên). Không có nghĩa là bạn đang nói về năng suất, trích dẫn Dijkstra chỉ xuất hiện trong đầu và tôi nghĩ nó sẽ rất thú vị. Trong mọi trường hợp, số liệu về mã số khá gần với những gì bạn đang tìm kiếm và có hàng tấn tài liệu về chúng. Đối với các công cụ, FishEye của Atlassian là ngoạn mục.
yannis

@Yannis Rizos: Đây thực sự là một bài đọc rất thú vị. Đối với FishEye, chúng tôi sử dụng nó tại nơi làm việc của chúng tôi (để đánh giá), vì vậy tôi sẽ ngay lập tức xem hướng dẫn và xem chúng tôi có thể tạo ra loại thống kê nào.
Giorgio

Câu trả lời:


17

Một biện pháp mà Michael Feather đã mô tả là, " Tập hợp các lớp học ".

Ông đo lường số lượng các lớp được thêm vào so với những người "đóng cửa". Việc đóng mô tả lớp là:

Một lớp được đóng vào ngày mà tại đó không có sửa đổi nào xảy ra với nó từ ngày đó đến nay.

Ông sử dụng các biện pháp này để tạo ra các biểu đồ như thế này: Biểu đồ lớp hoạt động

Số càng nhỏ khoảng cách giữa hai dòng càng tốt.

Bạn có thể áp dụng một biện pháp tương tự cho cơ sở mã của bạn. Có khả năng số lượng các lớp tương quan với số lượng dòng mã. Thậm chí có thể mở rộng điều này để kết hợp một dòng mã trên mỗi thước đo lớp, có thể thay đổi hình dạng của biểu đồ nếu bạn có một số lớp nguyên khối lớn.


4

Miễn là có một ánh xạ tương đối nhất quán các tính năng cho các lớp hoặc đối với vấn đề đó, hệ thống tệp bạn có thể nối một thứ gì đó như nguồn vào hệ thống kiểm soát phiên bản của mình và nhanh chóng hiểu được phần lớn sự phát triển được tập trung vào (và do đó phần nào của mã không ổn định nhất).

Điều này giả định rằng bạn có một cơ sở mã tương đối gọn gàng. Nếu cơ sở mã là một quả bóng bùn, về cơ bản bạn sẽ thấy mọi phần nhỏ đang được xử lý vì sự phụ thuộc lẫn nhau. Điều đó nói rằng, có thể rằng chính nó (phân cụm trong khi làm việc trên một tính năng) là dấu hiệu tốt về chất lượng của cơ sở mã.

Nó cũng giả định rằng toàn bộ doanh nghiệp và nhóm phát triển của bạn có một số cách tách biệt các tính năng trong phát triển (có thể là các nhánh trong kiểm soát phiên bản, một tính năng tại một thời điểm, bất cứ điều gì). Ví dụ, nếu bạn đang làm việc trên 3 tính năng chính trên cùng một nhánh, thì phương pháp này tạo ra kết quả vô nghĩa, bởi vì bạn có một vấn đề lớn hơn là sự ổn định mã trên tay bạn.

Thật không may, tôi không có tài liệu để chứng minh quan điểm của mình. Nó chỉ dựa trên kinh nghiệm của tôi về việc sử dụng nguồn trên các cơ sở mã tốt (và không tốt).

Nếu bạn đang sử dụng git hoặc svn và phiên bản gource của bạn> = 0,39, thì đơn giản như chạy gource trong thư mục dự án.


Gource dường như cũng là một công cụ tuyệt vời! (+1)
Giorgio

1
Tôi tình cờ nhận được câu trả lời này, sau đó dành sáu giờ tiếp theo để chơi với Gource. Tôi không chắc điều đó xứng đáng với +1 hay -1, nhưng chết tiệt, đó là một công cụ tuyệt vời.
RonU

@RonU: Bạn có thể sử dụng gource để trực quan hóa trạng thái của kho lưu trữ trong phạm vi thời gian tùy chỉnh. Điểm chính của nó là nó trực quan hóa hoạt động trên cơ sở mã của bạn theo thời gian. Làm thế nào thông tin dễ dàng để giải thích phụ thuộc vào rất nhiều yếu tố, như tôi đã giải thích trong câu trả lời của tôi ở trên. Vâng, nó là một công cụ tuyệt vời nếu bạn muốn có "bức tranh lớn", vì vậy tôi nghĩ rằng nó xứng đáng được +1;)
Carl

Vâng, khi tôi nói "sáu giờ", tôi không có nghĩa là tôi đã chạy một sim Gource trong thời gian đó ... chỉ là tôi đã chơi xung quanh với rất nhiều tùy chọn, chuyển nó sang ffmpeg, có thể thêm một bản nhạc hoành tráng, v.v. là khá nhiều lỗ thỏ. :)
RonU

Hãy đoán xem. Nhạc phim là Harlem Shuffle lặp;)
Carl

0

Việc sử dụng tần số của các dòng được sửa đổi như một chỉ báo cho sự ổn định của mã ít nhất là đáng nghi ngờ.

Lúc đầu, việc phân phối theo thời gian của các dòng được sửa đổi, phụ thuộc nhiều vào mô hình quản lý phần mềm của dự án. Có sự khác biệt lớn trong các mô hình quản lý khác nhau.

Thứ hai, thương vong trong giả định này không rõ ràng - là số dòng sửa đổi thấp hơn gây ra bởi sự ổn định của phần mềm, hoặc đơn giản là vì thời hạn hết hạn và các nhà phát triển đã quyết định không thực hiện một số thay đổi ngay bây giờ, nhưng để thực hiện sau giải phóng?

Ở vị trí thứ ba, hầu hết các dòng được sửa đổi khi các tính năng mới được giới thiệu. Nhưng tính năng mới không làm cho mã không ổn định. Nó phụ thuộc vào kỹ năng của nhà phát triển và chất lượng của thiết kế. Mặt khác, ngay cả các lỗi nghiêm trọng cũng có thể được sửa chữa với rất ít dòng thay đổi - trong trường hợp này, độ ổn định của phần mềm được tăng lên đáng kể, nhưng số lượng dòng thay đổi không quá lớn.


"Điều này phụ thuộc vào kỹ năng của nhà phát triển và chất lượng của thiết kế.": Nhưng bạn cần ít nhất một thời gian để kiểm tra các thay đổi để bạn có đủ tự tin rằng bạn không đưa ra bất kỳ lỗi nào. Ngay cả những nhà phát triển lành nghề nhất cũng có thể mắc lỗi đánh máy, ví dụ nếu họ chịu áp lực, đã làm quá nhiều giờ hoặc ngủ quá ít. Ngoài ra, nếu bạn áp dụng nguyên tắc mở / đóng, sau một thời gian, số lượng thay đổi (sửa lỗi) sẽ giảm. Dù sao, tôi đã tuyên bố rõ ràng trong câu hỏi của mình rằng kết quả của phép đo như vậy có thể thay đổi theo quy trình phát triển.
Giorgio

BTW, mã có thể không ổn định không phải vì các nhà phát triển kém, mà vì các yêu cầu không rõ ràng và dự án vẫn đang trong giai đoạn tạo mẫu.
Giorgio

@Giorgio: Tất nhiên là bạn đúng. Nhưng đây chính xác là những gì tôi đã viết: Số lượng dòng sửa đổi phụ thuộc nhiều vào quá nhiều yếu tố. Một số trong số họ liên quan đến sự ổn định mã, một số thì không. Nó giống như cố gắng tính toán có bao nhiêu người quan hệ tình dục, đo năng lượng điện, theo giả định - ít năng lượng hơn - ít ánh sáng hơn - tình dục nhiều hơn. Mặc dù nó đã được chứng minh rằng tỷ lệ sinh đang tăng sau khi hết đen. ;)
johnfound

-1

Mạnh mẽ là một thuật ngữ liên quan đến chức năng chính xác của một tập lệnh, không phải là số lượng, độ dài, độ căng, tính chính xác về mặt ngữ pháp của văn bản được sử dụng để diễn đạt các hướng dẫn đó.

Quả thực cú pháp rất quan trọng và phải chính xác nhưng bất cứ điều gì khác ngoài điều đó, vì nó liên quan đến chức năng mong muốn của hướng dẫn bằng cách xem 'số liệu' của hướng dẫn giống như vẽ sơ đồ tương lai của bạn bằng cách đọc mẫu lá trà ở dưới cùng bạn chén trà.

Độ bền được đo bằng cách kiểm tra. Kiểm tra đơn vị, kiểm tra khói, kiểm tra hồi quy tự động; kiểm tra, kiểm tra, kiểm tra!

Câu trả lời của tôi cho câu hỏi của bạn là bạn đang sử dụng phương pháp sai trong việc tìm kiếm câu trả lời cho một trong những điều mạnh mẽ. Đó là một cá trích đỏ rằng các dòng mã có nghĩa là bất cứ điều gì nhiều hơn các dòng chiếm mã. Bạn chỉ có thể biết nếu mã thực hiện những gì bạn muốn nó làm nếu bạn kiểm tra rằng nó đang làm những gì bạn yêu cầu.

Vui lòng xem lại khai thác kiểm tra thích hợp và tránh bí ẩn số liệu mã.

Lời chúc tốt nhất.


3
Tôi đã tuyên bố rõ ràng rằng tôi không đề xuất LoC như một thước đo độ phức tạp của mã. Tôi đã đề xuất các thay đổi trong mã như là thước đo độ ổn định của mã: một đoạn mã có các yêu cầu chức năng ổn định và việc triển khai thử nghiệm ổn định, đáp ứng các yêu cầu đó không?
Giorgio

Tôi không muốn tranh luận với bạn nhưng trân trọng hướng dẫn bạn thoát khỏi sự vô nghĩa của số liệu mã. Tôi đọc lại câu hỏi của bạn và tất cả các ví dụ của bạn cho thấy mong muốn suy ra mối quan hệ giữa các dòng mã được thay đổi và kết quả mạnh mẽ của chúng. Tôi hiểu rằng bạn càng gõ nhiều từ, bạn càng có nhiều khả năng mắc lỗi đánh máy. Nhưng tôi rất phản đối nguyên tắc của anh ấy trong những gì bạn yêu cầu rằng tôi phải ra mặt mạnh mẽ để ủng hộ bạn từ bỏ nhiệm vụ theo cách này. Thực hành thử nghiệm tốt = khả năng mạnh mẽ.
Sassafras_wot

"Thực hành thử nghiệm tốt = khả năng mạnh mẽ.": Tôi hoàn toàn đồng ý. Đó là lý do tại sao tôi đề xuất rằng một đoạn mã đã được thay đổi gần đây cần phải được kiểm tra lại trước khi chúng tôi có thể tự tin rằng nó là chính xác.
Giorgio

Có một số định nghĩa về sự ổn định và một trong số đó là những gì bạn đang tranh luận. Đó là một cách giải thích ngữ nghĩa khác với cách tôi đã thực hiện. Tôi đã ổn định với ý nghĩa, đó là "không chịu sự thay đổi cực đoan" thay vì "chống lại sự thay đổi"
Dave Hillier
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.