티스토리 뷰


ParaSoft JTest 를 이용한 Java Coding Standard 의 세부항목에 대한 설명 시리즈를 올릴까 한다.
흔히 알고 있는 부분도 있고, 잘 알지 못했던 부분도 있는데 JTest 에서 체크하는 항목만 다 알고 있어도 Java 의 올바른 사용법에 어느정도 근접할 수 있다고 생각된다.

대분류 - Coding Conventions [CODSTA]

규칙명 - Avoid nested assignments or assignments embedded in other expressions [CODSTA.NEA-1]
쉽게 말해서 복잡한 표현식을 사용하지 말라는 이야기이다.
- 상당히 C-style 인 부분인데, 본인은 보기만 해도 헷갈려 하기때문에 전혀 사용하고 있지 않는 부분이며, IntelliJ 등의 Tool 에서 체크가능하다. 실제로 C 개발자들이 많이 사용하는 방식이고, Java 에서는 가독성을 해치기 때문에 권장하지 않는 표현식이다.

DESCRIPTION

This rule is an extended version of the previous implementation of rule COSTA.NEA. It identifies nested assignments or assignments embedded in other expressions. An error is reported if code matches the "confusing assignment statement" criteria specified in the filter.

- COSTA.NEA 에서 확장된 규칙이고, 중첩된 표현식을 찾아낸다. filter 에 명시된 "confusing assignment statement" 기준과 일치하는 녀석만 찾아낸다는 이야기.

NOTES

This rule is parameterized to extend the functionality of the old rule which only checks for nested assignments.

- 기존(COSTA.NEA)에서 단순히 중첩 표현식만 체크했지만 추가적인 옵션을 통해 더 많은 부분을 체크할 수 있으며, 그 추가적인 옵션 내용은 다음과 같다.

PARAMETER

Level 1: Flag only nested assignments (default value)
Level 2: Errors in level 1 + assignments embedded in other expression (comparison, for example)
Level 3: Errors in level 1 and 2 + assignments in non-simple statements.

- Level 1 : 기본값으로 중첩 표현식만 체크
- Level 2 : Level 1 + 다른 표현식을 내장한 표현식도 체크
- Level 3 : Level 1 + Level 2 + non-simple 문장내의 표현식도 체크


Below are some examples of what would be flagged by which level    

                                                      Level 1      Level 2     Level 3
Boolean b= (b2= true);                            Y            Y           Y
i= j+ (k= 2);                                           Y            Y           Y
i== 8 ? (k= 1) : (k= 0)                            Y            Y           Y
if (i< (j= k))                                            N            Y           Y
obj1.equals(obj2= new Object());              N            N           Y
b= (i < j);                                               N            N           N
i+= i+ j- k + getInt();

- 각각의 Level 에 대한 예제.

BENEFITS

Splitting up confusing assignment statements into multiple simple and clear assignment statements would make code less error-prone.

NOTE

You can set the filter level by modifying the corresponding parameter.

- 혼란을 유발시킬 수 있는 표현을 사용하는 문장들을 간단하고 명확한 문장으로 분리함으로서, 에러 발생 가능성을 줄일 수 있다. 단, 필터셋팅을 통해 Level 을 설정해야 한다.

EXAMPLE

package examples.rules.codsta;

public class NEA {
   int i;
   int j;
   public boolean myMethod() {
       i= j= 1; //VIOLATION OF ALL LEVEL
       //
       if (i< (j=2)) //VIOLATION OF LEVEL 2 AND 3
           return 0;
       //
       return i= 1; //VIOLATION OF LEVEL 3
   }
}

REPAIR

Split up each confusing assignment statement into multiple simple and clear assignment statements.

package examples.rules.codsta;

public class NEAFixed {
   int i;
   int j;
   public boolean myMethod() {
       j= 1; //FIXED
       i= 1; //FIXED
       //
       j= 2; //FIXED
       if (i< j) //FIXED
           return 0;
       //
       i= 1; //FIXED
       return i; //FIXED
   }
}


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함