블로그

개인 프로그래밍 프로세스 개선 Sensei

앨런 리처드슨
게시일: 2020.12.07.

이 게시물에 대 한, 내가 JUnit을 배울 때 사용 하는 '나쁜' 코딩 접근 방식을 다시 만들었습니다., 그리고 변환 하는 방법을 보여 줄 것 이다 '나쁜' 패턴 동의, 그리고 "더 나은' 코딩 패턴을 사용 하 여 Sensei .

JUnit을 배우고 있을 때, 나는 한 번에 머릿속에 너무 많은 것을 유지할 수 있었습니다. 나는 그들이 작동하지 않을 때 테스트를 건너 뛰는 방법을 끊임없이 잊어 버렸습니다.

팀에서 작업하는 경우 끌어오기 요청에 대한 코드 검토를 사용하여 코딩 스타일을 적용할 수 있습니다. 또한 프로그래밍을 경험이 풍부한 프로그래머와 페어링할 때 피드백 주기를 단축할 수 있습니다.

또한 툴링으로 프로세스를 보강하고 도구가 올바른 작업을 수행하라는 메시지를 표시할 수 있습니다. 사고는 이를 "규칙에 대한 도구"로 묘사했습니다. 기술 레이더 목록 Sensei , 에 : "쉽게 체크 리스트와 같은 거버넌스 규칙 및 절차를 적용보다 올바른 일을 할 수 있도록"


JUnit 테스트 비활성화


이상적으로, 나는 우리 모두가 알다시피, @Disabled 기조를 사용하고 쓰기 :

  @Disabled
  @Test
  void canWeAddTwoNumbers(){
        Assertions.fail("this test was skipped and should not run");
   }

하지만, 배울 때, 나는 @Disabled 사용하기 위해 자신을 훈련했다.

테스트 방법을 사용하지 않도록 설정하는 방법을 잊어 버렸을 때 @Test 부조를 제거하고 테스트 이름을 변경합니다.

class SkipThisTest {
    void SKIPTHIScanWeAddTwoNumbers(){
        Assertions.fail("this test was skipped and should not run");
    }   
}


그것은 좋지 않았지만, 그것은 일을 완료있어. 나는 같은 것을 가지고 있지 않았다. Sensei 내가 기억하는 데 도움이 그래서 나는 가난한 코딩 패턴을 사용하여 떨어졌다.

이 게시물에 대해 기내에서 수행한 작업은 다음과 같습니다.

  • 메서드이름을 변경하여 '건너뛴' 또는 '비활성화' 된 메서드를 찾는 규칙을 만듭니다.
  • QuickFix를 만들어 메서드의 이름을 변경하고 @Test 및 @Disabled @Disabled 추가합니다.


레시피 설정

내가 가지고 첫 번째 단계 Sensei "새로운 레시피를 추가하고 레시피가 작동하려는 코딩 패턴을 검색하는 것입니다.

이름: JUnit: 건너뛰기에서 @Disabled @Test 확인

짧은 설명: 건너뛰기 메서드 를 중지하고 대신 @Disabled @Test 사용


그리고 내 검색은 매우 간단합니다. 기본 레펙스를 사용하여 메서드 이름에 맞게 합니다.

검색:
메서드:
이름:
일치 항목: "건너뛰기.*"


테스트를 건너뛰기 위한 레시피 설정


퀵픽스 설정

QuickFix는 코드를 다시 작성하기 때문에 조금 더 복잡하며 최종 코드를 얻기 위해 몇 단계를 사용합니다.

하고 싶어요:

  • 메서드에 @Test 추가
  • 메서드에 @Disabled 기고 추가
  • 메서드 이름 수정

주석을 추가하는 것은 addAnnotation 수정프로그램을 사용하여 충분히 간단합니다. 내가 부기에 대한 자격을 갖춘 이름을 사용하는 경우 다음 Sensei 자동으로 나를 위해 수입을 추가합니다.

사용 가능한 픽스:
- 이름 : "@Disabled 추가하고 @Test 성서"
  작업:
- 추가 안장 :
"@org.junit.jupiter.api.test"
- 추가 안장 :
"@org.junit.jupiter.api.비활성화"


실제 이름 변경은 좀 더 복잡해 보이지만 regex 교체를 사용하고 있으며 이를 수행하는 일반적인 방법입니다. Sensei 재작성 작업에 는 sed를 사용하는 것입니다.

다시 쓰기 작업은 콧수염 템플릿이므로 Sensei 템플릿 메커니즘에 몇 가지 기능 확장이 있습니다. 함수는 {{#...}}}로 표현되므로 sed의 함수는 {{#sed}입니다. 이 함수는 두 개의 쉼표 구분 인수를 합니다.

첫 번째 인수는 sed 문입니다.

  • s/(.*) SKIPTHIS(.*)/$1 $2/

두 번째 인수는 sed 문을 적용하는 문자열이며,이 경우 메서드 자체이며, 이것은 콧수염 변수에 다음과 같이 표시됩니다.

  • {{{.}}}

나에게 의 재작성 작업을 제공 :

 - 다시 작성 :

       to: "{{#sed}}s/(.*) SKIPTHIS(.*)/$1 $2/,{{{.}}}{{/sed}}"



sed 구현은 인수 자체에 쉼표를 포함할 때 {{#encodeString}} 및 {{/인코딩}}}로 래핑되어 있어야 합니다 #encodeString. {{/인코딩스트링}}

역 조리법

이 예제이므로 데모에서 이 작업을 사용할 수 있으므로 위의 변경 을 사용하여 반전하는 방법을 살펴보고 싶었습니다. Sensei 처방.

나는 @Disabled 만 클래스 SkipThisTest에서 내가 데모를 할 수있는 방법을 찾고 싶습니다 통해 그것을 통해 생각 :

이름: JUnit: SkipThisTest에서 데모 @Disabled 제거하고 건너 뛰기로 되돌리기

짧은 설명: @Disabled 제거하고 프로젝트의 데모 목적으로 SKIPTHIS로 되돌리기

레벨: 경고


레시피 설정 검색은 특정 클래스의 부조와 일치하므로 매우 간단합니다.

검색:
메서드:
주석:
유형: "사용 중"
안으로:
수업:
이름: "건너뛰기테스트"


코드가 오류처럼 보이게하지 않으려면 레시피의 일반적인 설정을 경고로 정의했습니다. 경고는 코드의 하이라이트와 함께 표시되며 코드가 큰 문제가 있는 것처럼 보이게 하지 않습니다.

빠른 수정의 경우 메서드와 일치했기 때문에 재작성 작업을 사용하고 변수를 사용하여 템플릿을 채웁니다.

사용 가능한 픽스:
- 이름 : "비활성화 제거하고 건너 뛰기로 이름을 변경 ..."
  actions:
  - rewrite:
      to: "{{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
        \ }}}{{{ body }}}"


수정자를 제외한 모든 변수를 추가하고(주석을 제거하려면) SKIPTHIS 텍스트를 템플릿에 추가합니다.

이 수정 사항에서는 수정자를 제거하여 다른 주석도 제거하는 약점이 있습니다.


다른 작업 추가

나는 alt+enter가 QuickFix를 표시하는 데 사용될 때 나에게 선택을 제공하기 위해, 또 다른 명명 된 수정을 추가 할 수 있습니다.

사용 가능한 픽스:
- 이름 : "비활성화 제거하고 건너 뛰기로 이름을 변경 ..."
  actions:
  - rewrite:
      to: "{{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
        \ }}}{{{ body }}}"
      target: "self"
- name: "Remove Disabled, keep other annotations, and rename to SKIPTHIS..."
  actions:
  - rewrite:
      to: "{{#sed}}s/(@Disabled\n.*@Test)//,{{{ modifierList }}}{{/sed}}\n\
        {{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
        \ }}}{{{ body }}}"
      target: "self"


여기에서 새 빠른 수정에 추가 라인을 추가했습니다.

{{{#sed}/(@Disabled\n.*@Test)///{{{수정자목록 }}{{/sed}}


이렇게 하면 수정자 목록이 가져와 문자열로 인코딩한 다음 sed를 사용하여 문자열에서 @Disabled 줄을 제거하지만 다른 모든 줄은 수정자(예: 다른 모든 주석만 남깁니다)를 남깁니다.

참고: sed에 """를 추가하면 미리 보기에 주석이 추가됩니다. 이것이 다음과 같은 방법입니다. Sensei sed 명령의 구문 오류를 경고합니다.

/* e.g: {{#sed}}s/all/world/,helloall{{/sed}} */


중첩 된 sed 통화

나는 하나의 검색과 교체에 @Disabled @Test 모두 일치 할 수 운이 좋았다.

코드가 더 복잡하고 sed 명령 시퀀스를 갖고 싶다면 중첩하여 작업을 수행할 수 있습니다.

{{{#sed}/@Test/,{{{#sed}/@Disabled\n/,{{{{{{수정자목록}}}{/sed}} }


위의 예제에서는 {{{수정자 }}}}에 @Disabled 교체를 적용한 결과에 @Test 교체를 적용합니다.


요약

sed는 코드 재작성을 달성하는 매우 유연한 방법이며 복잡한 재작성 조건에 대한 sed 함수 호출을 중첩할 수 있습니다.

이와 같은 조리법은 종종 우리가 우리의 프로그래밍 프로세스를 개선하기 위해 그들을 사용하고 있기 때문에 일시적 인 결국, 우리는 근육 메모리를 구축하고 더 이상 우리가 제거하거나 쿡 북에서 비활성화 할 수있는 가난한 프로그래밍 패턴을 사용하지 않습니다.


---

설치할 수 있습니다. Sensei "환경 설정 \ 플러그인"(맥) 또는 "설정 \ 플러그인"(윈도우)를 사용하여 IntelliJ 내에서 다음 그냥 검색 " sensei 보안 코드".
이 블로그 게시물의 모든 코드는 블로그 예제 리포지토리의 '주니예제' 모듈에서 GitHub에서 찾을 수 있습니다. https://github.com/SecureCodeWarrior/ sensei -블로그 예

리소스 보기
리소스 보기

끌어오기 요청에 코드 리뷰를 사용하여 코딩 스타일을 적용하는 방법을 알아보세요. 또한 프로그래밍을 경험이 풍부한 프로그래머와 페어링할 때 피드백 주기를 단축합니다.

더 알고 싶으신가요?

Alan Richardson은 20년 이상의 전문 IT 경험을 보유하고 있으며, 개발자로 일하며 테스터부터 테스트 책임자까지 모든 수준의 테스트 계층 구조에서 일하고 있습니다. 개발자 관계 책임자 Secure Code Warrior 그는 팀과 직접 협력하여 품질 보안 코드 의 개발을 개선합니다. 앨런은 "친애하는 악테터", "테스터를위한 자바"를 포함하여 네 권의 책의 저자입니다. 앨런은 또한 온라인 교육을 만들었습니다 courses 사람들이 자바와 기술 웹 테스트 및 셀레늄 웹 드라이버를 배울 수 있도록. 앨런은 SeleniumSimplified.com, EvilTester.com, JavaForTesters.com, CompendiumDev.co.uk 자신의 글과 트레이닝 비디오를 게시합니다.

Secure Code Warrior 는 전체 소프트웨어 개발 수명 주기에서 코드를 보호하고 사이버 보안을 최우선으로 생각하는 문화를 조성할 수 있도록 도와드립니다. 앱 보안 관리자, 개발자, CISO 등 보안과 관련된 모든 사람이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 도와드릴 수 있습니다.

데모 예약
공유하세요:
저자
앨런 리처드슨
게시일: 2020.12.07.

Alan Richardson은 20년 이상의 전문 IT 경험을 보유하고 있으며, 개발자로 일하며 테스터부터 테스트 책임자까지 모든 수준의 테스트 계층 구조에서 일하고 있습니다. 개발자 관계 책임자 Secure Code Warrior 그는 팀과 직접 협력하여 품질 보안 코드 의 개발을 개선합니다. 앨런은 "친애하는 악테터", "테스터를위한 자바"를 포함하여 네 권의 책의 저자입니다. 앨런은 또한 온라인 교육을 만들었습니다 courses 사람들이 자바와 기술 웹 테스트 및 셀레늄 웹 드라이버를 배울 수 있도록. 앨런은 SeleniumSimplified.com, EvilTester.com, JavaForTesters.com, CompendiumDev.co.uk 자신의 글과 트레이닝 비디오를 게시합니다.

공유하세요:

이 게시물에 대 한, 내가 JUnit을 배울 때 사용 하는 '나쁜' 코딩 접근 방식을 다시 만들었습니다., 그리고 변환 하는 방법을 보여 줄 것 이다 '나쁜' 패턴 동의, 그리고 "더 나은' 코딩 패턴을 사용 하 여 Sensei .

JUnit을 배우고 있을 때, 나는 한 번에 머릿속에 너무 많은 것을 유지할 수 있었습니다. 나는 그들이 작동하지 않을 때 테스트를 건너 뛰는 방법을 끊임없이 잊어 버렸습니다.

팀에서 작업하는 경우 끌어오기 요청에 대한 코드 검토를 사용하여 코딩 스타일을 적용할 수 있습니다. 또한 프로그래밍을 경험이 풍부한 프로그래머와 페어링할 때 피드백 주기를 단축할 수 있습니다.

또한 툴링으로 프로세스를 보강하고 도구가 올바른 작업을 수행하라는 메시지를 표시할 수 있습니다. 사고는 이를 "규칙에 대한 도구"로 묘사했습니다. 기술 레이더 목록 Sensei , 에 : "쉽게 체크 리스트와 같은 거버넌스 규칙 및 절차를 적용보다 올바른 일을 할 수 있도록"


JUnit 테스트 비활성화


이상적으로, 나는 우리 모두가 알다시피, @Disabled 기조를 사용하고 쓰기 :

  @Disabled
  @Test
  void canWeAddTwoNumbers(){
        Assertions.fail("this test was skipped and should not run");
   }

하지만, 배울 때, 나는 @Disabled 사용하기 위해 자신을 훈련했다.

테스트 방법을 사용하지 않도록 설정하는 방법을 잊어 버렸을 때 @Test 부조를 제거하고 테스트 이름을 변경합니다.

class SkipThisTest {
    void SKIPTHIScanWeAddTwoNumbers(){
        Assertions.fail("this test was skipped and should not run");
    }   
}


그것은 좋지 않았지만, 그것은 일을 완료있어. 나는 같은 것을 가지고 있지 않았다. Sensei 내가 기억하는 데 도움이 그래서 나는 가난한 코딩 패턴을 사용하여 떨어졌다.

이 게시물에 대해 기내에서 수행한 작업은 다음과 같습니다.

  • 메서드이름을 변경하여 '건너뛴' 또는 '비활성화' 된 메서드를 찾는 규칙을 만듭니다.
  • QuickFix를 만들어 메서드의 이름을 변경하고 @Test 및 @Disabled @Disabled 추가합니다.


레시피 설정

내가 가지고 첫 번째 단계 Sensei "새로운 레시피를 추가하고 레시피가 작동하려는 코딩 패턴을 검색하는 것입니다.

이름: JUnit: 건너뛰기에서 @Disabled @Test 확인

짧은 설명: 건너뛰기 메서드 를 중지하고 대신 @Disabled @Test 사용


그리고 내 검색은 매우 간단합니다. 기본 레펙스를 사용하여 메서드 이름에 맞게 합니다.

검색:
메서드:
이름:
일치 항목: "건너뛰기.*"


테스트를 건너뛰기 위한 레시피 설정


퀵픽스 설정

QuickFix는 코드를 다시 작성하기 때문에 조금 더 복잡하며 최종 코드를 얻기 위해 몇 단계를 사용합니다.

하고 싶어요:

  • 메서드에 @Test 추가
  • 메서드에 @Disabled 기고 추가
  • 메서드 이름 수정

주석을 추가하는 것은 addAnnotation 수정프로그램을 사용하여 충분히 간단합니다. 내가 부기에 대한 자격을 갖춘 이름을 사용하는 경우 다음 Sensei 자동으로 나를 위해 수입을 추가합니다.

사용 가능한 픽스:
- 이름 : "@Disabled 추가하고 @Test 성서"
  작업:
- 추가 안장 :
"@org.junit.jupiter.api.test"
- 추가 안장 :
"@org.junit.jupiter.api.비활성화"


실제 이름 변경은 좀 더 복잡해 보이지만 regex 교체를 사용하고 있으며 이를 수행하는 일반적인 방법입니다. Sensei 재작성 작업에 는 sed를 사용하는 것입니다.

다시 쓰기 작업은 콧수염 템플릿이므로 Sensei 템플릿 메커니즘에 몇 가지 기능 확장이 있습니다. 함수는 {{#...}}}로 표현되므로 sed의 함수는 {{#sed}입니다. 이 함수는 두 개의 쉼표 구분 인수를 합니다.

첫 번째 인수는 sed 문입니다.

  • s/(.*) SKIPTHIS(.*)/$1 $2/

두 번째 인수는 sed 문을 적용하는 문자열이며,이 경우 메서드 자체이며, 이것은 콧수염 변수에 다음과 같이 표시됩니다.

  • {{{.}}}

나에게 의 재작성 작업을 제공 :

 - 다시 작성 :

       to: "{{#sed}}s/(.*) SKIPTHIS(.*)/$1 $2/,{{{.}}}{{/sed}}"



sed 구현은 인수 자체에 쉼표를 포함할 때 {{#encodeString}} 및 {{/인코딩}}}로 래핑되어 있어야 합니다 #encodeString. {{/인코딩스트링}}

역 조리법

이 예제이므로 데모에서 이 작업을 사용할 수 있으므로 위의 변경 을 사용하여 반전하는 방법을 살펴보고 싶었습니다. Sensei 처방.

나는 @Disabled 만 클래스 SkipThisTest에서 내가 데모를 할 수있는 방법을 찾고 싶습니다 통해 그것을 통해 생각 :

이름: JUnit: SkipThisTest에서 데모 @Disabled 제거하고 건너 뛰기로 되돌리기

짧은 설명: @Disabled 제거하고 프로젝트의 데모 목적으로 SKIPTHIS로 되돌리기

레벨: 경고


레시피 설정 검색은 특정 클래스의 부조와 일치하므로 매우 간단합니다.

검색:
메서드:
주석:
유형: "사용 중"
안으로:
수업:
이름: "건너뛰기테스트"


코드가 오류처럼 보이게하지 않으려면 레시피의 일반적인 설정을 경고로 정의했습니다. 경고는 코드의 하이라이트와 함께 표시되며 코드가 큰 문제가 있는 것처럼 보이게 하지 않습니다.

빠른 수정의 경우 메서드와 일치했기 때문에 재작성 작업을 사용하고 변수를 사용하여 템플릿을 채웁니다.

사용 가능한 픽스:
- 이름 : "비활성화 제거하고 건너 뛰기로 이름을 변경 ..."
  actions:
  - rewrite:
      to: "{{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
        \ }}}{{{ body }}}"


수정자를 제외한 모든 변수를 추가하고(주석을 제거하려면) SKIPTHIS 텍스트를 템플릿에 추가합니다.

이 수정 사항에서는 수정자를 제거하여 다른 주석도 제거하는 약점이 있습니다.


다른 작업 추가

나는 alt+enter가 QuickFix를 표시하는 데 사용될 때 나에게 선택을 제공하기 위해, 또 다른 명명 된 수정을 추가 할 수 있습니다.

사용 가능한 픽스:
- 이름 : "비활성화 제거하고 건너 뛰기로 이름을 변경 ..."
  actions:
  - rewrite:
      to: "{{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
        \ }}}{{{ body }}}"
      target: "self"
- name: "Remove Disabled, keep other annotations, and rename to SKIPTHIS..."
  actions:
  - rewrite:
      to: "{{#sed}}s/(@Disabled\n.*@Test)//,{{{ modifierList }}}{{/sed}}\n\
        {{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
        \ }}}{{{ body }}}"
      target: "self"


여기에서 새 빠른 수정에 추가 라인을 추가했습니다.

{{{#sed}/(@Disabled\n.*@Test)///{{{수정자목록 }}{{/sed}}


이렇게 하면 수정자 목록이 가져와 문자열로 인코딩한 다음 sed를 사용하여 문자열에서 @Disabled 줄을 제거하지만 다른 모든 줄은 수정자(예: 다른 모든 주석만 남깁니다)를 남깁니다.

참고: sed에 """를 추가하면 미리 보기에 주석이 추가됩니다. 이것이 다음과 같은 방법입니다. Sensei sed 명령의 구문 오류를 경고합니다.

/* e.g: {{#sed}}s/all/world/,helloall{{/sed}} */


중첩 된 sed 통화

나는 하나의 검색과 교체에 @Disabled @Test 모두 일치 할 수 운이 좋았다.

코드가 더 복잡하고 sed 명령 시퀀스를 갖고 싶다면 중첩하여 작업을 수행할 수 있습니다.

{{{#sed}/@Test/,{{{#sed}/@Disabled\n/,{{{{{{수정자목록}}}{/sed}} }


위의 예제에서는 {{{수정자 }}}}에 @Disabled 교체를 적용한 결과에 @Test 교체를 적용합니다.


요약

sed는 코드 재작성을 달성하는 매우 유연한 방법이며 복잡한 재작성 조건에 대한 sed 함수 호출을 중첩할 수 있습니다.

이와 같은 조리법은 종종 우리가 우리의 프로그래밍 프로세스를 개선하기 위해 그들을 사용하고 있기 때문에 일시적 인 결국, 우리는 근육 메모리를 구축하고 더 이상 우리가 제거하거나 쿡 북에서 비활성화 할 수있는 가난한 프로그래밍 패턴을 사용하지 않습니다.


---

설치할 수 있습니다. Sensei "환경 설정 \ 플러그인"(맥) 또는 "설정 \ 플러그인"(윈도우)를 사용하여 IntelliJ 내에서 다음 그냥 검색 " sensei 보안 코드".
이 블로그 게시물의 모든 코드는 블로그 예제 리포지토리의 '주니예제' 모듈에서 GitHub에서 찾을 수 있습니다. https://github.com/SecureCodeWarrior/ sensei -블로그 예

리소스 보기
리소스 보기

아래 양식을 작성하여 보고서를 다운로드하세요.

우리는 당신에게 우리의 제품 및 / 또는 관련 보안 코딩 주제에 대한 정보를 보낼 수있는 귀하의 허가를 바랍니다. 우리는 항상 최대한의주의를 기울여 귀하의 개인 정보를 취급 할 것이며 마케팅 목적으로 다른 회사에 판매하지 않을 것입니다.

전송
양식을 제출하려면 '분석' 쿠키를 활성화하세요. 완료되면 언제든지 다시 비활성화할 수 있습니다.

이 게시물에 대 한, 내가 JUnit을 배울 때 사용 하는 '나쁜' 코딩 접근 방식을 다시 만들었습니다., 그리고 변환 하는 방법을 보여 줄 것 이다 '나쁜' 패턴 동의, 그리고 "더 나은' 코딩 패턴을 사용 하 여 Sensei .

JUnit을 배우고 있을 때, 나는 한 번에 머릿속에 너무 많은 것을 유지할 수 있었습니다. 나는 그들이 작동하지 않을 때 테스트를 건너 뛰는 방법을 끊임없이 잊어 버렸습니다.

팀에서 작업하는 경우 끌어오기 요청에 대한 코드 검토를 사용하여 코딩 스타일을 적용할 수 있습니다. 또한 프로그래밍을 경험이 풍부한 프로그래머와 페어링할 때 피드백 주기를 단축할 수 있습니다.

또한 툴링으로 프로세스를 보강하고 도구가 올바른 작업을 수행하라는 메시지를 표시할 수 있습니다. 사고는 이를 "규칙에 대한 도구"로 묘사했습니다. 기술 레이더 목록 Sensei , 에 : "쉽게 체크 리스트와 같은 거버넌스 규칙 및 절차를 적용보다 올바른 일을 할 수 있도록"


JUnit 테스트 비활성화


이상적으로, 나는 우리 모두가 알다시피, @Disabled 기조를 사용하고 쓰기 :

  @Disabled
  @Test
  void canWeAddTwoNumbers(){
        Assertions.fail("this test was skipped and should not run");
   }

하지만, 배울 때, 나는 @Disabled 사용하기 위해 자신을 훈련했다.

테스트 방법을 사용하지 않도록 설정하는 방법을 잊어 버렸을 때 @Test 부조를 제거하고 테스트 이름을 변경합니다.

class SkipThisTest {
    void SKIPTHIScanWeAddTwoNumbers(){
        Assertions.fail("this test was skipped and should not run");
    }   
}


그것은 좋지 않았지만, 그것은 일을 완료있어. 나는 같은 것을 가지고 있지 않았다. Sensei 내가 기억하는 데 도움이 그래서 나는 가난한 코딩 패턴을 사용하여 떨어졌다.

이 게시물에 대해 기내에서 수행한 작업은 다음과 같습니다.

  • 메서드이름을 변경하여 '건너뛴' 또는 '비활성화' 된 메서드를 찾는 규칙을 만듭니다.
  • QuickFix를 만들어 메서드의 이름을 변경하고 @Test 및 @Disabled @Disabled 추가합니다.


레시피 설정

내가 가지고 첫 번째 단계 Sensei "새로운 레시피를 추가하고 레시피가 작동하려는 코딩 패턴을 검색하는 것입니다.

이름: JUnit: 건너뛰기에서 @Disabled @Test 확인

짧은 설명: 건너뛰기 메서드 를 중지하고 대신 @Disabled @Test 사용


그리고 내 검색은 매우 간단합니다. 기본 레펙스를 사용하여 메서드 이름에 맞게 합니다.

검색:
메서드:
이름:
일치 항목: "건너뛰기.*"


테스트를 건너뛰기 위한 레시피 설정


퀵픽스 설정

QuickFix는 코드를 다시 작성하기 때문에 조금 더 복잡하며 최종 코드를 얻기 위해 몇 단계를 사용합니다.

하고 싶어요:

  • 메서드에 @Test 추가
  • 메서드에 @Disabled 기고 추가
  • 메서드 이름 수정

주석을 추가하는 것은 addAnnotation 수정프로그램을 사용하여 충분히 간단합니다. 내가 부기에 대한 자격을 갖춘 이름을 사용하는 경우 다음 Sensei 자동으로 나를 위해 수입을 추가합니다.

사용 가능한 픽스:
- 이름 : "@Disabled 추가하고 @Test 성서"
  작업:
- 추가 안장 :
"@org.junit.jupiter.api.test"
- 추가 안장 :
"@org.junit.jupiter.api.비활성화"


실제 이름 변경은 좀 더 복잡해 보이지만 regex 교체를 사용하고 있으며 이를 수행하는 일반적인 방법입니다. Sensei 재작성 작업에 는 sed를 사용하는 것입니다.

다시 쓰기 작업은 콧수염 템플릿이므로 Sensei 템플릿 메커니즘에 몇 가지 기능 확장이 있습니다. 함수는 {{#...}}}로 표현되므로 sed의 함수는 {{#sed}입니다. 이 함수는 두 개의 쉼표 구분 인수를 합니다.

첫 번째 인수는 sed 문입니다.

  • s/(.*) SKIPTHIS(.*)/$1 $2/

두 번째 인수는 sed 문을 적용하는 문자열이며,이 경우 메서드 자체이며, 이것은 콧수염 변수에 다음과 같이 표시됩니다.

  • {{{.}}}

나에게 의 재작성 작업을 제공 :

 - 다시 작성 :

       to: "{{#sed}}s/(.*) SKIPTHIS(.*)/$1 $2/,{{{.}}}{{/sed}}"



sed 구현은 인수 자체에 쉼표를 포함할 때 {{#encodeString}} 및 {{/인코딩}}}로 래핑되어 있어야 합니다 #encodeString. {{/인코딩스트링}}

역 조리법

이 예제이므로 데모에서 이 작업을 사용할 수 있으므로 위의 변경 을 사용하여 반전하는 방법을 살펴보고 싶었습니다. Sensei 처방.

나는 @Disabled 만 클래스 SkipThisTest에서 내가 데모를 할 수있는 방법을 찾고 싶습니다 통해 그것을 통해 생각 :

이름: JUnit: SkipThisTest에서 데모 @Disabled 제거하고 건너 뛰기로 되돌리기

짧은 설명: @Disabled 제거하고 프로젝트의 데모 목적으로 SKIPTHIS로 되돌리기

레벨: 경고


레시피 설정 검색은 특정 클래스의 부조와 일치하므로 매우 간단합니다.

검색:
메서드:
주석:
유형: "사용 중"
안으로:
수업:
이름: "건너뛰기테스트"


코드가 오류처럼 보이게하지 않으려면 레시피의 일반적인 설정을 경고로 정의했습니다. 경고는 코드의 하이라이트와 함께 표시되며 코드가 큰 문제가 있는 것처럼 보이게 하지 않습니다.

빠른 수정의 경우 메서드와 일치했기 때문에 재작성 작업을 사용하고 변수를 사용하여 템플릿을 채웁니다.

사용 가능한 픽스:
- 이름 : "비활성화 제거하고 건너 뛰기로 이름을 변경 ..."
  actions:
  - rewrite:
      to: "{{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
        \ }}}{{{ body }}}"


수정자를 제외한 모든 변수를 추가하고(주석을 제거하려면) SKIPTHIS 텍스트를 템플릿에 추가합니다.

이 수정 사항에서는 수정자를 제거하여 다른 주석도 제거하는 약점이 있습니다.


다른 작업 추가

나는 alt+enter가 QuickFix를 표시하는 데 사용될 때 나에게 선택을 제공하기 위해, 또 다른 명명 된 수정을 추가 할 수 있습니다.

사용 가능한 픽스:
- 이름 : "비활성화 제거하고 건너 뛰기로 이름을 변경 ..."
  actions:
  - rewrite:
      to: "{{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
        \ }}}{{{ body }}}"
      target: "self"
- name: "Remove Disabled, keep other annotations, and rename to SKIPTHIS..."
  actions:
  - rewrite:
      to: "{{#sed}}s/(@Disabled\n.*@Test)//,{{{ modifierList }}}{{/sed}}\n\
        {{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
        \ }}}{{{ body }}}"
      target: "self"


여기에서 새 빠른 수정에 추가 라인을 추가했습니다.

{{{#sed}/(@Disabled\n.*@Test)///{{{수정자목록 }}{{/sed}}


이렇게 하면 수정자 목록이 가져와 문자열로 인코딩한 다음 sed를 사용하여 문자열에서 @Disabled 줄을 제거하지만 다른 모든 줄은 수정자(예: 다른 모든 주석만 남깁니다)를 남깁니다.

참고: sed에 """를 추가하면 미리 보기에 주석이 추가됩니다. 이것이 다음과 같은 방법입니다. Sensei sed 명령의 구문 오류를 경고합니다.

/* e.g: {{#sed}}s/all/world/,helloall{{/sed}} */


중첩 된 sed 통화

나는 하나의 검색과 교체에 @Disabled @Test 모두 일치 할 수 운이 좋았다.

코드가 더 복잡하고 sed 명령 시퀀스를 갖고 싶다면 중첩하여 작업을 수행할 수 있습니다.

{{{#sed}/@Test/,{{{#sed}/@Disabled\n/,{{{{{{수정자목록}}}{/sed}} }


위의 예제에서는 {{{수정자 }}}}에 @Disabled 교체를 적용한 결과에 @Test 교체를 적용합니다.


요약

sed는 코드 재작성을 달성하는 매우 유연한 방법이며 복잡한 재작성 조건에 대한 sed 함수 호출을 중첩할 수 있습니다.

이와 같은 조리법은 종종 우리가 우리의 프로그래밍 프로세스를 개선하기 위해 그들을 사용하고 있기 때문에 일시적 인 결국, 우리는 근육 메모리를 구축하고 더 이상 우리가 제거하거나 쿡 북에서 비활성화 할 수있는 가난한 프로그래밍 패턴을 사용하지 않습니다.


---

설치할 수 있습니다. Sensei "환경 설정 \ 플러그인"(맥) 또는 "설정 \ 플러그인"(윈도우)를 사용하여 IntelliJ 내에서 다음 그냥 검색 " sensei 보안 코드".
이 블로그 게시물의 모든 코드는 블로그 예제 리포지토리의 '주니예제' 모듈에서 GitHub에서 찾을 수 있습니다. https://github.com/SecureCodeWarrior/ sensei -블로그 예

리소스에 접근

아래 링크를 클릭하여 이 자료의 PDF를 다운로드하세요.

Secure Code Warrior 는 전체 소프트웨어 개발 수명 주기에서 코드를 보호하고 사이버 보안을 최우선으로 생각하는 문화를 조성할 수 있도록 도와드립니다. 앱 보안 관리자, 개발자, CISO 등 보안과 관련된 모든 사람이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 도와드릴 수 있습니다.

보고서 보기데모 예약
PDF 다운로드
리소스 보기
공유하세요:
더 알고 싶으신가요?

공유하세요:
저자
앨런 리처드슨
게시일: 2020.12.07.

Alan Richardson은 20년 이상의 전문 IT 경험을 보유하고 있으며, 개발자로 일하며 테스터부터 테스트 책임자까지 모든 수준의 테스트 계층 구조에서 일하고 있습니다. 개발자 관계 책임자 Secure Code Warrior 그는 팀과 직접 협력하여 품질 보안 코드 의 개발을 개선합니다. 앨런은 "친애하는 악테터", "테스터를위한 자바"를 포함하여 네 권의 책의 저자입니다. 앨런은 또한 온라인 교육을 만들었습니다 courses 사람들이 자바와 기술 웹 테스트 및 셀레늄 웹 드라이버를 배울 수 있도록. 앨런은 SeleniumSimplified.com, EvilTester.com, JavaForTesters.com, CompendiumDev.co.uk 자신의 글과 트레이닝 비디오를 게시합니다.

공유하세요:

이 게시물에 대 한, 내가 JUnit을 배울 때 사용 하는 '나쁜' 코딩 접근 방식을 다시 만들었습니다., 그리고 변환 하는 방법을 보여 줄 것 이다 '나쁜' 패턴 동의, 그리고 "더 나은' 코딩 패턴을 사용 하 여 Sensei .

JUnit을 배우고 있을 때, 나는 한 번에 머릿속에 너무 많은 것을 유지할 수 있었습니다. 나는 그들이 작동하지 않을 때 테스트를 건너 뛰는 방법을 끊임없이 잊어 버렸습니다.

팀에서 작업하는 경우 끌어오기 요청에 대한 코드 검토를 사용하여 코딩 스타일을 적용할 수 있습니다. 또한 프로그래밍을 경험이 풍부한 프로그래머와 페어링할 때 피드백 주기를 단축할 수 있습니다.

또한 툴링으로 프로세스를 보강하고 도구가 올바른 작업을 수행하라는 메시지를 표시할 수 있습니다. 사고는 이를 "규칙에 대한 도구"로 묘사했습니다. 기술 레이더 목록 Sensei , 에 : "쉽게 체크 리스트와 같은 거버넌스 규칙 및 절차를 적용보다 올바른 일을 할 수 있도록"


JUnit 테스트 비활성화


이상적으로, 나는 우리 모두가 알다시피, @Disabled 기조를 사용하고 쓰기 :

  @Disabled
  @Test
  void canWeAddTwoNumbers(){
        Assertions.fail("this test was skipped and should not run");
   }

하지만, 배울 때, 나는 @Disabled 사용하기 위해 자신을 훈련했다.

테스트 방법을 사용하지 않도록 설정하는 방법을 잊어 버렸을 때 @Test 부조를 제거하고 테스트 이름을 변경합니다.

class SkipThisTest {
    void SKIPTHIScanWeAddTwoNumbers(){
        Assertions.fail("this test was skipped and should not run");
    }   
}


그것은 좋지 않았지만, 그것은 일을 완료있어. 나는 같은 것을 가지고 있지 않았다. Sensei 내가 기억하는 데 도움이 그래서 나는 가난한 코딩 패턴을 사용하여 떨어졌다.

이 게시물에 대해 기내에서 수행한 작업은 다음과 같습니다.

  • 메서드이름을 변경하여 '건너뛴' 또는 '비활성화' 된 메서드를 찾는 규칙을 만듭니다.
  • QuickFix를 만들어 메서드의 이름을 변경하고 @Test 및 @Disabled @Disabled 추가합니다.


레시피 설정

내가 가지고 첫 번째 단계 Sensei "새로운 레시피를 추가하고 레시피가 작동하려는 코딩 패턴을 검색하는 것입니다.

이름: JUnit: 건너뛰기에서 @Disabled @Test 확인

짧은 설명: 건너뛰기 메서드 를 중지하고 대신 @Disabled @Test 사용


그리고 내 검색은 매우 간단합니다. 기본 레펙스를 사용하여 메서드 이름에 맞게 합니다.

검색:
메서드:
이름:
일치 항목: "건너뛰기.*"


테스트를 건너뛰기 위한 레시피 설정


퀵픽스 설정

QuickFix는 코드를 다시 작성하기 때문에 조금 더 복잡하며 최종 코드를 얻기 위해 몇 단계를 사용합니다.

하고 싶어요:

  • 메서드에 @Test 추가
  • 메서드에 @Disabled 기고 추가
  • 메서드 이름 수정

주석을 추가하는 것은 addAnnotation 수정프로그램을 사용하여 충분히 간단합니다. 내가 부기에 대한 자격을 갖춘 이름을 사용하는 경우 다음 Sensei 자동으로 나를 위해 수입을 추가합니다.

사용 가능한 픽스:
- 이름 : "@Disabled 추가하고 @Test 성서"
  작업:
- 추가 안장 :
"@org.junit.jupiter.api.test"
- 추가 안장 :
"@org.junit.jupiter.api.비활성화"


실제 이름 변경은 좀 더 복잡해 보이지만 regex 교체를 사용하고 있으며 이를 수행하는 일반적인 방법입니다. Sensei 재작성 작업에 는 sed를 사용하는 것입니다.

다시 쓰기 작업은 콧수염 템플릿이므로 Sensei 템플릿 메커니즘에 몇 가지 기능 확장이 있습니다. 함수는 {{#...}}}로 표현되므로 sed의 함수는 {{#sed}입니다. 이 함수는 두 개의 쉼표 구분 인수를 합니다.

첫 번째 인수는 sed 문입니다.

  • s/(.*) SKIPTHIS(.*)/$1 $2/

두 번째 인수는 sed 문을 적용하는 문자열이며,이 경우 메서드 자체이며, 이것은 콧수염 변수에 다음과 같이 표시됩니다.

  • {{{.}}}

나에게 의 재작성 작업을 제공 :

 - 다시 작성 :

       to: "{{#sed}}s/(.*) SKIPTHIS(.*)/$1 $2/,{{{.}}}{{/sed}}"



sed 구현은 인수 자체에 쉼표를 포함할 때 {{#encodeString}} 및 {{/인코딩}}}로 래핑되어 있어야 합니다 #encodeString. {{/인코딩스트링}}

역 조리법

이 예제이므로 데모에서 이 작업을 사용할 수 있으므로 위의 변경 을 사용하여 반전하는 방법을 살펴보고 싶었습니다. Sensei 처방.

나는 @Disabled 만 클래스 SkipThisTest에서 내가 데모를 할 수있는 방법을 찾고 싶습니다 통해 그것을 통해 생각 :

이름: JUnit: SkipThisTest에서 데모 @Disabled 제거하고 건너 뛰기로 되돌리기

짧은 설명: @Disabled 제거하고 프로젝트의 데모 목적으로 SKIPTHIS로 되돌리기

레벨: 경고


레시피 설정 검색은 특정 클래스의 부조와 일치하므로 매우 간단합니다.

검색:
메서드:
주석:
유형: "사용 중"
안으로:
수업:
이름: "건너뛰기테스트"


코드가 오류처럼 보이게하지 않으려면 레시피의 일반적인 설정을 경고로 정의했습니다. 경고는 코드의 하이라이트와 함께 표시되며 코드가 큰 문제가 있는 것처럼 보이게 하지 않습니다.

빠른 수정의 경우 메서드와 일치했기 때문에 재작성 작업을 사용하고 변수를 사용하여 템플릿을 채웁니다.

사용 가능한 픽스:
- 이름 : "비활성화 제거하고 건너 뛰기로 이름을 변경 ..."
  actions:
  - rewrite:
      to: "{{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
        \ }}}{{{ body }}}"


수정자를 제외한 모든 변수를 추가하고(주석을 제거하려면) SKIPTHIS 텍스트를 템플릿에 추가합니다.

이 수정 사항에서는 수정자를 제거하여 다른 주석도 제거하는 약점이 있습니다.


다른 작업 추가

나는 alt+enter가 QuickFix를 표시하는 데 사용될 때 나에게 선택을 제공하기 위해, 또 다른 명명 된 수정을 추가 할 수 있습니다.

사용 가능한 픽스:
- 이름 : "비활성화 제거하고 건너 뛰기로 이름을 변경 ..."
  actions:
  - rewrite:
      to: "{{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
        \ }}}{{{ body }}}"
      target: "self"
- name: "Remove Disabled, keep other annotations, and rename to SKIPTHIS..."
  actions:
  - rewrite:
      to: "{{#sed}}s/(@Disabled\n.*@Test)//,{{{ modifierList }}}{{/sed}}\n\
        {{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
        \ }}}{{{ body }}}"
      target: "self"


여기에서 새 빠른 수정에 추가 라인을 추가했습니다.

{{{#sed}/(@Disabled\n.*@Test)///{{{수정자목록 }}{{/sed}}


이렇게 하면 수정자 목록이 가져와 문자열로 인코딩한 다음 sed를 사용하여 문자열에서 @Disabled 줄을 제거하지만 다른 모든 줄은 수정자(예: 다른 모든 주석만 남깁니다)를 남깁니다.

참고: sed에 """를 추가하면 미리 보기에 주석이 추가됩니다. 이것이 다음과 같은 방법입니다. Sensei sed 명령의 구문 오류를 경고합니다.

/* e.g: {{#sed}}s/all/world/,helloall{{/sed}} */


중첩 된 sed 통화

나는 하나의 검색과 교체에 @Disabled @Test 모두 일치 할 수 운이 좋았다.

코드가 더 복잡하고 sed 명령 시퀀스를 갖고 싶다면 중첩하여 작업을 수행할 수 있습니다.

{{{#sed}/@Test/,{{{#sed}/@Disabled\n/,{{{{{{수정자목록}}}{/sed}} }


위의 예제에서는 {{{수정자 }}}}에 @Disabled 교체를 적용한 결과에 @Test 교체를 적용합니다.


요약

sed는 코드 재작성을 달성하는 매우 유연한 방법이며 복잡한 재작성 조건에 대한 sed 함수 호출을 중첩할 수 있습니다.

이와 같은 조리법은 종종 우리가 우리의 프로그래밍 프로세스를 개선하기 위해 그들을 사용하고 있기 때문에 일시적 인 결국, 우리는 근육 메모리를 구축하고 더 이상 우리가 제거하거나 쿡 북에서 비활성화 할 수있는 가난한 프로그래밍 패턴을 사용하지 않습니다.


---

설치할 수 있습니다. Sensei "환경 설정 \ 플러그인"(맥) 또는 "설정 \ 플러그인"(윈도우)를 사용하여 IntelliJ 내에서 다음 그냥 검색 " sensei 보안 코드".
이 블로그 게시물의 모든 코드는 블로그 예제 리포지토리의 '주니예제' 모듈에서 GitHub에서 찾을 수 있습니다. https://github.com/SecureCodeWarrior/ sensei -블로그 예

목차

PDF 다운로드
리소스 보기
더 알고 싶으신가요?

Alan Richardson은 20년 이상의 전문 IT 경험을 보유하고 있으며, 개발자로 일하며 테스터부터 테스트 책임자까지 모든 수준의 테스트 계층 구조에서 일하고 있습니다. 개발자 관계 책임자 Secure Code Warrior 그는 팀과 직접 협력하여 품질 보안 코드 의 개발을 개선합니다. 앨런은 "친애하는 악테터", "테스터를위한 자바"를 포함하여 네 권의 책의 저자입니다. 앨런은 또한 온라인 교육을 만들었습니다 courses 사람들이 자바와 기술 웹 테스트 및 셀레늄 웹 드라이버를 배울 수 있도록. 앨런은 SeleniumSimplified.com, EvilTester.com, JavaForTesters.com, CompendiumDev.co.uk 자신의 글과 트레이닝 비디오를 게시합니다.

Secure Code Warrior 는 전체 소프트웨어 개발 수명 주기에서 코드를 보호하고 사이버 보안을 최우선으로 생각하는 문화를 조성할 수 있도록 도와드립니다. 앱 보안 관리자, 개발자, CISO 등 보안과 관련된 모든 사람이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 도와드릴 수 있습니다.

데모 예약다운로드
공유하세요:
리소스 허브

시작할 수 있는 리소스

더 많은 게시물
리소스 허브

시작할 수 있는 리소스

더 많은 게시물