황상철님의 애자일 SCRUM 방법론 적용기와 이상민님의 GWT 그리고 GWT-ext 세션에 이어서 제가 findbugs 예찬론을 폈습니다. (각 링크마다 발표자료 있습니다.)
FindBugs
- 삼성SDS 자바 커뮤니티 세미나 후기 2008.11.27 3
- Hudson 업그레이드 2008.11.26 6
- 삼성SDS 자바 개발자 세미나 발표 자료: findbugs 2008.11.26
- Hudson의 Findbugs 플러그인 이용하기 2008.11.24 2
- 이클립스의 버그 경고 기능 2008.11.21 4
- [okjsp세미나]Hudson과 프로젝트 모니터링-2008/11/15 2008.11.06
- 리팩토링을 위한 냄새 발견용 도구, CheckStyle, PMD 2008.11.05 2
- findbugs ant task timeout 속성 2008.10.10
- findbugs eclipse plugin 2008.10.08 3
- 버그 찾아드립니다. 2008.09.30 6
삼성SDS 자바 커뮤니티 세미나 후기
황상철님의 애자일 SCRUM 방법론 적용기와 이상민님의 GWT 그리고 GWT-ext 세션에 이어서 제가 findbugs 예찬론을 폈습니다. (각 링크마다 발표자료 있습니다.)
Hudson 업그레이드
삼성SDS 자바 개발자 세미나 발표 자료: findbugs
Hudson의 Findbugs 플러그인 이용하기
Manage Plugins 를 선택하고, Available탭에서 findbugs 플러그인을 설치합니다.
hudson을 콘솔에서 재시작하고, 프로젝트의 configure 메뉴에 가면 findbugs 활성화 체크박스가 하단에 보입니다. 체크하면 hudson에서 findbugs 플러그인이 활성화됩니다.
Build 섹션에서 Add Build Step버튼을 클릭해서 findbugs 빌드를 추가합니다. 빌드서버에 설치된 findbugs 경로를 findbugs.home 에 지정합니다. 환경변수에 $FINDBUGS_HOME으로 지정되면 이 과정이 필요없습니다.
build.xml 의 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경로가 있는 줄을 추가하면 위 경고가 해결됩니다.
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 플러그인을 깔지 않아도 가니메데에서는 런타임 익셉션에 대한 경고가 뜨게 됩니다. 먼저 이미지를 보시죠.
Null pointer access라는 메시지가 보입니다. 실행결과 나타나는 것도 아니고, 코드 분석 후 뿌려지는 내용입니다. 아직 깊이 맛본 기능은 아니지만 이클립스의 똑똑해지는 모습이 가볍게만 느껴지지 않습니다.
박현준님 감사합니다. ^^
[okjsp세미나]Hudson과 프로젝트 모니터링-2008/11/15
프로젝트 모니터링이라고 제목을 정한 이유는 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
이름:
닉네임:
이메일:
휴대폰:
본 강의는 실습강의가 아닙니다.
리팩토링을 위한 냄새 발견용 도구, CheckStyle, PMD
http://www.ibm.com/developerworks/kr/library/j-ap07088/index.html?ca=drs-kr
findbugs를 통해서 코드의 취약성을 발견할 수 있었습니다.
CheckStyle, PMD, JDepend 등의 도구는 코드의 유지보수성과 가독성, 확장성을 떨어뜨리는 구문을 찾아줍니다.
이러한 도구들의 사용법과 리팩토링에 대한 글이 올라왔습니다. 아울러 글에서는 Switch구문을 polymorphism으로 리팩토링하기, 중복코드 줄이기, 긴 메소드(큰 클래스) 경량화하기, 너무 많은 import 줄이기 등에 대한 예들이 나옵니다.
참고하시면 좋은 애플리케이션 만드는데 큰 힘이 될 것입니다.
findbugs ant task timeout 속성
findbugs-ant.jar 파일을 $ANT_HOME/lib 에 복사한 뒤에 findbugs task를 사용할 수 있습니다.
파일이 많아지면 timeout이나 memory 이슈가 생길 수 있습니다.
참고용으로 적어봅니다.
<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>
조대협님 감사합니다. ^^
findbugs eclipse plugin
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역할을 하는 동료가 짐을 덜었다고 좋아하던데, 자기가 짠 코드의 결함 검사는 스스로하는 것이 바람직할 듯 합니다. 경기 후 어지러진 관중석을 보는 듯한 코드는 으윽 이니까요.