FindBugs는 작성한 프로그램의 잠재적인 결함을 찾아주는 도구이다.


Eclipse 메뉴의 Help > EclipseMarketplace를 실행한 뒤 "findbug"를 검색한다.

다음 그림과 같이 검색된 결과를 설치(install)하면 된다.

설치가 완료되면 Eclipse를 재시작한다.


메뉴에서 Window > Show View > Other를 선택한다.

FindBugs의 Bug Explorer를 선택하고 OK를 선택한다.

Eclipse 하단에 Bug Explorer 뷰가 추가 되어 있는 것을 확인할 수 있다.


프로젝트(board)를 선택하고 마우스 오른쪽 버튼을 눌러 컨텍스트 메뉴를 실행한다.

Find Bugs > Find Bugs를 눌러서 실행한다.


실행 결과 Bug Explorer 뷰에 버그가 없는 것으로 나타난다.


따라서, 다음과 같이 버그를 만들어 실행해 본다.

먼저, board4Ctr의 리스트(board4List) 컨트롤에 다음 색칠된 문장을 추가해 준다.

    @RequestMapping(value = "/board4List")
       public String boardList(SearchVO searchVO, ModelMap modelMap) throws Exception {

        String a = null;
        if (a.equals("a")) a = "error";
       
        searchVO.PageCalculate( boardSvc.selectBoardCount(searchVO) ); // startRow, endRow

        List<?> listview   = boardSvc.selectBoardList(searchVO);
       
        modelMap.addAttribute("listview", listview);
        modelMap.addAttribute("searchVO", searchVO);
        return "board4/boardList";
    }

board4Ctr.java

Find Bugs를 실행하면 다음과 같은 결과가 나오게 된다.

이것은 변수의 값이 Null이라 문제가 생긴다는 의미이다. 

다음과 같이 작성하면 문제를 해결할 수 있다.

if ("a".equals(a)) a = "error";

앞뒤 순서만 바뀐 것 같지만 의미가 다르다.

변수 a 가 Null인데 equals를 사용하면 Null 인데 사용했다고 Null pointer 오류가 발생한다.

Null은 아무 것도 없는 상태로 어떠한 메소드도 사용할 수 없다.

하지만 문자열 "a"에 equals을 사용하면

문자열 "a"는 값이 있는 상태이므로 오류가 발생하지 않는다.

(예제는 변수 값을 Null로 고정한 상태라 Hign confidence에서 Normal confidence로 오류 등급이 떨어진다.)

변수 a는 Null이어도 상관이 없다.


이러한 코드는 컴파일에서는 문제가 없지만

변수의 값에 따라 오류가 발생하기도 하고, 안하기도 하는 귀찮은 문제를 발생시킬 수 있다.



'Java > 게시판 기타: 품질 등' 카테고리의 다른 글

5. PMD와 예외처리(Exception)  (2) 2016.05.07
1. 프로그램 작성 외의 것들  (1) 2016.04.24
2. CheckStyle I - 설치  (0) 2016.04.23
3. CheckStyle II  (0) 2016.04.23

+ Recent posts