2009-07-17 38 views
10

Máy phân tích mã tĩnh nào (nếu có) để bạn sử dụng? Tôi đã sử dụng PyLint cho Python và tôi khá hài lòng với nó, bây giờ tôi cần một cái gì đó tương tự cho mã C.Máy phân tích mã tĩnh cho C

Bạn cần phải loại bỏ bao nhiêu đầu ra để sử dụng bình thường hàng ngày?

+0

Để mở rộng câu hỏi của tôi: Có ai đã sử dụng SourceMonitor (http://www.campwoodsw.com/sourcemonitor.html) không và bạn đánh giá như thế nào? – Josip

+1

Bản sao của http://stackoverflow.com/questions/2873/choosing-a-static-code-analysis-tool? –

Trả lời

14

Wikipedia duy trì một số list of static code analysis tools cho các ngôn ngữ khác nhau (bao gồm C).

Cá nhân, tôi đã sử dụng cả hai PC-LintSplint. Lựa chọn tốt nhất tùy thuộc vào loại ứng dụng bạn đã viết. Tuy nhiên không có vấn đề mà công cụ bạn sử dụng, sẽ có một tín hiệu thấp để tiếng ồn tỷ lệ cho đến khi bạn đúng cách điều chỉnh công cụ và mã của bạn.

PC-Lint là công cụ Lint mạnh nhất mà tôi đã sử dụng. Nếu bạn thêm nó vào một dự án hiện có, tỷ lệ tín hiệu trên nhiễu có thể thấp. Tuy nhiên, một khi công cụ và mã của bạn được cấu hình đúng, nó có thể được sử dụng như một phần của quá trình xây dựng tiêu chuẩn của bạn. Dự án lớn cuối cùng mà tôi đã sử dụng nó, chúng tôi đặt nó để cảnh báo PC-Lint sẽ phá vỡ bản dựng. Giấy phép cho PC-Lint có giá 389 đô la, nhưng đáng giá.

Splint là một công cụ nguồn mở tuyệt vời. Tôi đã sử dụng nó trên một số dự án, nhưng thấy rằng nó có thể được khó khăn để cấu hình khi sử dụng một trình biên dịch với không mở rộng ANSI C (ví dụ như trên các dự án hệ thống nhúng).

Valgrind cũng đáng xem xét như một công cụ phân tích động.


Bạn đã yêu cầu phản hồi cụ thể trên SourceMonitor. Công cụ này cung cấp các số liệu thú vị trên mã của bạn, nhưng nên được sử dụng như một bổ sung cho công cụ Lint tốt vì nó không cung cấp loại phân tích đó.

Như đã trình bày trên trang nhà của họ, SourceMonitor sẽ:

... tìm hiểu có bao nhiêu mã bạn có và để xác định mức độ phức tạp tương đối của module của bạn. Ví dụ: bạn có thể sử dụng SourceMonitor để xác định mã có nhiều khả năng chứa lỗi nhất và do đó đảm bảo xem xét chính thức.

Tôi đã sử dụng nó trên một dự án gần đây và thấy nó dễ sử dụng (ngay cả đối với mã hệ thống nhúng). Chỉ số phức tạp là một tài nguyên tuyệt vời để phát triển mã sẽ ít bị lỗi và dễ bảo trì hơn.

SourceMonitor cung cấp biểu đồ đẹp về đầu ra của nó cũng như XML được định dạng tốt nếu bạn muốn tự động thu thập số liệu. Nhược điểm duy nhất là công cụ này chỉ chạy trên Windows.

+0

Ý kiến ​​của bạn về Splint thực sự hữu ích, bởi vì tôi đang làm việc với trình biên dịch C18 Microchip hỗ trợ vài phần mở rộng C. Cảm ơn. – Josip

0

Tôi đã sử dụng PCLint mãi mãi và thực sự thích nó. Tôi ước họ sẽ tham gia vào C# ... Họ là những người có câu đố pop trên mã C hoặc C++ trong tất cả các tạp chí.

3

splint, mặc dù, thành thật mà nói, tôi chưa bao giờ có thể làm cho nó hoạt động; trên nền tảng của tôi, nó thực sự là quá hoạt động. Trong thực tế, hầu hết được sử dụng "lint" của tôi là những lá cờ cảnh báo sau đây cho gcc

-std=c89 -pedantic -W -Wall -Wstrict-prototypes -Wunreachable-code -Wwrite-strings -Wpointer-arith -Wbad-function-cast -Wcast-align -Wcast-qual 

Tất nhiên, tôi đã hầu như bị lãng quên những gì nửa trong số họ có ý nghĩa. Nhưng họ bắt được một vài điều.

+0

Có sự khác biệt lớn giữa cảnh báo lint và trình biên dịch vì lint thực hiện kiểm tra mô-đun chéo trong khi trình biên dịch chỉ có thể cảnh báo về các sự cố trong tệp nguồn đã biên dịch và bao gồm các tệp tiêu đề. – Dipstick

5

Chúng tôi sử dụng PC-Lint và rất hài lòng với nó.

Dường như có một vài trại liên quan đến ức chế thông điệp và điều chỉnh:

  • ngăn chặn tất cả mọi thứ, sau đó unsuppress chỉ những gì bạn đang quan tâm đến việc
  • mọi thứ unsuppress, sau đó ngăn chặn cảnh báo bạn không quan tâm đến việc
  • giữ cho mọi thứ unsuppressed

Chúng tôi có xu hướng rơi vào đâu đó giữa các loại thứ hai và thứ ba. Điều này có nghĩa là một bãi chứa văn bản 100MiB + lố bịch (một lỗi trên mỗi dòng) cho mỗi lint chạy trên các thư viện lõi (rất nhiều mã cũ).

Tùy chỉnh diff giống như công cụ đồng hồ cho các thay đổi và gửi email cho tác giả của cam kết, giữ số tiền mà hầu hết mọi người phải xem xét một vài dòng. Chúng tôi thu thập số liệu thống kê thú vị về lỗi theo thời gian với một số khai phá dữ liệu cơ bản.

Bạn có thể được thực sự đánh bóng ở đây, siêu liên kết các lỗi trở lại mô tả chi tiết hơn, cung cấp "điểm" để sửa chữa cảnh báo hiện có, vv ...

1

Tôi là một fan hâm mộ lớn của công việc David Evans về LC/Lint, mà dường như đã đổi tên thành Splint. Nó rất tích cực và bạn có thể cho biết nhiều thông tin hữu ích bằng cách thêm chú thích vào mã của bạn. Nó được thiết kế để sử dụng với chú thích lập trình. Nó sẽ hoạt động mà không có chúng, nhưng nếu bạn cố gắng sử dụng nó như một trình kiểm tra đơn giản mà không cung cấp bất kỳ chú thích nào, có thể bạn sẽ thất vọng. Nếu   những gì bạn muốn là kiểm tra hoàn toàn tự động, và nếu bạn có thể đối phó với một công cụ chỉ có Windows, bạn tốt hơn với Gimpel's PC-Lint. Jim Gimpel đã có khách hàng hài lòng với hơn 25   năm.

Các vấn đề liên quan