J2EE 베스트 프랙티스 코드 검토

J2EE 베스트 프랙티스 코드 검토는 하나의 카테고리로만 구성됩니다. J2EE 베스트 프랙티스라고도 합니다.

목적

J2EE 베스트 프랙티스 코드 검토는 기본의 방식으로는 발견하기 매우 어려운 코드의 앤티패턴을 발견하는 규칙을 적용합니다. 앤티패턴은 코드에서 발생하는 알려진 문제점으로 베스트 프랙티스를 따르지 않습니다. 설계 패턴이 준수해야 하는 올바른 모델인 반면 앤티패턴은 피해야 하는 잘못된 모델입니다. 이러한 앤티패턴 때문에 심각한 성능 저하 또는 시스템 정전이 발생할 수 있습니다. 이 코드 검토는 servlet에서만 실행됩니다. servlet은 다음 스텁(stub) 중 하나를 대상으로 하는 동적 웹 프로젝트에 있어야 합니다.
  • WebSphere® Application Server 5.0
  • WebSphere Application Server 5.1
  • WebSphere Application Server 6.0
JSP, strut 및 EJB는 지원되지 않습니다.

코드 검토의 일부 규칙은 일부 결과를 발견할 때 데이터 플로우 분석을 요구합니다. 데이터 플로우 분석은 결과의 경로를 추적합니다. 따라서 이러한 규칙을 적용하면 코드 검토를 완료하는 데 더 많은 시간이 걸립니다.

규칙 카테고리

다음 테이블에서는 J2EE 베스트 프랙티스 코드 검토에 있는 모든 카테고리 및 서브카테고리와 함께 각 카테고리의 규칙에 대한 설명을 나열합니다. 왼쪽 열에서 카테고리는 굵은 텍스트로, 서브카테고리는 일반 텍스트로 표시됩니다.

카테고리 또는 서브카테고리 설명
J2EE 베스트 프랙티스 베스트 J2EE 개발 프랙티스에 기반한 규칙을 포함하고 WebSphere 서버를 대상으로 하는 웹 프로젝트를 지원합니다.
정확성 잘못된 메소드 호출을 발견하는 규칙을 포함합니다.
데이터 레이스 J2EE 어플리케이션에서 데이터 레이스 상태의 원인이 되는 메소드 호출을 발견하는 규칙을 포함합니다.
가비지 콜렉션 가비지 콜렉션을 지연시킬 수 있는 메소드 호출을 발견하는 규칙을 포함합니다.
유지보수성 J2EE 어플리케이션에서 유지보수하기 어려울 수 있는 코드를 발견하는 규칙을 포함합니다.
성능 및 확장성 J2EE 어플리케이션의 성능을 떨어뜨리고 확장성을 제한하는 메소드 호출을 발견하는 규칙을 포함합니다.
자원 관리 J2EE 어플리케이션에서 자원을 사용할 때 필요한 J2EE 베스트 프랙티스 규칙을 포함합니다.

규칙 유형

J2EE 베스트 프랙티스 코드 검토는 두 가지 유형의 규칙(빠른 규칙 및 심층 규칙)을 적용합니다. 규칙을 적용하는 데 걸리는 시간 및 규칙이 결과에 표시하는 정보의 유형과 같은 특성으로 규칙 유형을 구별합니다.

J2EE 빠른 규칙

J2EE 빠른 규칙은 심층 규칙보다 J2EE 베스트 프랙티스 코드 검토에서 적용하는 데 드는 시간이 더 적습니다. 빠른 규칙은 다른 코드 검토의 규칙과 동일한 결과 정보를 표시합니다.

J2EE 심층 규칙

J2EE 심층 규칙은 데이터 플로우 분석을 요구하므로 빠른 규칙보다 결과를 생성하는 데 더 많은 시간이 걸립니다. J2EE 심층 규칙은 결과를 생성할 뿐만 아니라 결과로 유도하는 경로를 표시합니다. 심층 규칙은 데이터 플로우 분석, 경로를 추적하는 메소드를 요구하므로 빠른 규칙보다 결과를 생성하는 데 더 많은 시간이 걸립니다. 심층 규칙은 다음의 추가 정보를 제공합니다.

J2EE 심층 규칙 목록

36개의 J2EE 심층 규칙이 있습니다. 다음 테이블의 왼쪽 열에서는 이 심층 규칙을 포함하는 서브카테고리를 나열합니다. 오른쪽 열에서는 J2EE 심층 규칙에 해당하는 서브카테고리의 규칙을 나열하거나 설명합니다.

카테고리 또는 서브카테고리 J2EE 심층 규칙
정확성
javax.servlet.http.HttpSession에서
java.io.Serializable을 구현하지 않는 객체는 저장하지 않음
데이터 레이스
공유 잠금을 사용하지 않고
javax.servlet.Service.service()에서 모든 static 필드에 할당하지 않음
공유 잠금을 사용하지 않고 javax.servlet.Service.service()에서
servlet 인스턴스 필드에 할당하지 않음
성능 및 확장성
항상 javax.servlet.http.HttpServletRequest.getSession() 다음에
javax.servlet.http.HttpSession.invalidate()를 호출함
자원 관리 이 서브카테고리의 32개 규칙 모두 심층 J2EE 규칙입니다.

샘플 규칙

이 절에서는 J2EE 베스트 프랙티스 코드 검토에서 적용되는 각 규칙 유형의 샘플이 들어 있습니다.

빠른 규칙 샘플

다음 규칙은 성능 및 확장성 서브카테고리에 있는 빠른 규칙의 샘플입니다.

servlet에서 java.lang.Runtime을
호출하지 않음

심층 규칙 샘플

다음 규칙은 자원 관리 서브카테고리에 있는 심층 규칙의 샘플입니다.
항상
새 java.io.FileInputStream(java.io.File) 다음에 java.io.FileInputStream.close()를 호출함

알려진 사안

이 절에서는 J2EE 베스트 프랙티스 코드 검토에서 알려진 사안을 문서로 제공합니다.

오탐지(False positive): 입력 스트림이 닫히지 않음

요약: J2EE 베스트 프랙티스 코드 검토에서 입력 스트림이 닫히지 않은 결과를 생성합니다. 실제로 닫을 기타 입력 스트림이 없습니다.

설명: 코드 검토는 다음 상황에서 모든 입력 스트림이 닫혔다고 인식하지 않습니다.
  • bis가 널(null)인 경우 닫을 입력 스트림이 없음
  • 하나의 입력 스트림(FileInputStream)을 사용하여 두 번째 입력 스트림(BufferedInputStream)을 작성합니다. 두 번째 입력 스트림을 닫으면 첫 번째 입력 스트림도 닫힙니다.
설명: 다음 코드 예에서 강조표시된 행은 두 가지 상황을 모두 설명합니다.
public static int readFirstByte(String fileName) {
 int firstByte = -1;
 FileInputStream fis=null;
 BufferedInputStream bis = null;
 try {
  fis = new FileInputStream(fileName);
  bis = new BufferedInputStream(fis);  firstByte = bis.read();
 } catch (FileNotFoundException fnfe) {
  LogUtility.log(fnfe);
 } catch (IOException ioe) {
  LogUtility.log(ioe);
 } finally {
  if (bis!=null){   try {
    bis.close();   } catch (IOException ioe){
    LogUtility.log(ioe);
   }
  }
 }
 return firstByte;
} 

해결책: 오탐지 결과를 마우스 오른쪽 단추로 누른 후 무시를 누르십시오.

충분하지 않은 정보: .classpath 파일에서 결과를 보고합니다.

요약: J2EE 베스트 프랙티스 코드 검토는 Workbench의 자원 대신 .classpath 파일에서 결과를 생성합니다.

설명: 코드 검토는 2진 유형과 관련된 문제점을 찾습니다. 이 유형은 외부 JAR에 포함되므로 Workbench에는 이에 해당하는 자원이 없습니다.

참조: RFE RATLC00038795

해결책:

  1. 코드 검토 세부사항 보기에서 경로 탭을 눌러 Workbench에 해당하는 자원이 없는 유형을 확인하십시오.
  2. 경로 정보를 펼쳐 유형의 이름과 가능하면 결과와 관련된 메소드 및 필드를 확인하십시오.

자원 필터: 심층 규칙에서는 작동하지 않음

요약: 자원 필터 페이지에서 코드 검토 도중 선택한 심층 규칙을 적용하지 않을 파일을 지정합니다. 하지만 필터는 작동하지 않으며 규칙은 계속 지정한 파일에 적용됩니다.

설명: J2EE 심층 규칙은 코드 검토 도중 규칙을 적용하지 않을 파일을 지정하는 경우와 다르게 작동합니다. 심층 규칙은 자원 필터 페이지에서 지정한 파일을 인식하지 못하지만 JAR 파일이 기본적으로 나열되는 제외 페이지의 파일은 인식합니다. 심층 규칙은 완전한 servlet 또는 JAR 파일과 같이 제외할 2개의 파일 유형을 인식하며 기타 모든 파일은 무시합니다.

해결책:
  1. 창 > 환경 설정을 눌러 환경 설정 창을 여십시오.
  2. 왼쪽 분할창에서 Java™코드 검토를 펼친 후 제외를 선택하십시오.
  3. 제외 페이지에서 자원 페이지에 나열된 파일을 검토하고 다음 작업 중 하나를 수행하십시오.
    • J2EE 심층 규칙에서 검토할 때 제외하려는 파일이 나열되면 확인을 누르십시오. 사용자가 더 이상 조치를 취하지 않아도 됩니다.
    • J2EE 심층 규칙에서 검토할 때 servlet을 제외하려면 servlet의 .java 또는 .class 파일을 선택한 후 확인을 누르십시오.
    • J2EE 심층 규칙에서 검토할 때 JAR을 제외하려면 JAR 파일을 선택한 후 확인을 누르십시오.
코드 검토에서 제외시키지 않을 파일이 나열되면 해당 파일을 선택한 후 제거를 누르십시오.
이용 약관 | 피드백
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.