Search Results for 'JSR 305'

2 POSTS

  1. 2006.10.05 JSR305 1
  2. 2006.10.04 JSR 305 Annotations for Software Defect Detection

JSR305

Posted 2006. 10. 5. 16:02
Jsr-305 -- Annotations for Software Defect Detection란 글에서 소프트웨어 버그 탐지 도구를 위한 표준 어노테이션을 제정하는 JSR 305에 대한 간략한 소개를 한 바 있다. 초안(first draft)이 11월에 나오기로 되어 있기 때문에 아직 자세한 내용을 알 수는 없지만, JSR 홈페이지에 가보면 몇 가지 예제를 볼 수 있다.

Nullness annotations (e.g., @NonNull and @CheckForNull). Both FindBugs and IntelliJ already support their own versions of nullness annotations.


일단 FindBugs가 "David Hovemeyer, Jaime Spacco, and William Pugh. Evaluating and Tuning aStatic Analysis to Find Null Pointer Bugs, Proceedings of the 2005 ACM SIGPLAN-SIGSOFTWorkshop on Program Analysis for Software Tools and Engineering (PASTE 2005),Lisbon, Portugal, September, 2005." 논문에서 소개한 어노테이션으로 @NonNull, @CheckForNull 등이 있다. 메쏘드의 인자에 @NonNull의 어노테이션이 붙어있다면 해당 인자는 절대 null이 되지 않으므로 null 검사 없이 사용이 가능하다. 반대로 @CheckForNull이면, null이 될 수도 있는 인자이므로 반드시 null 검사를 한 후에 사용해야 한다. 이런 정보를 모아서 정적 검사 도구는 프로그램을 실행시켜 보기도 전에 '널 포인터 오류'가 발생할 것인지를 어느 정도 찾아낼 수 있게 된다.

Check return value annotation - an annotation that says ignoring the return value of a method is likely incorrect (e.g., String.toLowerCase())

또 하나의 활용 처는 리턴 값을 반드시 체크해야 하는지 여부를 어노테이션으로 표시하는 것이다. JSR에서 예를 든 것처럼 String.toLowerCase() 함수를 살펴보자. 자바의 String은 immutable 클래스이다. 따라서 toLowerCase() 메쏘드를 호출하면 해당 객체의 문자열을 소문자로 치환하는 것이 아니라 소문자로 치환된 새로운 문자열을 리턴해준다. 이 메쏘드를 호출하면서 리턴 값을 무시했다면 무엇인가 잘못 생각했음이 틀림 없다. String.toLowserCase()에 리턴 값을 반드시 체크하라는 어노테이션이 있다면, 결함 검사 도구가 오류를 자동으로 찾아낼 수 있을 것이다.

그 외에도 Taint, Concurrency 등 여러 가지 이슈에 대한 어노테이션을 생각 중이라고 한다. 이런 어노테이션 표준화로 얻을 수 있는 장점은 한 번 코드를 어노테이션 해놓으면 여러 검사 도구를 이용해서 다양한 버그를 자동으로 검출할 수 있다는 점이다. 현재는 FindBugs를 비롯한 개별 검사 도구가 각자 다른 어노테이션을 요구하므로, 검사 도구를 수행하기 위한 오버헤드가 상당하기 때문이다.

[참고자료]
1. JSR 305: Annotations for Software Defect Detection
2. Artima: Annotations for Java Software Defect Detection

Univ. of Maryland 있을 때 교수랑 대학원생들의 프로그래밍 언어 연구 모임(Software Chat)에 나갔었는데, 그때 가입한 메일링 리스트에서 종종 세미나 공지나 여러 이슈에 대한 알림글이 옵니다.

며칠 전에는 자바 메모리 모델(Java Memory Model)과 FindBugs로 유명한 Bill Pugh 교수님이 JSR 305 - 소프트웨어 결함 탐지를 위한 어노테이션을 출범했다고 메일을 보냈네요.

자바 쪽에 왕성한 활동을 하더니 JSR 스펙 리드도 맡고 있군요. 원래 FindBugs 프로젝트할 때 메쏘드 인자와 리턴 타입에 @Nullable, @NonNull, @CheckForNull 등의 어노테이션을 이용해서, 널 포인터 버그를 검사하는 등의 일을 했었는데, 이런 어노테이션을 표준화하려는 노력으로 보입니다.

개인적으로 가장 많은 관심을 가지고 있는 소프트웨어가 자동 버그 탐지 도구 쪽이라 관심이 많이 가네요.  메일링 리스트는 여기입니다.