Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2주차 - TDD 시작 #2

Open
3 tasks
hou27 opened this issue Jan 4, 2023 · 2 comments
Open
3 tasks

2주차 - TDD 시작 #2

hou27 opened this issue Jan 4, 2023 · 2 comments
Assignees
Labels
documentation Improvements or additions to documentation

Comments

@hou27
Copy link
Member

hou27 commented Jan 4, 2023

⭐ Chapter 2. TDD 시작

TDD란 무엇인지 알아보고, 현실적인 기능을 구현해보며
TDD의 흐름을 파악하고 알아가는 시간을 갖는다.

  • 암호 검사기 구현을 통해 TDD 경험해보기
  • Chap 2의 내용을 개인 기술 블로그에 정리하기
  • Chap 2 내용을 보고 중요하다고 생각되는 부분에 해당하는 관련 문제를 만들고, Core Member에게 제출하기
@hou27 hou27 added this to the GDSC MJU 1기 TDD 스터디 milestone Jan 4, 2023
@hou27 hou27 added the documentation Improvements or additions to documentation label Jan 4, 2023
@hou27 hou27 changed the title 2주차 2주차 - TDD 시작 Jan 4, 2023
@hou27 hou27 mentioned this issue Jan 9, 2023
3 tasks
@hou27
Copy link
Member Author

hou27 commented Jan 11, 2023

📚 Chap 2 문제 📚

정리본

객관식

Q ) TDD에서 첫 번째 테스트를 시작할 때는 어떤 상황을 선택해야 할까? 다음 세 가지 상황 중 하나를 고르시오.

  1. 가장 일반적인 상황
  2. 가장 쉬운 상황
  3. 가장 어려운 상황

빈칸 채우기

Q ) tdd의 흐름 과정을 보기의 단어로 나열해보자.

보기 - [ 리팩토링, 코딩, 테스트, 설계, 테스트 ]

______ → ______ → ______ → ______ → ______

빈칸 채우기

Q) 보기를 빈칸에 넣으시오.

보기 - [ 일반 개발 방식, TDD 개발 방식 ]

___________은 설계→개발→테스트→리팩토링 이고,

___________은 설계→테스트→ (리팩토링→) 개발→리팩토링 이다.

빈칸 채우기

Q ) TDD 사이클은 실패한 테스트, 성공한 테스트, 리팩토링 과정을 의미하는, ___ - ___ - ___ 이라고 부르기도 한다.

빈칸 채우기

Q ) TDD는 개발 과정에서 지속적으로 코드 정리를 하므로 코드 품질이 급격히 나빠지지 않게막아주는 효과가 있다. 이는 향후 __________ 비용을 낮추는데 기여한다.

O / X 퀴즈

Q ) 테스트 코드의 중복은 무턱대고 제거하는 것이 좋다

Q ) 테스트 주도 개발 시에 반드시 코드 구현은 테스트를 통과할 만큼만 작성해야한다.

실습 문제

🔥 특수문자를 포함하면 보안성이 올라가도록 하는 암호 검사기 추가하기 - 가능한 특수 문자 → `[!@#$%^&*(),.?:{}|<>]` - 기존 보안성 WEAK, STRONG 각 1, 2가지 조건 만족에서 2, 3가지 조건 만족으로 변경해 보안성 강화

정답

A) 2번
A) 설계->테스트->코딩->리팩토링->테스트
A) 일반 개발 방식, TDD 개발 방식
A) 레드-그린-리팩터
A) 유지보수
A) X
A) O
A)

  • 테스트코드 작성 및 결과

Untitled

Untitled

  • PasswordStrengthMeter.java
public PasswordStrength meter(String s) {
        if(s==null || s.isEmpty()) return PasswordStrength.INVALID;

        int metCounts = getMetCriteriaCounts(s);

        if(metCounts<=2) return PasswordStrength.WEAK;
        if(metCounts==3) return PasswordStrength.NORMAL;

        return PasswordStrength.STRONG;
    }

    private static int getMetCriteriaCounts(String s) {
        int metCounts = 0;
        if(s.length()>=8) metCounts++;
        if(meetsContainingNumberCriteria(s)) metCounts++;
        if(meetsContainingUppercaseCriteria(s)) metCounts++;
        if(meetsContainingSpecialCharacterCriteria(s)) metCounts++;
        return metCounts;
    }

...

private static boolean meetsContainingSpecialCharacterCriteria(String s) {
        for (char ch : s.toCharArray()) {
            if("[!@#$%^&*(),.?:{}|<>]".contains(Character.toString(ch))) {
                return true;
            }
        }
        return false;
    }
Chap 2 전체 문제

<한규범>

tdd의 흐름 과정은?
답 : 테스트 -> 코딩 -> 리팩토링 -> 테스트

<장채은>

테스트 코드의 중복은 무턱대고 제거하는 것이 좋다 (X)
: 중복을 제거한 이후에도 수정이 쉽고, 가독성이 좋은 경우에만 중복을 제거하는 것이 좋으며
중복을 제거함에 따라 오히려 테스트 코드의 과리가 어려워지면 다시 중복 이전 상태로 돌려야하기 때문

<박소정>

💡 TDD 사이클은 실패한 테스트, 성공한 테스트, 리팩토링 과정을 의미하는, ___ - ___ - ___ 이라고 부르기도 한다.
  • 레드-그린-리팩터

🔥 특수문자를 포함하면 보안성이 올라가도록 하는 암호 검사기 추가하기 - 가능한 특수 문자 → `[!@#$%^&*(),.?:{}|<>]` - 기존 보안성 WEAK, STRONG 각 1, 2가지 조건 만족에서 2, 3가지 조건 만족으로 변경해 보안성 강화
    • 테스트코드 작성 및 결과

    Untitled

Untitled

- PasswordStrengthMeter.java

```python
public PasswordStrength meter(String s) {
        if(s==null || s.isEmpty()) return PasswordStrength.INVALID;

        int metCounts = getMetCriteriaCounts(s);

        if(metCounts<=2) return PasswordStrength.WEAK;
        if(metCounts==3) return PasswordStrength.NORMAL;

        return PasswordStrength.STRONG;
    }

    private static int getMetCriteriaCounts(String s) {
        int metCounts = 0;
        if(s.length()>=8) metCounts++;
        if(meetsContainingNumberCriteria(s)) metCounts++;
        if(meetsContainingUppercaseCriteria(s)) metCounts++;
        if(meetsContainingSpecialCharacterCriteria(s)) metCounts++;
        return metCounts;
    }

...

private static boolean meetsContainingSpecialCharacterCriteria(String s) {
        for (char ch : s.toCharArray()) {
            if("[!@#$%^&*(),.?:{}|<>]".contains(Character.toString(ch))) {
                return true;
            }
        }
        return false;
    }
```

<김연지>

rladuswl

<임건영>

테스트 주도 개발은 테스트를 먼저 작성하고 테스트에 실패하면 테스트를 통과시킬 만큼 코드를 추가하는 과정을 반족하면서 점진적으로 기능을 완성해나가는 개발 방법론이다 - 0, x
답 0

<정창우>

Q) TDD에서 첫 번째 테스트를 시작할 때는 어떤 상황을 선택해야 할까? 다음 세 가지 상황 중 하나를 고르시오.

  1. 가장 일반적인 상황
  2. 가장 쉬운 상황
  3. 가장 어려운 상황
    정답: 2

<김정호>

[O / X 문제]

Q. 테스트 주도 개발 시에 반드시 코드 구현은 테스트를 통과할 만큼만 작성해야한다.

A. O

TDD를 통해 개발하는 경우엔 테스트를 통과할 만큼만 구현해야한다. 이런 흐름때문에 테스트 코드에 따른 다음 개발 범위도 정해지게 되며, 테스트가 개발을 주도하게 된다.

<이상민>

Q) TDD는 개발 과정에서 지속적으로 코드 정리를 하므로 코드 품질이 급격히 나빠지지 않게막아주는 효과가 있다. 이는 향후 __________ 비용을 낮추는데 기여한다.
A) 유지보수

@hou27 hou27 closed this as completed Jan 15, 2023
@hou27
Copy link
Member Author

hou27 commented Jan 16, 2023

[TDD] 1. TDD 시작

@hou27 hou27 reopened this Mar 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

2 participants