Đôi khi, người ta cần đào sâu vào mã của người khác, hiểu mã và có thể tái cấu trúc/sửa lỗi. Tôi tự hỏi bạn sử dụng công cụ/thực hành nào để làm điều đó? Nó không phải về bất kỳ ngôn ngữ hoặc nền tảng cụ thể nào, thay vì một số lời khuyên nói chung.
Bản thân tôi thấy rất hữu ích khi chạy mã được đề cập dưới trình gỡ lỗi (nếu có thể), hãy đặt các điểm ngắt và bước qua mã.
Ngoài ra tôi đã sử dụng một vài công cụ UML với các tính năng kỹ thuật đảo ngược để xem bức tranh lớn. Visualization hoạt động khá tốt đối với tôi.
Có một công cụ mà tôi đã sử dụng khá nhiều: Understand. Nó không phải là một công cụ UML, nhưng nó có một loạt các hiển thị cho mã. Ví dụ sơ đồ điều khiển dòng chảy cho một hàm, mà không phải là một phần của UML, nhưng đôi khi nó rất hữu ích.
Tôi đã nghe nói rằng đôi khi mọi người viết các bài kiểm tra cho mã họ muốn tìm hiểu, nhưng nó đã không làm việc cho tôi. Đôi khi mã tôi muốn hiểu không phải là rất dễ kiểm chứng.
Có các công cụ khác, như profilers, checkers phụ thuộc, logger vv. Có ai sử dụng nó với bất kỳ thành công nào không? Và làm thế nào?
Điều đầu tiên sử dụng là gì? Tiếp theo là gì?
Công cụ và các phương pháp hay nhất để hiểu mã của người khác
Trả lời
Tôi đã ở trong tình huống này trước đây ... Không vui lắm. Cách tốt nhất tôi đã tìm thấy là viết các bài kiểm tra đơn vị để bao gồm các lĩnh vực sẽ thay đổi. Ngay cả khi các thử nghiệm đã tồn tại, điều này cho bạn trải nghiệm với cả api và hành vi của mã bạn dự định tái cấu trúc. Ngoài ra, bạn có được nhiều thử nghiệm hơn để xác minh việc triển khai thay thế.
Bạn đang tìm kiếm cấu trúc cấp cao, như mô-đun, không gian tên và thiết kế lớp học? Hoặc bạn đang cố gắng hiểu nội bộ của các lớp học, ví dụ: các dòng mã cụ thể hoạt động như thế nào? Đó là hai loại công cụ phân tích khác nhau.
Thông thường, tôi chia các loại yêu cầu thành 2 phe:
Fix lỗi, không phải là toàn bộ mã. Trong trường hợp này, tôi có xu hướng đọc mã và xem liệu tôi có thể dễ dàng đưa vào bản sửa lỗi mà không thực hiện các thay đổi quan trọng lớn hay không, ví dụ: thêm 5 dòng mã hoặc ít hơn. Đây là nơi mà những thay đổi được thực hiện giống như một cuộc tấn công phẫu thuật mà tác động tối thiểu để đạt được kết quả mong muốn.
Cắt mã xuống và đưa ra nhiều thứ tốt hơn. Trong trường hợp này, không có cách nào tốt để thực hiện thay đổi hoặc có rất nhiều thay đổi nhỏ muốn được đưa vào một dự án nhỏ, nơi tiêu hóa tất cả mã là cần thiết và đây không phải là một thay đổi nhỏ nhanh chóng . Lấy một trang ASP và đưa nó vào khung .Net mới nhất sẽ là một ví dụ ở đây.
Xác định loại thay đổi nào đó đòi hỏi một chút thực hành và trải nghiệm những gì người khác có thể gọi, "Một điều nữa nếu bạn có thể ..." xem nó theo cách đó, ví dụ chúng ta có thể thêm một mô-đun nhỏ để ghi lại bất kỳ lỗi nào và gửi cho tôi một email khi có sự cố không xảy ra sau khi tất cả các yêu cầu khác được thực hiện như thế nào nếu mã không thể gửi thư làm.
Sắp xếp nền tảng cụ thể, nhưng ReSharper rất tuyệt vời để trêu chọc ý nghĩa ẩn của mã .NET. Tôi thích tính năng "Tìm Sử dụng Nâng cao" nơi bạn có thể tìm kiếm các bộ, nhận, triển khai, v.v.
Hãy kiểm tra nWire.Nó là một plugin Eclipse, hiện đang cho Java & PHP, phân tích mã của bạn và cung cấp các công cụ tìm kiếm, tìm kiếm và tìm kiếm mã. Công cụ này là về việc hiểu các liên kết trong mã của bạn: các cấu trúc phân cấp lớp, các lời gọi, các sự kiện và mọi thứ khác.
Tôi thấy nó rất hữu ích để đào vào đống mã (BTW, đối với tôi, ngay cả mã của riêng tôi trở nên xa lánh sau một vài tháng không chạm vào nó).
- 1. Tài liệu mã thư viện C++/CLI để sử dụng từ C# - các công cụ và phương pháp hay nhất?
- 2. Mã C# tuyệt vời để tìm hiểu các mẫu thiết kế và các phương pháp hay nhất từ?
- 3. Các phương pháp hay nhất để triển khai các công cụ và tập lệnh vào sản xuất?
- 4. Sách hay nhất để tìm hiểu công cụ ứng dụng của Google và GWT?
- 5. Các phương pháp hay nhất về Javascript
- 6. Tiêu chuẩn mã hóa Python/các phương pháp hay nhất
- 7. Các phương pháp hay nhất về iFrame
- 8. php và mysql, các phương pháp hay nhất
- 9. Các phương pháp hay nhất để xóa dữ liệu khi chấm dứt tài khoản người dùng
- 10. Các phương pháp hay nhất để ký hợp đồng .NET?
- 11. Các phương pháp hay nhất để tương thích ngược API
- 12. Phương pháp hay nhất để hạn chế các trang cụ thể cho người dùng đã đăng nhập chỉ trong Codeigniter?
- 13. Có công cụ OCaml để hỗ trợ sử dụng các phương pháp hay nhất như Perl :: Mô-đun Critic không?
- 14. Có công cụ hợp nhất nào để kiểm soát nguồn hiểu mã không?
- 15. Phương pháp hay nhất để đánh dấu mã không dùng nữa trong Ruby?
- 16. Các phương pháp hay nhất để lưu trữ cài đặt giao diện người dùng?
- 17. Các phương pháp hay nhất của MySQL để sử dụng SQL_CACHE và SQL_NO_CACHE
- 18. Chuỗi kết nối Các phương pháp hay nhất
- 19. Chuỗi Python để liệt kê các phương pháp hay nhất
- 20. Đo lường hiệu suất Javascript (jQuery) và các phương pháp hay nhất (không tải thời gian)
- 21. Các phương pháp hay nhất để ngăn chặn CSS và JavaScript cũ
- 22. Các phương pháp hay nhất để thiết kế API công khai RESTful trên Rails là gì?
- 23. Các phương pháp hay nhất để ngăn chặn tấn công từ chối dịch vụ ở Django
- 24. Các phương pháp hay nhất của Team City để triển khai nhiều tầng là gì?
- 25. Cách triển khai thiết kế web đáp ứng và các phương pháp hay nhất của mình
- 26. Các phương pháp hay nhất của Google App Engine và Git
- 27. Các phương pháp hay nhất cho quy trình làm việc của ứng dụng web?
- 28. Zend Framework: Sử dụng Mô hình và Chế độ xem, các phương pháp hay nhất
- 29. Các phương pháp hay nhất về Chẩn đoán mạng?
- 30. Danh sách SharePoint Các phương pháp hay nhất
Cả hai. Đối với tôi, việc hiểu mã là dễ dàng hơn khi tôi nhìn thấy một bức tranh lớn và sau đó đi xuống mức thấp. – Max