기능 테스트로 충분하지 않은 이유는 무엇입니까? 단위 테스트는 무엇을 제공합니까?

StackOverflow https://stackoverflow.com/questions/182325

문제

방금 단위 테스트가 필요하거나 중요하다는 사실에 동의하지 않는 리드 개발자와 대화를 나누었습니다. 그의 견해로는 내부 리팩토링 (인터페이스 변경 등)이 테스트를 다시 작성하거나 다시 살펴볼 필요가 없기 때문에 충분한 코드 범위를 가진 기능 테스트로 충분해야합니다.

나는 설명을 시도했지만 멀지 않았고 너희들이 더 잘할 수 있다고 생각했다. ;-) 그래서...

기능 테스트가 제공하지 않는 테스트 코드를 단위로 만드는 데 몇 가지 이유는 무엇입니까? 기능 테스트라면 어떤 위험이 있습니까?

#1 편집 모든 위대한 답변에 감사드립니다. 기능 테스트를 통해 전체 제품에 대한 테스트만을 의미하는 것이 아니라 제품 내 모듈에 대한 테스트를 의미하는 것이 아니라 필요한 경우 조롱하는 단위 테스트가 낮은 수준이 아닌 제품의 테스트를 의미합니다. 우리의 기능 테스트는 자동이며 지속적으로 실행 중이지만 단위 테스트 (단위 테스트의 큰 장점 중 하나)보다 시간이 오래 걸립니다.

나는 벽돌 대 하우스 예를 좋아합니다. 내 리드 개발자가 말하는 것이 집의 벽을 테스트하는 것이 충분하다고 생각합니다. 개별 벽돌을 테스트 할 필요가 없습니다 ... :-)

도움이 되었습니까?

해결책

내 머리 꼭대기에서

  • 단위 테스트는 노력없이 반복 할 수 있습니다. 한 번 쓰고, 수천 번 실행하고, 인간의 노력이 필요하지 않으며, 기능 테스트에서 얻는 것보다 훨씬 빠른 피드백
  • 단위 테스트는 작은 장치를 테스트하므로 오류가 발생하는 올바른 "섹터"를 즉시 가리 킵니다. 기능 테스트는 오류를 지적하지만 협력에서도 많은 모듈로 인해 발생할 수 있습니다.
  • 인터페이스 변경을 "내부 리팩토링"이라고 부르지 않았습니다. 인터페이스 변경은 많은 코드를 끊는 경향이 있으며 (내 의견으로는) 새로운 테스트 루프가 아닌 새로운 테스트 루프를 강요합니다.

다른 팁

단위 테스트는 DEVS가 코드가 실패한 위치를 확인하는 것입니다.

기능 테스트는 비즈니스가 코드가 요청한 작업을 수행하는지 확인하는 것입니다.

단위 테스트는 DEVS가 코드가 실패한 위치를 확인하는 것입니다.

기능 테스트는 비즈니스가 코드가 요청한 작업을 수행하는지 확인하는 것입니다.

단위 테스트는 벽돌을 올바르게 제조했는지 확인합니다.

기능 테스트는 집이 고객의 요구를 충족하는지 확인하고 있습니다.

그것들은 다르지만, 전자가 수행된다면 후자는 훨씬 쉬울 것입니다.

기능 테스트가 실패하면 매번 전체 코드베이스를 효과적으로 테스트하기 때문에 문제의 원인을 찾는 것이 훨씬 어려울 수 있습니다. 대조적으로, 단위 테스트는 잠재적 문제 영역을 구획화합니다. 다른 모든 단위 테스트가 성공하면 이 하나, 당신은 문제가 다른 곳이 아닌 테스트중인 코드에 있다는 것을 보장합니다.

개발주기에서 가능한 빨리 버그를 잡아야합니다. 버그가 설계에서 코드로 이동하거나 코드로 이동하거나 테스트하거나 생산에 대한 테스트를 수행하면 수정에 필요한 비용과 시간이 증가합니다.

우리 상점은 그 이유만으로 단위 테스트를 시행합니다 (다른 이유가 있지만 우리에게는 충분합니다).

순수한 극단 프로그래밍 / 애자일 개발 방법론을 사용하는 경우 장치 테스트는 항상 개발 요구 사항이므로 항상 필요합니다.

순수한 XP/Agile One에서는 응용 프로그램에 수행 할 테스트를 기반으로 모든 요구 사항을 만듭니다.

  • 기능 테스트 - 기능 요구 사항을 생성합니다.
  • 단위 테스트 - 기능 또는 객체 요구 사항을 생성합니다.

이 단위 테스트 외에는 기능 요구 사항을 지속적으로 추적하는 데 사용될 수 있습니다.

함수의 작동 방식을 변경해야하지만 입력 필드와 출력은 그대로 유지됩니다. 그런 다음 단위 테스트는 테스트 만 실행하면 가능한 문제를 계속 추적하는 가장 좋은 방법입니다.

~ 안에 TDD/BDD, 프로그램을 작성하려면 단위 테스트가 필요합니다. 프로세스가갑니다

실패 테스트 -> 코드 -> 전달 테스트 -> 리팩터 -> 반복

연결된 기사는 또한 TDD/BDD의 이점을 언급합니다. 요약해서 말하자면:

  • 디버거 사용을 제거하는 데 매우 가깝습니다 (지금은 테스트에서만 사용하고 거의 거의 사용하지 않습니다).
  • 코드는 몇 분 이상 지저분한 상태를 유지할 수 없습니다.
  • API 내장에 대한 문서 예제
  • 느슨한 커플 링을 강요합니다

링크에는 TDD/BDD의 (어리석은) 연습 예제도 있지만 PowerPoint (EW)에 있습니다. 여기HTML 버전입니다.

당신이 잠깐 동안 가정하십시오 이미 가지고 있습니다 가능한 모든 사용 사례를 확인하고 단위 테스트 추가를 고려하는 철저한 기능 테스트 세트. 기능 테스트는 가능한 모든 버그를 포착하므로 단위 테스트는 버그를 잡는 데 도움이되지 않습니다. 그러나 단위 테스트, 통합 테스트 및 기능 테스트의 조합과 비교하여 기능 테스트를 독점적으로 사용하는 데있어 일부 트레이드 오프가 있습니다.

  • 단위 테스트는 더 빨리 실행됩니다. 테스트 스위트가 실행하는 데 몇 시간이 걸리는 큰 프로젝트에서 일한 적이 있다면 빠른 테스트가 중요한 이유를 이해할 수 있습니다.
  • 내 경험에 따르면, 실제로 말하면, 기능적 테스트는 플라크가 될 가능성이 높습니다. 예를 들어, 때로는 Headless Capybara-Webkit 브라우저가 어떤 이유로 테스트 서버에 도달 할 수 없지만 다시 실행하면 잘 작동합니다.
  • 단위 테스트는 디버그하기가 더 쉽습니다. 단위 테스트가 버그를 잡았다 고 가정하면 문제가 어디에 있는지 정확히 정확히 찾아내는 것이 더 쉽고 빠릅니다.

반면에 기능 테스트를 유지하기로 결정하고 ~ 아니다 단위 테스트를 추가하십시오

  • 전체 시스템을 다시 구성 해야하는 경우 테스트를 다시 작성할 필요가 없습니다. 단위 테스트가 있으면 많은 것이 삭제되거나 다시 작성 될 것입니다.
  • 전체 시스템을 재구성 해야하는 경우 회귀에 대해 걱정할 필요가 없습니다. 코너 케이스를 다루기 위해 단위 테스트에 의존했지만 해당 단위 테스트를 삭제하거나 다시 작성 해야하는 경우 새 단위 테스트는 이전 단위 테스트보다 실수가있을 가능성이 높습니다.
  • 기능 테스트 환경이 이미 설정되어 있고 학습 곡선을 넘어 섰을 때, 추가 기능 테스트를 작성하는 것이 종종 단위 테스트, 통합 테스트 및 기능 테스트의 조합보다 작성하기가 쉽고 종종 올바르게 작성하기가 쉽습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top