문제

최근에 단위 테스트에 대한 기능 테스트에 대해 들었습니다.

나는 단위 테스트가 가장 원자 형태에서 주어진 코드의 각 가능성을 테스트한다는 것을 이해합니다. 그러나 기능 테스트는 어떻습니까?

이것은 코드가 작동하는 경우에만 테스트하는 것처럼 들리지만 단위 테스트만큼 신뢰할 수 있습니까?

나는 그 문제에 대한 두 가지 생각의 학교가 있다고 들었습니다. 일부는 단위 테스트, 다른 기능 테스트를 선호합니다.

좋은 자원, 링크, 서적, 참고 문헌 또는 주제에 대한 나의 길을 설명하고 끌어들일 수있는 여러분 모두가 있습니까?

감사!

도움이 되었습니까?

해결책

Jason의 대답은 맞습니다. 다른 유형의 테스트마다 목적이 다르며 최상의 결과 (좋은 설계, 회의 사양, 결함 감소)를 위해 계층화 할 수 있습니다.

  • 단위 테스트 = 디자인 드라이브 ( 시험 중심 개발, 또는 TDD)
  • 통합 테스트 = 모든 조각이 함께 작동합니다
  • 고객 수락 테스트 = 고객의 요구 사항을 충족합니까?
  • 수동 테스트 = 종종 UI를 다룹니다. 전용 테스터는 자동화가 누락 된 것을 찾을 수 있습니다
  • 로드 테스트 = 현실적인 데이터로 시스템이 얼마나 잘 수행됩니까?

이 범주 사이에는 일부 중첩이 있습니다. 예를 들어 단위 테스트는 동작을 지정할 수 있습니다.

그리고 다른 사람들이 있습니다. 대부분의 사람들보다 더 많은 사람들이 알고 싶어합니다. 소프트웨어 테스트.

사람들이 놓친 한 가지 점은 단위 테스트가 코드를 테스트하고 있다는 것입니다. 격리 상태. 예를 들어 좋은 단위 테스트는 데이터베이스에 도달하지 않습니다. 여기에는 두 가지 장점이 있습니다. 테스트를 빠르게 실행하여 더 자주 실행하고 느슨하게 결합 된 클래스 (더 나은 디자인)를 작성해야합니다.

당신은 자원을 요청했습니다. Roy Osherove의 책을 추천합니다 .NET의 예제를 사용한 단위 테스트 기술. 책은 완벽하지는 않지만이 책은 좋은 테스트를 작성하는 데 많은 훌륭한 포인터를 제공합니다.

편집 : 그리고 기존 소프트웨어에 대한 테스트를 작성하기 위해 Michael Feathers의 책을 능가하는 것은 없습니다. 레거시 코드로 효과적으로 작동합니다.

다른 팁

단위 테스트 대 기능 테스트는 아닙니다 xor, 오히려 and. 단위 테스트는 분리 된 단위 테스트에 관한 것이며 기능 테스트는 통합 전체를 테스트하는 것입니다 (모든 단위가 제대로 작동합니까?).

둘 다 좋은 소프트웨어 엔지니어링 관행의 필수 구성 요소입니다.

단위 테스트는 코드 단위 (메소드 등)를 테스트하여 기대하는 작업을 수행하는지 확인합니다.

기능 테스트는 시스템 설계를 테스트하여 조각이 올바르게 상호 작용하는지 확인합니다. int를 가져 와서 문자열을 반환하고 완전히 테스트하는 명령을 작성하는 경우 작동하는지 확인할 수 있습니다. 그러나 시스템 테스트가 없다면 코드의 나머지 부분이 널을 받아 들일 수 있다고 생각하지만 볼 수는 없다는 것을 알 수 없습니다.

두 가지 유형의 테스트가 중요합니다.

편집 : GBJBAANB가 말한 것과 약간 다른 견해를 추가하려면 :

  • 단위 테스트 = 내 코드가 작동합니다
  • 기능 테스트 = 내 디자인이 작동합니다
  • 통합 테스트 = 내 코드가 타사 파티를 올바르게 사용하고 있습니다 (데이터베이스 등)
  • 공장 승인 테스트 = 내 시스템이 작동합니다
  • 사이트 수락 테스트 = 코드가 짜증납니다. 이것은 내가 요청한 것이 아닙니다!?!
  • 단위 테스트 = 가장 낮고 세분화 된 레벨.
  • 기능 테스트 = 중간, 모듈 식 레벨.
  • 통합 테스트 = 더 높은 응용 프로그램 수준.
  • 공장 수락 테스트 = 모든 작업을 참조하십시오
  • 사이트 수락 테스트 = 모든 것을 참조하십시오. :)

위의 모든 것은 유용하지만 상호 배타적이지는 않습니다. 당신은 그들 대부분을해야하지만 각 부분에서 소비하는 시간은 당신이 그들로부터 얻은 결과에 달려 있습니다. 그게 전부입니다. 코드가 너무 모듈 식으로 쉽게 테스트 되기에는 너무 모듈식이되면 기능 테스트에 노력을 기울입니다. 소규모 구성 요소 라이브러리를 쓰고 있다면 단위 테스트에 시간을 보내고 군용 미사일을위한 제어 시스템을 작성하는 경우 분명히 현장 수락 테스트를 테스트해야합니다 (실패 할 때도 폭발이 재미 있어야합니다 :)).

기능 테스트도 호출됩니다 시스템 테스트, 전체 시스템을 테스트하고 기능 요구 사항을 확인하는 것을 목표로합니다.

단위 테스트 "단위"를 테스트하는 것을 목표 격리 상태. 때로는 개발자 테스트라고합니다. 사실 이후 단위 테스트는 어려울 수 있습니다. TDD 코드 전에 테스트를 작성합니다.

사람들은 보완 적 장치가 모두 함께 통합 될 때와 독립적으로 작동 할 수 있거나 단위 테스트를 통과 할 수 있으며 모든 제품 요구 사항을 충족하지는 않습니다.

단위 테스트 및 기능 테스트에는 두 가지 결과가 있습니다.

단위 테스트는 작은 코드 조각이 예상대로 작동하는지 확인합니다. 일반적으로 개발자가 코드가 올바르게 작동하는지 확인합니다. 그들은 일반적으로 테스트 프레임 워크에 의해 자동화됩니다.

기능 테스트는 기능이 프로그램을 통해 특정 경로를 통해 예상대로 작동하는지 확인합니다. 그들은 일반적으로 소프트웨어의 사람이 실행하여 프로그램이 사용자를 위해 예상되는 방식으로 작동하도록합니다. 따라서 더 높은 수준이므로 한 번에 여러 장치를 테스트합니다.

둘 다 중요하다고 생각합니다. 그러나 자원이 제한되어 있고 기술을 선택/선택 해야하는 경우, 그것이 만든 제품에 따라 다르지만 (일부 버튼을 통해 인간이 사용하는 자동차 제어 제품) 기능 테스트가 가장 중요합니다. 사용자가 제품을받을 때 제품이해야 할 일을 확인하고 확인합니다. 그렇다고해서 단위 테스트를 거부해야한다는 것을 의미하지는 않지만 푸시 코메스 투 셔브 인 경우 기능이 훌륭한 사용자 경험을 보장하고 제품을 문 밖으로 나가는 데 가장 중요합니다.

예를 들어, 데이터베이스 엔진 (또는 반드시 사용자를 대면 할 필요는없는 다른 제품)을 생산하는 경우 단위 테스트가 실제로해야 할 일이 될 수 있습니다.

단위 테스트는 코드 조각을 테스트하고 프로그래머에게 다른 코드가 예상되는 일을하고 있음을 확인합니다. 테스트 중심 개발에서, 단위 테스트는 먼저 작성되어 코드가 작성되기 전에 테스트가 통과되기 전에 실패하는 것으로 관찰됩니다. 프로그래머는 단위 테스트에 관심이 있습니다. 단위 테스트는 빠르게 실행됩니다.

기능 테스트는 블랙 박스 요구 사항을 테스트하고 사용자 기능이 제자리에 있음을 보여줍니다. 예를 들어, 큰 빨간색 버튼을 누르면 벨이 울리기 시작합니다. 기능 테스트는 코드를 테스트하지 않을 수도 있습니다. 아마도 벨이 버튼을 눌렀을 때 벨이 울리는 기계적 프로세스가있을 수 있습니다. 고객은 기능 테스트에 관심이 있습니다. 이해하는 방식으로 작업하는 경우 높은 수준의 프로세스가 확인됩니다. 그들은 종종 실행이 느립니다.

대부분의 개발 작업에는 두 곳이 있습니다.

단위 테스트는 소규모 코드 단위를 테스트하여 예상대로 작동하는지 확인해야합니다.

기능 테스트는 시스템의 전체 기능이 예상대로 테스트해야합니다.

그것들은 다른 수준에 있으며 둘 다 사용해야합니다.

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