Trong bài này, chúng ta sẽ tìm hiểu về plugin FindBugs của Eclipse và sử dụng nó để phân tích code trong Eclipse.
FindBugs là một bộ phân tích code hoạt động trên bytecode Java và giúp xác định một loạt các lỗi tiềm ẩn hay thực thi code xấu trong các chương trình Java. FindBugs không yêu cầu mã chương trình phải được thực hiện để được phân tích cho lỗi. FindBugs giúp chúng ta phát hiện sớm các vấn đề trong giai đoạn code, nhờ đó giảm được thời gian và chi phí phát triển phần mềm.
Nội dung
Download và cài đặt plugin JAutodoc
Các bạn xem hướng dẫn ở bài viết Các plugin Eclipse thường dùng.
Cấu hình plugin Findbugs
Trên menu, chọn Windows -> Preferences -> Java -> Findbugs
Minimum Rank to report (thứ hạng tối thiểu để báo cáo)
FindBugs bắt đầu xếp hạng các lỗi với tỷ lệ từ 1 đến 20 để đo mức độ nghiêm trọng của các khiếm khuyết:
- Scariest (Rất nghiêm trọng): xếp hạng giữa 1 và 4.
- Scary (Nghiêm trọng): xếp hạng từ 5 đến 9.
- Troubling (Khó khăn/ phiền phức): xếp hạng giữa 10 và 14.
- Of concern (Quan tâm): xếp hạng từ 15 đến 20.
Đặt thứ hạng tối thiểu để báo cáo là 20 (Of concern). Điều này sẽ cho phép chúng ta xem tất cả lỗi từ kết quả đánh giá của FindBugs.
Minimum Confidence to report (Độ tin cậy tối thiểu để báo cáo)
Chia làm 3 mức:
- Low: thấp
- Medium: trung bình
- High: cao
Nếu thận trọng trong tất cả các báo cáo FindBugs, chúng ta đặt ở mức thấp (Low) để báo cáo tất cả các sự cố lỗi tiềm ẩn.
Mark Bugs with rank as (Đánh dấu mức độ cảnh báo dựa trên xếp hạng lỗi)
Tùy chọn này cho phép chúng ta thiết lập các lỗi được báo cáo là Error (Lỗi), Info (Thông tin), Warning (Cảnh báo) dựa trên xếp hạng lỗi Scariest, Scary, Troubling, Of concern.
Ví dụ, chúng ta có chọn lỗi Scariest và Scary sẽ được báo cáo là Lỗi (trong mã).
Các thiết lập khác có thể tham khảo thêm trên trang chủ của Findbugs.
Bug Categories (Các loại lỗi được báo cáo bởi Findbugs)
FindBugs chia lỗi thành nhiều loại:
- Correctness: lỗi chung như vòng lặp vô hạn, sử dụng phương equals() không đúng, …
- Bad practice: xử lý ngoại lệ (exception), mở luồng, so sánh chuỗi,…
- Performance: object khai báo nhưng không sử dụng
- Multithreaded correctness: xử lý bất đồng bộ và các vấn đề khác nhau trong môi trường đa luồng.
- Internationalization: các vấn đề liên quan đến việc mã hóa (encoding) và áp dụng quốc tế hóa (internationalization) của ứng dụng.
- Malicious code vulnerability: thu thập các lỗ hổng trong mã, ví dụ: đoạn mã có thể được khai thác để tấn công chương trình.
- Security: các lỗi bổ mật liên qua đến giao thức (protocols), SQL Injection, …
- Dodgy: so sánh không cần thiết, kiểm tra null, các biến không sử dụng, …
Sử dụng plugin Findbugs
Để chạy phân tích lỗi của FindBugs trong một project, nhấp chuột phải vào project và chọn Find Bugs … -> Find Bugs.
FindBugs cung cấp các cửa sổ chuyên biệt để xem thông báo lỗi được báo cáo. Trên menu chính, chọn Window -> Show View -> Other … -> Tìm và chọn Bug Explorer.
Như hình trên: Findbugs chỉ cho chúng ta ở dòng 10, có thể bị lỗi do chưa gán trị cho field students, fix lại bằng cách check trước khi sử dụng, hoặc khởi tạo giá trị.
Trong số trường hợp các lỗi được Findbugs phát hiện có thể tồn tại mà không gây ra bất kỳ tác hại cho chương trình, nghĩa là chúng ta có thể bỏ qua và không cần phải fix nó. Đó là lý do tại sao, trong tình huống thực tế, chúng ta cần phải cấu hình đúng các công cụ phân tích tĩnh bằng cách chọn một số giới hạn một số tùy chọn để kích hoạt trong một dự án cụ thể.
Export kết quả kiểm tra của FindBugs
FindBugs cho phép export và load các kết quả phân tích lỗi ra file xml.
Các bạn có thể tham khảo thêm trên trang chủ của Findbugs.