2010-11-19 16 views
11

Có công cụ nào có thể xác định được một hàm/thủ tục/phương thức/toàn bộ lớp được sử dụng không?Tìm mã không sử dụng (hay còn gọi là "chết") trong Delphi

Tôi đã thấy các công cụ có thể giúp nhà phát triển có kiến ​​thức theo dõi các đoạn mã không sử dụng (hầu hết là các ngôn ngữ khác với Delphi) nhưng hầu hết đều có đường cong học tập dốc và/hoặc yêu cầu đào đáng kể để xác định xem đoạn mã được sử dụng hay không.

Trình liên kết thông minh của Delphi thực hiện điều này để giảm kích thước của tệp thực thi cuối cùng. Thật không may những thông tin nhỏ được đưa ra trên các liên kết thông minh không chỉ ra một cách để lấy những gì đã được chọn lọc từ các rào cản.

Phải thừa nhận rằng, ngay cả khi có thể tìm ra những gì mà trình liên kết thông minh loại bỏ nó có thể rất thận trọng với việc chọn lọc.

Trả lời

5

Mặc dù vụng về và không toàn cầu, bạn có thể kiểm tra mã nguồn cho các dấu chấm ở lề, như được hiển thị bên dưới. Đây là những dòng mà bạn có thể thiết lập các điểm ngắt vì mã không bị loại bỏ mã chết.

Điều này xảy ra, tôi tin rằng, ở cấp quy trình. Tôi không biết cách nào để xác định điều này ở mức độ thấp hơn.

alt text

+0

Thực sự vụng về. Điều này sẽ yêu cầu quét trực quan mỗi và mọi tệp nguồn cho các dấu chấm bị thiếu. Mặc dù, sau khi kiểm tra một vài tùy chọn trình biên dịch nó xuất hiện tính năng này có sẵn cho dù thông tin gỡ lỗi được bật hay tắt. Tôi tự hỏi nếu thông tin này được trích xuất bởi IDE từ dcus? –

+0

Vụng về, nhưng rất hữu ích khi cố gắng hiểu hoặc tái cấu trúc các đơn vị lớn. –

4

chủ đề này thảo luận về loại bỏ các đơn vị không sử dụng, và các cuộc đàm phán về các công cụ như Icarus Pascal Analyzer. Công cụ đó sẽ làm tất cả những gì bạn cần và hơn thế nữa. How to "automatically" remove unused units from uses clause?

+0

Chỉ cần sử dụng 2 ngày trước đó và bóc vỏ một cách dày một lớp crap từ mã của tôi. –

+1

Có, * Giảm mã * và * Sử dụng * báo cáo của nó khá hữu ích nhưng không có báo cáo liệt kê các hàm không bao giờ được gọi hoặc các lớp được khai báo nhưng không bao giờ được sử dụng. –

0

Thanh toán các công cụ tại http://www.peganza.com/ để trợ giúp một số tác vụ của bạn.

Icarus là phần mềm miễn phí và nó phân tích các mệnh đề 'sử dụng' của bạn để cho phép bạn xóa các tham chiếu không được sử dụng.

Pascal Analyzer là phiên bản đầy đủ bao gồm chức năng Icarus và nhiều công cụ khác.

+0

Những điều này đã được đề cập. –

+0

Rất tiếc ... không biết tôi đã bỏ lỡ nó như thế nào! Chúc may mắn bất kể! –

0

lẽ CodeHealer có thể giúp bạn với mã chưa sử dụng

CodeHealer thực hiện một chiều sâu phân tích mã nguồn, tìm kiếm vấn đề trong các lĩnh vực sau:

Kiểm toán: quy tắc Quản lý chất lượng chẳng hạn như mã không sử dụng hoặc không thể truy cập, hãy sử dụng các tên và từ khóa chỉ định của Delphi làm mã định danh , số nhận dạng ẩn những người khác cùng tên ở phạm vi cao hơn, và hơn thế nữa. Kiểm tra: lỗi tiềm năng như uninitialised hoặc unreferenced định danh, nguy hiểm loại đúc, chuyển đổi kiểu tự động, không xác định giá trị hàm trả về, không sử dụng giá trị được giao, và nhiều hơn nữa. Metrics: Định lượng thuộc tính mã như cyclomatic phức tạp, khớp nối giữa các đối tượng (Data Abstraction Coupling), bình luận tỷ lệ, số lượng các lớp học, dòng mã, và nhiều hơn nữa.

2

Bạn có thể sử dụng công cụ Code Coverage để tìm mã không sử dụng.Chỉ cần chạy ứng dụng và thực hiện tất cả các phần theo cách thủ công. Báo cáo bảo hiểm mã sẽ hiển thị phần nào chưa được chạm vào. (Chạy công cụ trên các bài kiểm tra đơn vị là không hữu ích vì mã không sử dụng vẫn có thể có các bài kiểm tra đơn vị).

Công cụ bảo hành mã miễn phí (mã nguồn mở) cho Delphi có sẵn here. Sau khi chạy nó, kiểm tra các dòng màu đỏ trong các báo cáo, đây là những dòng chưa đạt được.

Delphi Mã Vùng phủ sóng là một Mã công cụ bảo hiểm đơn giản cho Delphi tạo báo cáo mã số bảo hiểm dựa trên file MAP chi tiết.

Đối với mỗi đơn vị sẽ có unit.html với bản tóm tắt về phạm vi bảo hiểm , theo sau là nguồn được đánh dấu là . Dòng màu xanh lá cây đã được bao phủ. Đường màu đỏ không được bao phủ. Các dòng khác không có mã được tạo ra cho nó. Cũng có một tệp CodeCoverage_summary.html rằng tóm tắt mức độ phù hợp và có liên kết với các báo cáo đơn vị được tạo.

Có thể tác giả có thể thêm tính năng 'tìm kiếm mã chết' trong một phiên bản sau.

+5

Cách tiếp cận tốt, nhưng khó có thể thực hiện đầy đủ nhiều ứng dụng lớn/trưởng thành/spaghetti/di sản/crappy, chẳng hạn như các ứng dụng thường thấy trên các dự án bảo trì (thường là những người bị nghi ngờ có mã chết). Tất nhiên, một thử nghiệm hồi quy hoàn toàn tự động A..Z sẽ hữu ích. Bạn biết đấy, loại mô phỏng tập dữ liệu và bản ghi với mọi kết hợp các thuộc tính lạ, mô phỏng cuối năm, quý gần, năm nhuận, nhật thực, xử lý ngày lễ, chạy dưới dạng (cấp ứng dụng), người dùng thông thường, khách, chạy dưới dạng (OS) quản trị, người dùng thường xuyên, người sử dụng điện, tài khoản giới hạn. XP, 95, Vista, 7 ... –

+0

tiếp tục ... Và sau đó có tất cả những thứ mà tôi, với tư cách là nhà phát triển, KHÔNG có IDEA ngay cả trong chương trình. Nghe có vẻ điên rồ, nếu bạn chưa ở đó. 1, mặc dù rant của tôi ... ;-) –

0

Đối với đơn vị, sử dụng Pascal Analyzer. Bạn có thể cần phải sử dụng nó nhiều lần.

Đối với các đối tượng/lớp được đăng ký trong nhà máy lớp (và tương tự), bạn sẽ cần phải kiểm tra thủ công, vì chúng sẽ được biên dịch đầy đủ. Nguyên nhân là trình biên dịch không biết bạn thực sự sử dụng chúng hay không.

Đối với các phương pháp, bạn cần phải kiểm tra các dấu chấm màu xanh lam. Không phải là rất thực tế, vì vậy có một cách khác (từ những gì tôi đã được nói khi tôi điều tra cùng một chủ đề). Bạn cần phải làm một bản dựng đầy đủ với một tập tin bản đồ chi tiết được kích hoạt. Khi đã xong, bạn cần so sánh nguồn để xem có mục nhập trong tệp bản đồ hay không. Nếu không, thì mã không được biên dịch trong - có thể là mã chết (có thể vì nếu nó là thành phần, thì có thể là bạn không sử dụng chức năng đó).

+0

Sử dụng tệp bản đồ là một ý tưởng thú vị. Nếu tôi có thể tìm cách tạo danh sách tất cả các phương thức và lớp con đầu tiên trong cơ sở mã, hãy trích xuất danh sách các phân đoạn từ phần * Publics by Name * trong tệp bản đồ và so sánh hai tôi có thể tạo danh sách đã bị người liên kết loại trừ. –

0

Trong quá khứ tôi đã biên soạn các nguồn với Free Pascal bằng cách sử dụng chức năng "tạo bộ kết hợp", và sau đó thực hiện một số chương trình lọc đơn giản hoạt động trên nguồn. (đối với bit này rất hữu ích khi biết rằng liên kết thông minh được thực hiện bằng cách sử dụng chi tiết liên kết "phần")

Đôi khi nó cung cấp cho bạn thông tin chi tiết tại sao một số thứ không được liên kết thông minh (ví dụ: vì có một tham chiếu trong một số bảng đó là có thể Tất nhiên Delphi không phải là FPC, nhưng khi bạn có gợi ý những gì cần tìm, đó là vấn đề nhìn vào các dấu chấm ở lề sau khi biên dịch Delphi để xem nó có được liên kết thông minh hay không. hay không. Tương tự như vậy, nếu bạn tự hỏi tại sao một số mã nhất định (không) được liên kết thông minh, việc phân tích một chương trình ví dụ nhỏ được biên dịch thành assembly với FPC có thể làm cho lý do hiển nhiên. (ví dụ.bạn tìm thấy các bảng RTTI có tham chiếu đến nó)

Tuyến FPC cho phép tuyến đường có hệ thống tìm kiếm các ứng cử viên cho các thử nghiệm như vậy.

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