일반적인 웹 애플리케이션에서 단위 대 기능 테스트 간의 올바른 균형은 무엇입니까?

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

  •  10-07-2019
  •  | 
  •  

문제

단위 테스트는 쓰기 및 유지 관리가 더 저렴하지만 모든 시나리오를 다루는 것은 아닙니다. 그들 사이의 올바른 균형은 무엇입니까?

도움이 되었습니까?

해결책

좋아요 브라이언 마릭의 사분면 구별이 비즈니스 대 기술이 직면하고 프로그래밍을 지원하는 자동 테스트에서 프로그래밍 vs. 비판 제품.

그 프레임 워크를 통해 균형 문제가되는데, 지금 당장 무엇이 필요합니까?

다른 팁

이 두 가지 유형의 테스트의 의도와 범위를 구별하는 것이 중요합니다.

  • 단위 테스트 일반적으로 모듈/클래스 레벨에서 특정 기능을 테스트합니다 (예 : Create-X, Update-Y, Foo-The-Bar, Compact-the-Whizbang 등).

  • 기능 테스트, 또한 '수락 테스트'라고도합니다. 일반적으로 가장 외부 인터페이스에서 처리 끝까지 사용 사례 시나리오를 테스트합니다. 예를 들어 사용자 인터페이스에서 데이터베이스까지 및 입력 프로세스에서 알림 유틸리티 등으로 다시 돌아갑니다.

이 두 가지 유형의 테스트는입니다 교환 할 수 없습니다, 일반적으로 분리. 따라서 그들 사이에 '균형'을 쳤다는 개념은 의미가 없습니다. 당신은 그들을 필요로하거나 그렇지 않습니다.

테스트 프레임 워크에서 각 유형의 테스트를 쉽게 코딩하는 것을 언급하는 경우 다른 질문이지만 프레임 워크 (예 : Nunit vs. 사용자 범위)의 사용은 테스트.

가장 좋은 "균형"은 일반적으로 신뢰와 완전성을 위해 단위 테스트, 클라이언트 수락을위한 기능 테스트입니다.

Steven Lowe는 단위 테스트와 기능 테스트간에 상충 관계가 없다는 데 동의합니다.

단위 테스트는 방법 및 유형 확인 및 회귀 테스트에 관한 것입니다. 기능 테스트는 기능, 시나리오 및 타당성 테스트에 관한 것입니다. 내 생각에, 겹치지 않는다.

도움이된다면 여기 테스트 카테고리가 있습니다.

개발자는 내부에서 시작하여 코드에 중점을 둔 바깥쪽으로 작업합니다.

  • 어설 션 - 데이터 흐름 및 구조를 확인하십시오
  • 디버거 - 코드 흐름 및 데이터를 확인하십시오
  • 단위 테스트 - 각 기능을 확인하십시오
  • 통합 테스트 - 하위 시스템 확인
  • 시스템 테스트 - 기능 확인
  • 회귀 테스트 - 결함이 고정되어 있는지 확인합니다
  • 보안 테스트 - 시스템을 쉽게 침투 할 수 없습니다.

테스터는 외부에서 시작하여 기능에 중점을두고 안쪽으로 작업합니다.

  • 수락 테스트 - 최종 사용자 요구 사항을 확인하십시오
  • 시나리오 테스트 - 실제 상황을 확인하십시오
  • 글로벌 테스트 - 실행 가능한 입력을 확인하십시오
  • 회귀 테스트 - 결함이 고정되어 있는지 확인합니다
  • 유용성 테스트 - 시스템이 사용하기 쉽는지 확인합니다.
  • 보안 테스트 - 시스템을 쉽게 침투 할 수 없습니다
  • 코드 적용 범위 - 손길이없는 코드 테스트
  • 호환성 - 이전 릴리스와 함께
  • 기발함과 거친 가장자리를 찾고 있습니다.

최종 사용자는 외부에서 일하며 일반적으로 초점이 거의 없습니다.

  • 수락 테스트 - 최종 사용자 요구 사항을 확인하십시오
  • 시나리오 테스트 - 실제 상황을 확인하십시오
  • 유용성 테스트 - 시스템이 사용하기 쉽는지 확인합니다.
  • 기발함과 거친 가장자리를 찾고 있습니다.

현재 작업중인 앱에는 기능 테스트에서 10 : 1 단위가있을 것입니다. 장치 테스트는 단순히 DB에서 엔티티 검색, DB/네트워크 연결에 대한 오류 처리 테스트 등을 사용합니다.

기능 테스트는 부엌 싱크대 접근 방식이 적지 만 사용자의 완전한 주문 등이있을 수 있습니다. 비즈니스 도메인의 끝은 비즈니스 아날 사이트와 운영에 의해 실행되는 비즈니스 영역을 다루는 경향이 있습니다. 이러한 것들은 실행하는 데 몇 주가 걸리고 일반적으로 릴리스주기를 마무리합니다.

내 현재 프로젝트는 약 60% 단위 테스트 범위이며 모든 사용자 스토리는 셀레늄 테스트에서 사용자 스토리에 대한 행복한 일을 보장하며 일부는 추가 커버리지가 있습니다.

우리는 지속적으로 이것을 논의하고 있습니다. 실제로 훨씬 더 높은 커버리지에 대해 점점 더 터무니없는 시나리오의 단위 테스트 범위를 추진할 수있는 점이 있습니까?

주장은 셀레늄 테스트를 확장하면 비즈니스 가치가있는 것들에 대한 테스트 범위가 증가한다는 것입니다. 고객이 실패 할 수있는 단위 테스트 코너 케이스에 실제로 관심이 있습니까?

셀레늄 테스트를 잘하면 비즈니스 가치로 새로운 테스트를 작성하는 비용이 줄어 듭니다. 우리에게는 단위 테스트만큼 간단합니다.

런타임 비용은 또 다른 문제입니다. 이 테스트를 항상 실행하는 작은 상자 클러스터가 있습니다.

그래서 우리는 웹 테스트를 더 선호하는 경향이 있습니다. 아마도 우리는 그것들을 글을 쓰고 부인할 수없는 비즈니스 가치를 제공하기 때문에 아마도 웹 테스트를 더 선호하는 경향이 있습니다.

원래 나는 수용 테스트의 초기 비용 요인으로 인해 기능/수용 테스트보다 단위 테스트를 선호하는 것에 크게 의존했습니다. 그러나 시간이 지남에 따라 나는 철학을 바꾸었고 이제 가능한 한 수락 테스트를 선택하는 강력한 제안자이며, 수락 테스트가 내 요구를 충족시킬 수없는 경우 단위 테스트 만 사용합니다.

단위 테스트에 대한 수락을 선택하는 기본 합리성은 기본 합리적인 합리와 동일합니다. 단단한 암호. 리팩토링 등으로 구현은 급격히 변경 될 수 있어야하지만 모든 비즈니스 사례- 수락 테스트는 변경되지 않고 수용 가능한 시스템 행동 (테스트 패스)을 증명할 수 있어야합니다. 단위 테스트에서는 종종 구현 코드에 대한 테스트의 자연스러운 강력한 결합이 있습니다. 테스트 코드이지만 여전히 코드와 강력한 커플 링을 피해야합니다. 수락 테스트를 선택함으로써 종종 성공의 나선형을 이끌어 냈습니다. 잘 계획되고 소비 할 수있는 소모품이 결합 된 API가 테스트를 변경하지 않고도 구현을 변경할 수 있습니다. 또한 개발자 구현 사고는 비즈니스 시스템-행동 생각과 인라인입니다. 결국 나는이 모든 것이 비즈니스와 코더 만족도에 더 좋습니다.

이론의 관점에서 나는 종종 수락 테스트를 통해 코드 조각을 테스트 할 수 없는지 종종 묻습니다. 왜 코드 조각이 존재해야합니까? 즉 - 유효한 비즈니스 시나리오의 일부가 아닌 경우 해당 코드가 값을 추가합니까 아니면 현재 비용이 남아 있습니까?

또한 수락 테스트를 잘 설명/문서화하면 해당 의견/문서는 일반적으로 시스템의 가장 최신적이고 정확한 언어입니다. 이는 일반적으로 다른 덜 귀중한 문서 접근법을 피할 수 있습니다. 단위 테스트는 그 형태의 "비즈니스 기간"커뮤니케이션에 적합하지 않습니다.

마지막으로, 나는 개인 개발에서만이 견해를 형성하지 않았으며, "매우 기업적인"작업 환경에서 몇 가지 다른 프로젝트 팀으로 성공적으로 입증되었습니다.

JBhttp://jb-brown.blogspot.com

테스트는 빠르게 실행되며 문제를 현지화하는 데 도움이됩니다. 단위 테스트를 통해 해당 모듈 만 테스트하여이를 수행 할 수 있습니다. 그러나 대부분의 웹 시나리오에서 기능/통합/수락 테스트를 충분히 빠르게 실행할 수 있습니다.

한 번은 단위 테스트가 "실행 파일 요구 사항"이라는 것을 읽었습니다. 테스트가 비즈니스 요구 사항을 증명하는 데 중점을 두지 않는 경우 실제로는 사용하지 않습니다. 상세한 요구 사항 (및 이는 산 테스트)이 있으면 가능한 각 시나리오를 연습하기 위해 여러 단위 테스트를 작성하여 데이터 구조 알고리즘 및 논리의 무결성을 보장합니다. 요구 사항이 아닌 것을 테스트하고 있지만 테스트가 통과하려면 사실이어야한다는 것을 알고 있다면 요구 사항이 누락되었을 가능성이 높습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top