티스토리 뷰
단위 테스트의 뜻
단위 테스트는 프로그램을 구성하는 단위(모듈)가 개별 기능을 올바르게 수행하는지 확인하는 테스트입니다. 일반적으로 함수와 메서드는 단위 테스트 의 단위(모듈)입니다. 프로그램이 전체적으로 올바르게 동작하고 있는지를 검증하는 결합 테스트는 개발의 비교적 후의 단계에서 QA 팀 등에 의해 행해지는 경우가 많다는 것과 대조적으로, 단위 테스트는 프로그램 코딩(구현) 단계에서 단위(모듈) 내의 결함을 제거하기 위하여 개발자에 의해 실시되는 경우가 많은 것이 특징입니다.
단위 테스트의 이점
모듈이 결합되기 전의 단계에서 테스트가 실시되기 때문에, 문제의 원인의 식별이나 수정이 용이합니다. 개발 전체의 결함 수정 비용을 낮추는 효과가 있으며, 코드의 내용을 잘 이해하고 있는 개발자에 의해, 코드 작성과 동시에 또는 직후에 수행합니다. (테스트 구동형 개발이 이루어지기 때문에 타당성과 신뢰성이 높은 테스트케이스를 확보할 수 있음)
단위 테스트 과제
개발자에게 테스트 부담이 커지기 쉽습니다.테스트를 실시하는 데 있어서 어느 정도의 개발 스킬이 필요하기 때문에 도입이 어려운 경우가 있습니다. 일정 관계로 단위 테스트에 시간 확보가 불가능할 경우, 테스트가 생략되거나 불완전해지기 쉽습니다.
단위 테스트 과정
전체 프로그램이 아닌 프로그램을 구성하는 모듈을 개별적으로 테스트하려면 테스트 대상 코드 외에도 드라이버 및 스텁과 같은 추가 코드가 필요할 수 있습니다.
테스트 드라이버
테스트할 코드를 호출하는 코드를 대체합니다.
스텁(Stub)
테스트 대상 코드가 호출하는 코드를 대체하고 호출 대상 코드가 아직 작성되지 않은 경우 등에 사용합니다.
단위 테스트는 위 메커니즘을 사용하여 프로그램의 다른 부분과 외부 코드에서 테스트할 함수, 메서드를 격리하고 철저하게 확인할 수 있다는 장점이 있습니다. 반면에, 이러한 추가 코드를 작성하고 관리하기 위한 부하는 프로젝트의 규모에 따라 유지보수 공수가 커지며 기간이 지날수록 증가합니다.
단위 테스트의 종류
테스트 케이스를 작성할 때, 무엇에 주목할 것인가의 관점에서 보면, 단위 테스트 는 크게 화이트 박스 테스트와 블랙박스 테스트로 분류할 수 있습니다. 화이트 박스 테스트는 테스트 대상 함수 또는 메서드 내부 구조에 주목하고, 블랙박스 테스트는 테스트 대상 함수 또는 메서드 외부 본 기능에 주목합니다.
화이트 박스 테스트
테스트 대상 함수 또는 메소드의 내부 구조에 주목하여 조건 분기나 반복 등의 각 부분을 확실히 테스트합니다. 함수 메서드의 모든 명령어를 실행하는 명령어 커버리지(명령 커버리지) , 모든 분기 조건에서 참/거짓 분기 모두를 통과하도록 하는 판정 조건 커버리지(결정 커버리지, 또는 분기 커버리지, 브랜치 커버리지라고도 한다. 됩니다) 등이 있습니다. 그 때문에, 포괄률의 측정(커버리지 해석)이나 조건을 포괄하기 위한 테스트치의 추출 등이 필요하게 됩니다.
블랙박스 테스트
테스트 대상 함수 또는 메소드 외부에서 본 기능에 주목하여 코드가 예상되는 사양을 충족하는지 확인합니다. 사양과 관련된 검증이므로 테스트 케이스를 작성하고 결과를 확인하려면 인간의 판단이 필요합니다.
단위 테스트 자동화
단위 테스트를 자동화하여 더 높은 효과를 기대할 수 있습니다. 자동화하면 많은 테스트 케이스를 누락 없이 실행할 수 있습니다. 또한 매일 밤 모든 테스트 케이스를 배치로 실행하면 이전 날 변경으로 인해 기존 코드 동작에 결함이 발생하지 않았는지, 확인할 수 있습니다. 단위 테스트의 자동 실행을 가능하게 하는 테스트 프레임워크라고 하는 것이 있습니다. 잘 알려진 것은 Java 언어 용 JUnit이지만 다른 다양한 언어 용 프레임 워크가 있습니다.
- Java 언어 : JUnit
- C/C++ 언어 : CppUnit
-. NET 언어 : NUnit
이것들을 총칭해서 xUnit이라고 부릅니다. xUnit 프레임워크는 테스트 실행 및 결과 검증 기능을 제공합니다. 테스트 케이스는 모두 코드로 작성되므로 자동 실행이 가능합니다. 그러나 기본적으로 테스트 케이스 생성 기능은 제공하지 않으며, 자체 테스트 케이스를 만들어야 합니다.
'IT' 카테고리의 다른 글
소프트웨어 테스트의 7가지 원리 (0) | 2023.02.06 |
---|---|
Python 개발의 장점과 단점 (0) | 2023.01.31 |
QA 커뮤니케이션 방안 (0) | 2023.01.10 |
PC 팬이 시끄러울 경우 해결방법 (2) | 2023.01.08 |
로우코드의 의미 (0) | 2023.01.05 |