J2EE 베스트 프랙티스 코드 검토는 하나의 카테고리로만 구성됩니다. J2EE 베스트 프랙티스라고도 합니다.
코드 검토의 일부 규칙은 일부 결과를 발견할 때 데이터 플로우 분석을 요구합니다. 데이터 플로우 분석은 결과의 경로를 추적합니다. 따라서 이러한 규칙을 적용하면 코드 검토를 완료하는 데 더 많은 시간이 걸립니다.
다음 테이블에서는 J2EE 베스트 프랙티스 코드 검토에 있는 모든 카테고리 및 서브카테고리와 함께 각 카테고리의 규칙에 대한 설명을 나열합니다. 왼쪽 열에서 카테고리는 굵은 텍스트로, 서브카테고리는 일반 텍스트로 표시됩니다.
카테고리 또는 서브카테고리 | 설명 |
---|---|
J2EE 베스트 프랙티스 | 베스트 J2EE 개발 프랙티스에 기반한 규칙을 포함하고 WebSphere 서버를 대상으로 하는 웹 프로젝트를 지원합니다. |
정확성 | 잘못된 메소드 호출을 발견하는 규칙을 포함합니다. |
데이터 레이스 | 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 베스트 프랙티스 코드 검토에서 입력 스트림이 닫히지 않은 결과를 생성합니다. 실제로 닫을 기타 입력 스트림이 없습니다.
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
해결책:
자원 필터: 심층 규칙에서는 작동하지 않음
요약: 자원 필터 페이지에서 코드 검토 도중 선택한 심층 규칙을 적용하지 않을 파일을 지정합니다. 하지만 필터는 작동하지 않으며 규칙은 계속 지정한 파일에 적용됩니다.
설명: J2EE 심층 규칙은 코드 검토 도중 규칙을 적용하지 않을 파일을 지정하는 경우와 다르게 작동합니다. 심층 규칙은 자원 필터 페이지에서 지정한 파일을 인식하지 못하지만 JAR 파일이 기본적으로 나열되는 제외 페이지의 파일은 인식합니다. 심층 규칙은 완전한 servlet 또는 JAR 파일과 같이 제외할 2개의 파일 유형을 인식하며 기타 모든 파일은 무시합니다.