단위 테스트와 기능 테스트의 차이점은 무엇입니까? 단위 테스트도 기능을 테스트 할 수 있습니까?
단위 테스트와 기능 테스트의 차이점은 무엇입니까? 단위 테스트도 기능을 테스트 할 수 있습니까?
답변:
단위 테스트-클래스의 메소드 (함수)와 같은 개별 단위를 테스트하여 모든 종속성을 조롱합니다.
기능 테스트-AKA 통합 테스트. 시스템의 기능 조각을 테스트합니다. 이것은 많은 방법을 테스트하고 데이터베이스 또는 웹 서비스와 같은 종속성과 상호 작용할 수 있습니다.
단위 테스트는 개발자에게 코드가 올바르게 작동하고 있음을 알려줍니다. 기능 테스트는 개발자에게 코드가 올바른 작업을 수행하고 있음을 알려줍니다 .
단위 테스트와 기능 테스트 에서 더 많은 내용을 읽을 수 있습니다
단위 테스트 및 기능 테스트에 대한 실생활 비유를 잘 설명하면 다음과 같이 설명 할 수 있습니다.
많은 경우 시스템 개발은 집을 짓는 것과 비슷합니다. 이 비유는 정확하지 않지만 단위 테스트와 기능 테스트의 차이점을 이해하기 위해 확장 할 수 있습니다.
단위 테스트는 주택 건설 현장을 방문하는 건물 관리자와 유사합니다. 그는 집안의 다양한 내부 시스템, 기초, 프레임, 전기, 배관 등에 중점을 둡니다. 그는 집안의 일부가 정확하고 안전하게 작동하는지, 즉 건축법을 준수하는지 확인합니다.
이 시나리오의 기능 테스트는 동일한 건설 현장을 방문하는 주택 소유자와 유사합니다. 그는 내부 시스템이 적절하게 작동하고 건물 관리자가 자신의 작업을 수행한다고 가정합니다. 주택 소유자는이 집에서 살게 될 것에 초점을 맞 춥니 다. 그는 집의 외모에 관심이 있으며, 다양한 방이 편안한 크기이며, 집이 가족의 요구에 적합합니까, 아침 햇살을 잡기 좋은 곳의 창문입니다.
주택 소유자가 집에서 기능 테스트를 수행하고 있습니다. 그는 사용자의 관점을 가지고 있습니다.
건물 관리자가 집에서 단위 테스트를 수행하고 있습니다. 그는 건축업자의 관점을 가지고 있습니다.
요약하면
단위 테스트는 프로그래머의 관점 에서 작성되었습니다 . 클래스 의 특정 메소드 (또는 단위 )가 특정 태스크 세트를 수행하도록하기 위해 작성됩니다.
기능 테스트는 사용자의 관점 에서 작성되었습니다 . 사용자가 원하는대로 시스템이 작동 하는지 확인합니다 .
단위 테스트는 독립적 인 행동 단위를 테스트합니다 . 행동의 단위는 무엇입니까? 독립적으로 단위 테스트를 수행 할 수있는 가장 작은 시스템입니다. (이 정의는 실제로 원형입니다. IOW 는 전혀 정의 가 아니지만 실제로 직관적으로 이해할 수 있기 때문에 실제로 잘 작동하는 것 같습니다.)
기능 테스트는 독립적 인 기능을 테스트합니다.
행동 단위는 매우 작습니다. 저는이 어리석은 "방법 당 하나의 단위 테스트"만트라를 절대 싫어하지만, 크기 관점에서 보면 그것은 옳습니다. 행동 단위는 방법의 일부와 몇 가지 방법 사이에있는 것입니다. 기껏해야 하나 이상의 개체가 아닙니다.
기능은 대개 여러 가지 방법으로 구성되며 여러 객체를 가로 질러 여러 아키텍처 레이어를 통해 잘라냅니다.
단위 테스트는 다음과 같습니다. validate_country_code()
함수를 호출 하고 국가 코드를 전달하면 'ZZ'
반환해야합니다 false
.
기능 테스트는 다음과 같습니다. 국가 코드로 배송 양식을 작성 ZZ
하면 메뉴에서 국가 코드를 선택할 수있는 도움말 페이지로 리디렉션되어야합니다.
단위 테스트는 개발자의 관점에서 개발자를 위해 개발자가 작성합니다.
기능 테스트는 사용자를 대상으로 할 수 있으며,이 경우 사용자 관점에서 사용자와 함께 (또는 사용자가 직접 올바른 도구 및 올바른 사용자를 사용하여) 개발자가 작성합니다. 또는 개발자가 직면 할 수도 있습니다 (예 : 사용자가 신경 쓰지 않는 일부 내부 기능을 설명 할 때). 개발자의 경우 개발자가 작성하지만 여전히 사용자의 관점에서 작성됩니다.
전자의 경우, 기능 테스트는 수용 테스트 및 기능 요구 사항 또는 기능 사양의 실행 가능한 인코딩으로도 사용될 수 있으며, 후자의 경우 통합 테스트로도 사용될 수 있습니다.
단위 테스트는 자주 변경되며 기능 테스트는 주요 릴리스 내에서 변경되지 않아야합니다.
TLDR :
질문에 대답하기 위해 : 단위 테스트 는 기능 테스트 의 하위 유형 입니다.
기능 및 비 기능 테스트 라는 두 가지 큰 그룹이 있습니다 . 내가 찾은 최고의 (완전하지 않은) 그림은 이것입니다 (source : www.inflectra.com ) :
(1) 단위 테스트 : 작은 코드 조각 (기능 / 방법)의 테스트. (화이트 박스) 기능 테스트로 간주 될 수 있습니다.
함수가 결합되면 테스트 할 수있는 사용자 인터페이스 (모듈 테스트)를 사용하여 모듈 = 독립형을 만듭니다. 최소한 두 개의 별도 모듈이 있으면 서로 붙인 다음에옵니다.
(2) 통합 테스트 : 두 개 이상의 (서브) 모듈 또는 (서브) 시스템을 함께 모아서 잘 작동하는지 확인하십시오.
그런 다음 3 번째 모듈을 통합 한 다음 4 번째와 5 번째 순서를 자신이나 팀이 원하는 순서대로 통합하고 모든 퍼즐 조각을 한 번에 배치하면
(3) 시스템 테스트 : SW 전체를 테스트합니다. 이것은 거의 " 모든 조각 의 통합 테스트 "입니다.
괜찮 으면옵니다
(4) 수락 테스트 : 고객이 실제로 요청한 것을 구축 했습니까? 물론 승인 테스트는 고객이 스포츠카를 원했고 밴을 제작했음을 알 수있는 마지막 단계뿐만 아니라 수명주기 전체에서 수행해야합니다 .
Functional Test
표준화 된 용어가 아니며 다른 사람들과 다른 의미를 가지고 있습니다.
"기능 테스트"는 코드에서 함수 (방법)를 테스트한다는 의미는 아닙니다. 일반적으로 시스템 기능을 테스트하고 있음을 의미 foo file.txt
합니다. 명령 줄에서 실행 하면 줄 file.txt
이 바뀔 수 있습니다. 대조적으로, 단일 단위 테스트는 일반적으로 단일 방법의 단일 사례에 적용됩니다. length("hello")
5 length("hi")
를 반환하고 2를 반환해야합니다.
단위 테스트와 기능 테스트 사이의 라인에 대한 IBM의 의견 도 참조하십시오 .
ISTQB에 따르면이 두 가지는 비교할 수 없습니다. 기능 테스트는 통합 테스트가 아닙니다.
단위 테스트는 테스트 수준 중 하나이며 기능 테스트는 테스트 유형입니다.
원래:
시스템 (또는 구성 요소)의 기능은 '무엇인가'입니다. 이는 일반적으로 요구 사항 사양, 기능 사양 또는 사용 사례에 설명되어 있습니다.
동안
단위, 모듈 및 프로그램 테스트라고도하는 구성 요소 테스트는 별도로 테스트 가능한 소프트웨어 (예 : 모듈, 프로그램, 객체, 클래스 등)의 결함을 검색하고 기능을 검증합니다.
ISTQB 구성 요소 / 단위 테스트에 따르면 기능적이거나 기능적이지 않을 수 있습니다.
구성 요소 테스트에는 기능 테스트 및 리소스 동작 (예 : 메모리 누수), 성능 또는 견고성 테스트, 구조 테스트 (예 : 의사 결정 범위)와 같은 특정 비 기능적 특성 테스트가 포함될 수 있습니다.
소프트웨어 테스팅 기초 에서 인용 -ISTQB 인증
Rails에서 유닛 폴더는 모델에 대한 테스트를 보유하고, 기능 폴더는 컨트롤러에 대한 테스트를 보유하고, 통합 폴더는 다수의 컨트롤러가 상호 작용하는 테스트를 보유합니다. 비품은 테스트 데이터를 구성하는 방법입니다. 그것들은 조명기 폴더에 있습니다. test_helper.rb 파일에는 테스트의 기본 구성이 있습니다. 당신은 이것을 방문 할 수 있습니다 .
AFAIK, 단위 테스트는 기능 테스트가 아닙니다. 작은 예를 들어 설명하겠습니다. 전자 메일 웹앱의 로그인 기능이 사용자와 마찬가지로 작동하는지 테스트하려고합니다. 이를 위해 기능 테스트는 다음과 같아야합니다.
1- existing email, wrong password -> login page should show error "wrong password"!
2- non-existing email, any password -> login page should show error "no such email".
3- existing email, right password -> user should be taken to his inbox page.
4- no @symbol in email, right password -> login page should say "errors in form, please fix them!"
기능 테스트에서 유효하지 않은 입력으로 로그인 할 수 있는지 확인해야합니까? 예 : 이메일에는 @ 기호가없고, username에는 하나 이상의 점이 있으며 (하나의 점만 허용됨), .com이 @ 등 앞에 나타납니다.? 일반적으로 아니요! 이러한 종류의 테스트는 단위 테스트로 진행됩니다.
아래 테스트와 같이 유닛 테스트 내에서 유효하지 않은 입력이 거부되는지 확인할 수 있습니다.
class LoginInputsValidator
method validate_inputs_values(email, password)
1-If email is not like string.string@myapp.com, then throw error.
2-If email contains abusive words, then throw error.
3-If password is less than 10 chars, throw error.
기능 테스트 4는 실제로 단위 테스트 1이 수행하는 작업을 수행합니다. 때로는 기능 테스트가 여러 가지 이유로 단위 테스트로 수행 된 일부 (전부는 아님) 테스트를 반복 할 수 있습니다. 이 예에서는 기능 테스트 4를 사용 하여 유효하지 않은 입력을 입력 할 때 특정 오류 메시지가 나타나는지 확인합니다 . 모든 잘못된 입력이 거부되는지 테스트하고 싶지 않습니다. 이것이 단위 테스트의 일입니다.
단위 테스트
단위 테스트에는 일반적으로 함수 또는 메소드 인 최소 코드 단위의 테스트가 포함됩니다. 단위 테스트는 대부분 단위 / 방법 / 함수 개발자가 수행합니다. 왜냐하면 함수의 핵심을 이해하기 때문입니다. 개발자의 주요 목표는 단위 테스트로 코드를 다루는 것입니다.
일부 기능은 단위 테스트를 통해 테스트 할 수 없다는 제한이 있습니다. 모든 단위 테스트를 성공적으로 완료 한 후에도; 제품의 올바른 작동을 보증하지 않습니다. 단위 테스트는 한 번만 사용하도록 작성된 동안 시스템의 일부에서 동일한 기능을 사용할 수 있습니다.
기능 테스트
코드를 보지 않고 제품의 기능적 측면에서 테스트를 수행하는 블랙 박스 테스트 유형입니다. 기능 테스트는 대부분 전용 소프트웨어 테스터가 수행합니다. 여기에는 제품의 지정된 기능을 테스트하기 위해 표준화되지 않은 데이터를 사용하는 포지티브, 네거티브 및 BVA 기술이 포함됩니다. 테스트 범위는 단위 테스트보다 기능 테스트에 의해 개선 된 방식으로 수행됩니다. 테스트를 위해 응용 프로그램 GUI를 사용하므로 코드가 담당하는 기능을 결정하는 대신 인터페이스의 특정 부분이 정확히 무엇을 담당하는지 쉽게 판단 할 수 있습니다.
매우 간단하게 말할 수 있습니다 :
단위 테스트 :-단위 테스트는 특히 제품이 개발되는 동안 구성 요소별로 제품 구성 요소를 테스트하는 데 사용됩니다. Junit 및 Nunit 유형의 도구는 또한 단위별로 제품을 테스트하는 데 도움이됩니다. ** 통합 후 문제를 해결하는 대신 개발 초기에 문제를 쉽게 해결할 수 있습니다.
기능 테스트 :-테스트와 관련하여 테스트에는 두 가지 주요 유형의 테스트가 있습니다. 1. 기능 테스트 2. 비 기능 테스트.
비 기능 테스트 (Non-Functional Test)는 테스터가 테스트하는 테스트로, 제품은 고객이 언급하지 않은 품질 속성을 모두 수행하지만 해당 품질 속성이 있어야합니다. 같은 :-성능, 사용성, 보안,로드, 스트레스 등 기능 테스트에서 :-고객은 이미 자신의 요구 사항을 가지고 있으며 제대로 문서화되어 있습니다. 제안 된 시스템에. 이를 위해 테스터는 제안 된 시스템으로 구현 된 기능을 테스트해야합니다.