황상철님의 애자일 SCRUM 방법론 적용기와 이상민님의 GWT 그리고 GWT-ext 세션에 이어서 제가 findbugs 예찬론을 폈습니다. (각 링크마다 발표자료 있습니다.)
30명이 안되는 인원이 모였고, 반은 SDS소속 반은 인터넷을 통해서 신청받은 분들이 모였습니다.

세 세션의 공통점이 있는 듯 했습니다.
회사 조직은 새로운 것을 나에게 요구하지 않는다. 
그래서 내가 새로운 방법과 기술을 익혀도 회사는 무관심하다.
새로운 것을 적용해 프로세스를 개선하려고 해도 회사 조직은 달가워하지 않는다.
귀찮아 한다. 이렇게 말하면서 "좋아 보이는군요. 하지만 너무 이상적이라 우리 팀에는 맞지 않아요." 시도하기를 꺼린다.
때문에 새로운 것을 적용하려면 또 다른 노력이 필요하다. 

황상철님의 소규모의 성공 사례부터 만들어 나가기를 얘기했고, 제 생각은 사람들의 행동을 이끌어 내는 것은 감동이기 때문에 쇼를 하라고 얘기합니다. 이상민님은 쉬면서 멋진 GWT 애플리케이션을 만드셨더군요.

9시까지 예정이었지만 25분씩 발표로 8시 반 정도에 끝나고 뒷풀이 장소로 옮겼습니다.

거대 조직 내의 조용한 움직임.
당장은 효과가 없지만, 10년, 20년 지난 우리나라 업계의 중요한 뿌리가 될 것입니다.
꽃이야 C자 들어간 직위의 사람들 몫이죠. 
Hudson 메인 페이지의 Manage Hudson 메뉴로 이동하면 신규 버전 알림이 노란 줄로 뜹니다. download 링크를 클릭하면 바로 다운 받을 수 있죠. 그리고 플러그인의 업데이트는 Manage Plugins 설명에 (updates available) 이라고 빨간 글씨로 보입니다.


Manage Plugins로 가면 Updates 탭에 해당 플러그인이 보입니다. 체크하고 우측 하단의 Install 버튼을 클릭하면 업데이트가 진행됩니다. 

대체로 설치 후에 hudson을 재시작해줘야 됩니다.



그리고 다른 얘기인데, findbugs 플러그인에서 보여주듯이 okjsp사이트의 버그는 다 잡았습니다. 냐호~



파일 첨부합니다.
지난 발표자료에 적용점에 대한 고민만 살짝 추가했습니다.
okjsp 사이트의 버그는 하나 남았습니다.
이것도 곧 잡으러 출격합니다.

hudson의 최상위 페이지의 메뉴 "Manage Hudson(Hudson의 관리)" 메뉴로 갑니다.

Manage Plugins 를 선택하고, Available탭에서 findbugs 플러그인을 설치합니다.

hudson을 콘솔에서 재시작하고, 프로젝트의 configure 메뉴에 가면 findbugs 활성화 체크박스가 하단에 보입니다. 체크하면 hudson에서 findbugs 플러그인이 활성화됩니다.

Build 섹션에서 Add Build Step버튼을 클릭해서 findbugs 빌드를 추가합니다. 빌드서버에 설치된 findbugs 경로를 findbugs.home 에 지정합니다. 환경변수에 $FINDBUGS_HOME으로 지정되면 이 과정이 필요없습니다.

build.xml 의 findbugs 타겟 소스는 참고로 다음과 같습니다.
    <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"/>
   <target name="findbugs">
      <findbugs home="${findbugs.home}"
                output="xml:withMessages"
                outputFile="findbugs.xml" >
        <sourcePath path="${basedir}/src" />
        <class location="${publish.home}/WEB-INF/classes" />
      </findbugs>
    </target>

콘솔에 다음과 같은 메시지가 찍히면서 findbugs에 대한 보고서를 확인할 수 있습니다.

참조하는 jar파일의 경로가 지정되지 않으면 이런 메시지가 나타납니다.

 [findbugs] The following classes needed for analysis were missing:
[findbugs]   javax.servlet.http.HttpServlet
[findbugs]   javax.servlet.Servlet

findbugs 태스크에 다음과 같은 jar경로가 있는 줄을 추가하면 위 경고가 해결됩니다.
      <findbugs home="${findbugs.home}"
                output="xml:withMessages"
                outputFile="findbugs.xml" >
       <auxClasspath path="${catalina.home}/common/lib/servlet-api.jar" />
        <sourcePath path="${basedir}/src" />
        <class location="${publish.home}/WEB-INF/classes" />
      </findbugs>


버그의 추이가 그래프로 나타납니다.

버그의 자세한 리포트는 프로젝트 왼쪽 메뉴의 FindBugs Warnings 를 통해서 확인가능합니다.

이제 남은 일은 버그의 수를 줄이는 것이겠죠.
findbugs 세미나 중에 박현준님 덕분에 알게 된 기능입니다.
findbugs 플러그인을 깔지 않아도 가니메데에서는 런타임 익셉션에 대한 경고가 뜨게 됩니다. 먼저 이미지를 보시죠.

Null pointer access라는 메시지가 보입니다. 실행결과 나타나는 것도 아니고, 코드 분석 후 뿌려지는 내용입니다. 아직 깊이 맛본 기능은 아니지만 이클립스의 똑똑해지는 모습이 가볍게만 느껴지지 않습니다.

박현준님 감사합니다. ^^

프로젝트 모니터링이라고 제목을 정한 이유는 Continuous Integration 은 평소 잘 하라는 의미입니다. 빅뱅통합이라고 하는 프로젝트 오픈 직전의 코드 통합은 전장을 방불케합니다. 평소에 만들어지는 코드에 대한 건강진단은 프로젝트가 산으로 가는 것을 막아줍니다. 그리고 버그가 숨어있을 여지도 줄여줍니다.

이번 세미나는 hudson을 중심으로 프로젝트의 건강상태를 모니터링할 수 있는 방법에 대해서 공유하려고 합니다.

소스 코드 공유
 - SVN,CVS
 - 저장소의 무결성
빌드서버
 - only for application source codes
Hudson
 - Continuous Integration Tools
 - Build Automation
 - Plugins
Project Report
 - JUnit
 - FindBugs
 - Checkstyle
 - PMD


강사: 허광남 okjsp운영자

장소: 아트레온 토즈 (신촌역 4번출구 아트레온극장 14층)
약도: http://www.toz.co.kr/v2/01about/pop_map_art.gif

일시: 2008/11/15 토 오전 10:00~12:00

회비: 20,000원 (당일 접수, 영수증 가능)

인원: 선착순 25명

 

메일로 신청받습니다.

kenu 골뱅 okjsp.pe.kr

 

이름:

닉네임:

이메일:

휴대폰:

 

본 강의는 실습강의가 아닙니다.

 

백기선님이 잘 번역하신 글입니다.
http://www.ibm.com/developerworks/kr/library/j-ap07088/index.html?ca=drs-kr 
findbugs를 통해서 코드의 취약성을 발견할 수 있었습니다.

CheckStyle, PMD, JDepend 등의 도구는 코드의 유지보수성과 가독성, 확장성을 떨어뜨리는 구문을 찾아줍니다.
이러한 도구들의 사용법과 리팩토링에 대한 글이 올라왔습니다. 아울러 글에서는 Switch구문을 polymorphism으로 리팩토링하기, 중복코드 줄이기, 긴 메소드(큰 클래스) 경량화하기, 너무 많은 import 줄이기 등에 대한 예들이 나옵니다.

참고하시면 좋은 애플리케이션 만드는데 큰 힘이 될 것입니다.

findbugs-ant.jar 파일을 $ANT_HOME/lib 에 복사한 뒤에 findbugs task를 사용할 수 있습니다.
파일이 많아지면 timeout이나 memory 이슈가 생길 수 있습니다.

참고용으로 적어봅니다.


        <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" />
        <target name="findbugs" depends="compile">
                <findbugs home="${findbugs.home}" output="xml" outputFile="findbugs.xml"
                        jvmargs="-Xms512M -Xmx1024M " timeout="1800000">
                        <auxClasspath path="${findbugs.home}/lib/Regex.jar" />
                        <sourcePath path="WebContent/WEB-INF/src" />
                        <class location="WebContent/WEB-INF/classes" />
                </findbugs>
        </target>


조대협님 감사합니다. ^^


update site url 입니다. http://findbugs.cs.umd.edu/eclipse/
설치가 완료되면 다음과 같은 메뉴가 보입니다.

테스트용으로 에러를 발생시키는 소스를 만들어서 테스트 해봅니다.

package net.okjsp;

public class HelloWorld {

 /**
  * @param args
  */
 public static void main(String[] args) {
  String arg = null;
  System.out.println("Hello World! "+arg.equals("0"));

 }

}


문제가 되는 라인 앞에 버그가 표시됩니다. 더블클릭하면 하단에 findbugs 뷰가 생깁니다.


해당 버그의 내용과 수정 방법에 대해서 표시됩니다.

뷰 메뉴 중 findbugs 퍼스펙티브로 전환하는 아이콘도 있습니다.

클릭하면 다음과 같은 정보를 확인할 수 있습니다.

이제 쎄스코를 부르지 않아도 될 것 같습니다.

 


http://findbugs.sourceforge.net 메릴랜드(Maryland) 대학에서 공개한 도구입니다. 자바의 버그패턴에 맞춰서 자바 소스코드를 컴파일된 바이트코드로 정적 분석한 후에 어느 부분이 문제가 되는지 자동 리포팅해줍니다.
누군가 내 코드를 검사한다는 것이 개발자에게는 탐탁치 않지만 임신진단시약처럼 자가테스트를 한다면 다른 얘기가 되겠죠. 남에게 보이기 전에 자신의 코드를 깔끔하게 만들 수 있으니까요.

그러나 바쁜 현대인을 위해서 지속적인 통합툴에서 대신해 주기도 합니다. (참고: http://www.ibm.com/developerworks/kr/library/tutorial/j-cq11207/section11.html )

이클립스 플러그인도 있습니다. findbugs의 수많은 옵션을 알지 못해도 간단하게 마우스 버튼으로 조작해서 사용할 수 있습니다. (참고: http://findbugs.sourceforge.net/manual/eclipse.html )

QA역할을 하는 동료가 짐을 덜었다고 좋아하던데, 자기가 짠 코드의 결함 검사는 스스로하는 것이 바람직할 듯 합니다. 경기 후 어지러진 관중석을 보는 듯한 코드는 으윽 이니까요.

+ Recent posts