본문 바로가기

TDD

예제; 암호 검사기

반응형

암호 검사기 규칙

  • 길이가 8글자 이상
  • 0~9 사이의 숫자
  • 대문자 포함

 

 

암호 검사기 평가 기준

  • 3가지 규칙을 모두 충족하면 암호는 강함 - STRONG
  • 2가지 규칙을 충족하면 암호는 보통 - NORMAL
  • 1개 이하의 규칙을 충족하면 암호는 약함 - WEAK

 

 

암호 검사기 규칙 조합의 경우의 수

  • 모든 항목을 충족하는 경우 - STRONG
  • 길이가 8글자 미만이고 모든 항목을 충족하는 경우 - NORMAL
  • 길이가 8글자 이상이고 나머지 항목은 충족하지 않는 경우 - WEAK
  • 숫자는 없고 나머지 항목은 충족하는 경우 - NORMAL
  • 숫자는 있고 나머지 항목은 충족하지 않는 경우 - WEAK
  • 대문자가 없고 나머지 항목은 충족하는 경우 - NORMAL
  • 대문자가 있고 나머지 항목은 충족하지 않는 경우 - WEAK
  • 모든 항목을 충족하지 않는 경우

 

Step0: 테스트 클래스 생성하기

Step1: [RED] 첫 번째로 진행할 Test Case 선택하기

  • TDD에서 첫 번째 테스트는 매우 중요하다
    • TDD를 점진적으로 기능을 확장해 가는 방식으로 개발을 하는데 첫 번째 테스트부터 모든 기능을 구현해야하는 Test Case를 선택한다면 이후 진행 과정이 순탄하게 흘러가지 않는다
    • 첫 번째 Test Case를 선택할 때 기준은 **구현하기 가장 쉬운 상황**이나 **가장 예외적인 상황**을 선택
  • 그래서 “모든 조건을 충족”하는 Test Case 선택

Step1-2: [GREEN] 실패 테스트 코드 고치기

  • 첫 번째로 “실패 테스트”를 실행할 수 있도록 오류를 해결한다
    • 이 때 가장 중요한 점이 테스트를 통과시킬 만큼의 코드만 작성해야 한다
  • 두 번째로 오류라 모두 해결했다면 Test Case를 통과할 수 있도록 로직 작성하기
    • 로직을 작성할 때는 1차원적으로 가장 쉬운 간단한 방법을 선택해야 한다

Step1-3: [YELLOW; REFACTOR] 코드 구조 확인하기

  • 리팩토링이 필요한 부분이 보이면?
    • 리팩토링을 진행하고 그렇지 않다면 남아있는 테스트 항목 중 하나를 선택해서 새로운 테스트 작성

Step2-1: [RED] 실패하는 테스트 작성하기

  • 길이만 8글자 미만이고 나머지 조건은 충족”하는 케이스
  it("Test Case: 길이가 8자 미만이고 모두 충족하는 경우", () => {
    const meter = new PasswordStrengthCheck();
    const result = meter.meter("aA1!aa"); // Expected: NORMAL

    expect(result).toBe("NORMAL");
  });

 

Step2-2: [GREEN] 테스트 성공시키기 로직 수정

class PasswordStrengthCheck {
  meter(password) {
	  // Step 2: [GREEN] + [YELLOW] 단계를 성공시키기 위한 코드
    if (password.length < 8) {
      return PasswordStrength.NORMAL;
    }

    return PasswordStrength.STRONG;
  }
}
반응형