Findbugs
Findbugs?
- Java 프로그램에서 발생할 수 있는 버그를 감지하는 오픈소스 정적 코드 분석기.
- 정적 코드 분석기 : 프로그램 실행 없이 바이트코드를 분석하여 문제를 발견한다.
- Eclipse, NetBeans, IntelliJ, Gradle, Hudson, Maven, Bamboo, Jenkins 용 플러그인이 있다.
식별하는 오류(문제)의 종류
Null 포인터, 자원 누수, 경합 상태 등의 다양한 문제를 탐지할 수 있다.
오류(문제) | 설명 |
NullPointerException 관련 | |
Null Dereference | Null 값이 들어갈 가능성이 있는 객체를 참조하려고 할 때 발생하는 오류. 이 오류는 실제 실행 중 NullPointerException을 유발할 수 있기 때문에 코드의 안정성을 떨어뜨린다. |
Possible Null Dereference | 조건에 따라 특정 경로에서 NullPointerException이 발생할 가능성이 있는 경우. 모든 코드 경로를 분석하여 Null 가능성을 검사한다. |
리소스 누수 관련 | |
Unclosed Resource | 파일, 네트워크 연결, 데이터베이스 연결 등의 리소스가 사용 후에 닫히지 않는 경우 발생하는 오류. 리소스를 닫지 않으면 메모리 누수나 시스템 자원 낭비를 초래할 수 있다. |
Potential Resource Leak | 특정 조건에서만 리소스가 닫히지 않을 가능성이 있는 경우 탐지한다. try-finally 블록에서 리소스를 적절히 닫지 않을 경우 발생할 수 있다. |
보안 문제 | |
SQL Injection | 사용자가 입력한 데이터가 검증 없이 SQL 쿼리에 포함될 경우 발생하는 문제. 이를 통해 악의적인 사용자가 데이터베이스를 침해할 수 있다. |
Hardcoded Password | 코드에 하드코딩된 비밀번호가 포함되어 있는 경우 발생. 이는 보안에 심각한 위협을 가할 수 있으며, 보안 규칙에 어긋난다. |
스레드 동기화 문제 | |
Deadlock | 두 개 이상의 스레드가 서로 락을 획득하려고 하다가 영원히 대기 상태에 빠지는 문제. FindBugs는 코드에서 상호 대기 조건을 탐지하여 잠재적인 교착 상태를 경고한다. |
Synchronization on Non-final Field | 동기화되지 않은 객체나 값이 여러 스레드에서 동시에 접근될 수 있는 경우, Race Condition이 발생할 가능성이 크다. 이러한 필드에 대한 동기화가 필요함을 경고한다. |
그 외 | - 불필요하거나 위험한 코드 사용 : 사용되지 않은 변수, 호출될 가능성이 없는 메서드 - 잘못된 API 사용 : API가 요구하는 인수 타입과 일치 여부 - 예외 처리가 필요한 부분에서 예외 처리가 되었는지 여부 - 성능 문제 : 문자열 연결 연산이나 불필요한 래핑 과정을 탐지해서 성능 최적화를 권고 - 타입 오류 : 데이터 타입 간 잘못된 형변환 탐지, 불필요한 형변환 탐지 |
식별되는 문제의 심각성 단계
잠재적 오류 단계 | 단계 이름 | 단계 설명 |
---|---|---|
scariest | 최고 심각 | 가장 심각한 단계로, 코드 실행 중 치명적인 오류를 유발할 가능성이 매우 높다. NullPointerException, 리소스 누수, 교착 상태(Deadlock) 등과 같이 프로그램의 중단이나 주요 기능의 실패를 유발할 수 있는 오류들이 여기에 속한다. |
scary | 심각 | 심각한 오류로 분류되며, 반드시 해결해야 할 문제들이다. 코드 동작에 직접적인 문제를 일으킬 가능성은 높지 않지만, 장기적으로 코드의 품질이나 안정성을 저하시킬 수 있다. 이러한 문제는 프로그램의 성능이나 유지보수성에도 영향을 미칠 수 있다. |
troubling | 문제 가능성 있음 | 프로그램의 동작에 직접적인 문제를 일으키지는 않지만, 코드가 오작동할 여지를 남기는 오류들이다. 특정 상황에서만 문제를 유발하거나, 잘못된 코드 작성 관행으로 인해 코드의 가독성이나 효율성을 떨어뜨릴 수 있는 오류들이 여기에 속한다. |
of concern | 주의 요망 | 비교적 심각성이 낮은 문제로, 프로그램에 직접적인 문제를 일으키지 않을 가능성이 높지만, 코드 품질에 있어 개선이 필요한 부분들. 코드의 가독성이나 유지보수성을 높이기 위해 확인하고 수정하는 것이 좋다. |
이클립스 FindBugs 플러그인을 이용한 문제점 탐지
플러그인 설치
이클립스 실행 > Help > Eclipse Marketplace
findbugs 검색 > Install > 설치 완료 후 Installed 확인
이클립스 재시작
FindBugs 실행 준비
이클립스 > Windows > Show View > Other
FindBugs > Bug Explorer 선택 후 OK 클릭
하단 창에 Bug Explorer 뷰가 추가됨을 확인
FindBugs 실행
소스폴더 우클릭하여 컨텍스트 메뉴 > Find Bugs > Find Bugs 클릭
Bug Explorer 뷰에서 식별된 버그 목록 출력됨
식별된 버그 전부 픽스 후에는 다시 Source > Find Bugs > Find Bugs를 하면 조치 결과를 확인할 수 있습니다. (모두 조치되었다면 아무런 결과도 안나오고, 미조치 사항은 출력됨)
Reference
Wikipedia - FindBugs
Eclipse Plugin - FindBugs
Hompage - FindBugs