Study_Note

component test (unit test) 본문

CSTS

component test (unit test)

12월7일생 2024. 7. 29. 11:37
728x90

반응형

컴포넌트 테스트 (단위 테스트)
component test (unit test)

컴포넌트 테스트는 소프트웨어 개발 과정에서 개별 모듈이나 컴포넌트의 기능을 독립적으로 검증하기 위한 테스트입니다. 이 테스트는 특정 기능이 올바르게 동작하는지 확인하고, 버그나 결함을 조기에 발견하여 수정하기 위해 수행됩니다. 컴포넌트 테스트는 구현 단계에서 각 모듈을 개발한 후에 진행될 수 있으며, 테스트 주도 개발(TDD, Test-Driven Development) 방법론을 따르는 경우에는 실제 코드 작성 전에 테스트 케이스를 먼저 작성하기도 합니다.

컴포넌트 테스트를 수행하기 위해서는 해당 모듈을 독립적으로 실행할 수 있는 테스트 환경이 필요합니다. 이러한 환경을 "테스트 베드(test bed)"라고 하며, 테스트 베드에는 주로 두 가지 주요 구성 요소가 포함됩니다: 테스트 드라이버(driver)와 테스트 스텁(stub)입니다.

 

https://staedtler1207.tistory.com/70

 

test bed, test driver, test stub

테스트 베드, 테스트 드라이버, 테스트 스텁(test bed, test driver, test stub) 테스트 베드(test bed)란?테스트 베드는 실험이나 테스트를 수행하기 위한 특별한 준비된 환경을 의미합니다. 이 환경은 테

staedtler1207.tistory.com

 

컴포넌트 테스트(component test) F.I.R.S.T 원칙

  • Fast (빠르게)
    테스트는 빨라야 합니다. 이는 개발자가 코드 변경 후 테스트를 빠르게 실행해 피드백을 받을 수 있도록 도와줍니다. 느린 테스트는 실행하기 꺼려지고, 이는 코드 품질 저하로 이어질 수 있습니다.
  • Independent (독립적)
    테스트는 서로 독립적이어야 합니다. 한 테스트가 다른 테스트의 실행에 영향을 미쳐서는 안 됩니다. 이를 통해 테스트가 신뢰성을 가질 수 있으며, 개별 테스트의 실패 원인을 명확하게 파악할 수 있습니다.
  • Repeatable (반복 가능)
    테스트는 어떤 환경에서든 동일한 결과를 도출해야 합니다. 이를 통해 개발 환경과 테스트 환경의 일관성을 유지하고, 외부 요인에 의한 결과 변동을 방지할 수 있습니다.
  • Self-validating (자체 검증 가능)
    테스트는 자체적으로 성공과 실패를 판단할 수 있어야 합니다. 테스트 결과를 별도로 확인하거나 해석할 필요 없이, 성공 여부가 명확히 나타나야 합니다.
  • Timely (적시에)
    테스트는 코드 작성 직후 또는 작성과 동시에 만들어져야 합니다. 즉, 코드 작성 후 테스트를 작성하기보다는, 테스트를 먼저 작성하는 TDD(Test-Driven Development)를 지향합니다. 이렇게 하면 코드를 작성할 때 테스트 가능성을 염두에 두고 설계할 수 있습니다.

 

컴포넌트 테스트의 사례와 예시는 다양한 소프트웨어 개발 상황에서 볼 수 있습니다. 컴포넌트 테스트는 주로 특정 기능이나 모듈이 독립적으로 올바르게 동작하는지 확인하는 데 중점을 둡니다. 아래에 다양한 상황에서의 사례와 예시를 제시하겠습니다.

 

사례 1: 계산기 모듈 테스트

[상황] 계산기 애플리케이션에서 사칙연산을 수행하는 모듈을 개발 중입니다.
[예시]

  • 테스트 목표 : `Calculator` 클래스의 `add`, `subtract`, `multiply`, `divide` 메서드가 올바르게 동작하는지 확인합니다
  • 테스트 케이스
    1. `add(2, 3)`의 결과가 5인지 확인
    2. `subtract(5, 3)`의 결과가 2인지 확인
    3. `multiply(4, 5)`의 결과가 20인지 확인
    4. `divide(10, 2)`의 결과가 5인지 확인
    5. `divide(10, 0)`의 경우 예외가 발생하는지 확인

이 경우, 각 메서드에 대해 다양한 입력 값을 테스트하여 예상한 결과가 나오는지 확인합니다.


사례 2: 사용자 인증 모듈 테스트

[상황] 웹 애플리케이션에서 사용자의 로그인 기능을 구현하는 모듈을 테스트합니다.
[예시]

  • 테스트 목표 : `AuthModule` 클래스의 `login` 메서드가 올바르게 사용자 인증을 처리하는지 확인합니다.
  • 테스트 케이스
    1. 올바른 사용자 이름과 비밀번호로 로그인 시 성공하는지 확인
    2. 잘못된 사용자 이름 또는 비밀번호로 로그인 시 실패하는지 확인
    3. 비밀번호가 빈 문자열인 경우 적절한 에러 메시지가 반환되는지 확인
    4. 비활성화된 계정으로 로그인 시 접근이 차단되는지 확인

테스트 드라이버는 `login` 메서드를 호출하고, 사용자의 로그인 상태나 반환되는 메시지를 검증합니다. 

 

사례 3: 데이터 처리 모듈 테스트

[상황] 대규모 데이터를 처리하는 시스템에서 특정 데이터 변환 모듈을 테스트합니다.

[예시]

  • 테스트 목표 : `DataProcessor` 클래스의 `transformData` 메서드가 데이터를 올바르게 변환하는지 확인합니다.
  • 테스트 케이스
    1. 입력 데이터가 특정 포맷일 때, 변환된 데이터가 기대한 형태인지 확인
    2. 입력 데이터에 결측치가 있을 때, 적절히 처리되는지 확인
    3. 대규모 데이터 입력 시 성능 테스트 (시간 초과 없이 완료되는지 확인)
    4. 잘못된 포맷의 데이터 입력 시 예외가 발생하는지 확인

사례 4: 이메일 전송 모듈 테스트

[상황] 사용자가 특정 이벤트를 트리거할 때 이메일을 전송하는 기능을 테스트합니다.

[예시]

  • 테스트 목표 : `EmailService` 클래스의 `sendEmail` 메서드가 이메일을 올바르게 전송하는지 확인합니다.
  • 테스트 케이스
    1. 올바른 이메일 주소로 전송 시 성공하는지 확인
    2. 잘못된 이메일 주소로 전송 시 오류가 발생하는지 확인
    3. 이메일 본문이 누락된 경우 예외 처리되는지 확인
    4. 첨부 파일이 있는 경우 올바르게 전송되는지 확인

이메일 전송 모듈 테스트에서는 종종 테스트 스텁을 사용하여 실제 이메일 서버와의 통신을 모방합니다. 이는 테스트 실행 시 실제 이메일이 전송되지 않도록 하고, 테스트 환경에서 안정적으로 테스트할 수 있도록 합니다.


결론

이러한 사례들은 컴포넌트 테스트가 다양한 기능과 모듈을 독립적으로 검증하는 데 어떻게 사용될 수 있는지를 보여줍니다. 각 테스트 케이스는 모듈의 특정 기능이 올바르게 구현되었는지 확인하고, 예상치 못한 에러나 버그가 없는지 점검합니다. 컴포넌트 테스트는 전체 시스템이 아닌 개별 모듈을 대상으로 하여 빠른 피드백을 제공하고, 안정적인 소프트웨어 개발을 지원합니다.

'CSTS' 카테고리의 다른 글

system test & acceptance test  (0) 2024.07.31
integration test  (0) 2024.07.30
software development stages and testing  (0) 2024.07.22
testing method - model based testing  (0) 2024.05.16
testing method - risk based testing  (0) 2024.03.14