본문 바로가기

잡인터뷰

TDD는 무엇인가? - Test Driven Development

반응형

TDD는 무엇인가?

TDD(테스트 주도 개발)는 소프트웨어 개발 방법론 중 하나로,

개발자가 먼저 테스트 케이스를 작성하고, 이를 통과하는 코드를 작성하는 것이다.

TDD는 크게 세 단계로 이루어집니다.

TDD의 개발주기; IMAGE FROM https://www.allaboutcircuits.com/technical-articles/how-test-driven-development-can-help-you-write-better-unit-tests/

  • 첫째, 실패하는 테스트를 작성한다. 이는 해당 기능을 구현하기 위해 필요한 최소한의 요구사항을 담고 있다.
  • 둘째, 테스트를 통과할 수 있는 코드를 작성한다. 이 단계에서는 단순히 테스트를 통과할 수 있도록 코드를 작성하는 것이 아니라, 테스트를 통과하면서 코드의 품질을 유지하도록 작성한다.
  • 셋째,. 이는 코드를 보다 간결하고 유지보수하기 쉽도록 개선하는 것이다.

예를 들어, 로그인 기능을 개발한다고 가정해 보면,

우선 로그인 기능을 구현하기 위해 필요한 최소한의 요구사항을 생각 해야 힌디.

이를 바탕으로 다음과 같은 테스트 케이스를 작성할 수 있다.

더보기

테스트 케이스 1: 로그인이 실패하는 경우

- 아이디와 비밀번호가 일치하지 않는 경우 로그인이 실패해야 함

- 아이디 또는 비밀번호가 입력되지 않은 경우 로그인이 실패해야 함

테스트 케이스 2: 로그인이 성공하는 경우

- 올바른 아이디와 비밀번호를 입력한 경우 로그인이 성공해야 함

이제 위의 테스트 케이스를 바탕으로 코드를 작성한다.

먼저 첫 번째 테스트 케이스를 작성헤보면 밑에와 같다.

def test_login_failure():
    assert login('id', 'wrong_password') == False
    assert login('wrong_id', 'password') == False
    assert login('', '') == False

위의 코드에서 login() 함수는 아직 작성되지 않았기 때문에 테스트가 실패한다.

이제 login() 함수를 작성하면 밑에와 같다.

def login(username, password):
    if username == 'correct_id' and password == 'correct_password':
        return True
    else:
        return False

위의 코드에서는 입력된 아이디와 비밀번호가 올바른지를 확인하고,

그 결과에 따라 True 또는 False를 반환한다.

이제 첫 번째 테스트 케이스를 실행해 보고 테스트가 성공하면 `test_login_failure()`

두 번째 테스트 케이스를 작성한다.

def test_login_success():
    assert login('correct_id', 'correct_password') == True

이제 두 개의 테스트 케이스가 모두 작성되었으니, 두 개의 테스트 케이스를 한 번에 실행하면 된다.

test_login_failure()
test_login_success()

테스트가 모두 통과하면,

이제 리팩토링을 할 차례다.

코드가 간결하고 유지보수하기 쉽도록 리팩토링을 한다.

예를 들어, login() 함수를 밑에와 같이 개선할 수 있다.

def login(username, password):
    return username == 'correct_id' and password == 'correct_password'

위의 코드에서는 if문 대신 == 연산자를 사용하여 코드를 보다 간결하게 만들었다.

이렇게 TDD를 통해 로그인 기능을 구현하였다.

이처럼 TDD 방법론은 테스트 케이스를 먼저 작성하고,

이를 통과하는 코드를 작성하며,

리팩토링을 수행하여 코드의 품질을 개선하는 과정을 반복함으로써 소프트웨어를 개발하는 방법이다.

반응형