2008-11-03 11 views
6

안녕하십니까,단위 테스트는 무엇을 의미합니까?

저는 단위 테스트라는 용어를 상당히 느슨하게 사용하는 해외 개발자 그룹과 협력하고 있습니다.

QA 문서에서는 단위 테스트를 작성한 다음 시스템의 단위 테스트를 수행하는 방법에 대해 설명합니다.

이것은 단위 테스트가 전혀 무엇인지에 대한 나의 해석과 일치하지 않습니다.

저는 하나의 클래스를 연습하는 데 사용되는 테스트 또는 테스트 세트 (일반적으로 블랙 박스)로 사용되는 단위 테스트에 익숙합니다. 테스트중인 클래스는 구현에 의해 다른 클래스가 포함되도록 요구할 수 있지만 일반적으로 단위 테스트에서 수행되는 단일 클래스입니다. 이 시스템 기능 테스트, intergration 테스트, 인수 테스트가 다음

내가 알고 싶은

이 조금 내 부분에 현학적이다? 아니면 단위 테스트와 단위 테스트를 언급 할 때 이것을 생각합니까?

편집 : Rob Wells. 블랙 박스 관점에서 그러한 테스트에 접근하는 것이 한 가지 측면 일 뿐이라는 것을 분명히해야합니다. 모의 객체를 사용하여 내부 동작을 검증 할 때 상자 내부에서 수행 할 작업을 알고 있기 때문에 실제로는 흰색 상자 관점에서 테스트하고 있습니다.

+0

나는 소프트웨어 공학의 관점에서 볼 때, 각 유형의 테스트가 다르다 (그리고 대부분은 구별된다). –

답변

4

단일 테스트를 구현하기 위해 단위 테스트를 구현하려고합니다. 내가 테스트하고있는 메소드에 의해 사용되는 종속 클래스 및 메소드에 대한 crete "mock"클래스를 만들려고합니다 ... ... 그 메소드의 코드 연습은 실제로 다른 메소드의 코드를 호출하지 않습니다. 유닛 테스트는 "테스팅"이되어서는 안됩니다. (이러한 메소드에 대한 다른 유닛 테스트가 있습니다.)이 방법은 유닛 테스트가 실패하면 유닛 테스트가 테스트중인 메소드의 실패를 확실하게 나타냅니다 ...

모의 수업 종속 클래스의 인터페이스와 동작을 "시뮬레이트"하여 내가 테스트 할 메소드가이를 호출 할 수 있고 시스템 요구 사항에 따라 표준적이고 잘 정의 된 방식으로 동작하도록 설계되었습니다. 이 접근 방식을 작동 시키려면 잘 정의 된 인터페이스에서 그러한 종속 클래스와 메서드에 대한 호출을 만들어야합니다. 따라서 "테스터"프로세스가 테스트중인 클래스에 종속 클래스의 모의 버전을 "주입"할 수 있습니다 실제 생산 버전의 .... 이것은 "Dependency Injection"또는 "Inversion of Control"(IOC)이라고하는 일반적인 디자인 패턴과 비슷합니다.

이러한 종류의 패턴을 구현하는 데 도움이되는 여러 타사 도구가 있습니다. 제가 들었던 것은 "Rhino-Mock"또는 그와 비슷한 것입니다 ...

편집 : Rob Wells. @ 챠리스. 고마워. 모의 객체를 사용하여 테스트중인 것을 제외한 다른 클래스를 사용하여 완전히 대체하는 것을 잊었습니다.

  • 가 포함 된 클래스에 의해 반환되는 오류를 시뮬레이션하는 데 사용할 수 있습니다

    난 당신이 모의 객체를 언급 한 후 기억 한 다른 몇 가지가 있다는 것입니다.

  • 테스트중인 클래스에서 예외 처리를 확인하기 위해 특정 예외를 발생시키는 데 사용할 수 있습니다.
  • 설정 비용이 높은 항목을 시뮬레이션하는 데 사용할 수 있습니다 (예 : 큰 SQL DB 백엔드.
  • 들어오는 요청의 내용을 확인하는 데 사용할 수 있습니다.
  • 자세한 내용은

는 "Mocks Aren't Stubs"라고 마틴 파울러의 종이에 모양과 실용주의 프로그래머의 기사 "Mock Objects"

10

단위 테스트는 일반적으로 개발자가 코드의 격리 된 섹션을 테스트하는 데 사용됩니다. 경계 사례, 오류 사례 및 일반 사례를 다룹니다. 제한된 코드 세그먼트의 정확성을 보여주기위한 것입니다. 모든 유닛 테스트가 통과되면, 고립 된 코드 세그먼트가 자신이해야 할 일을한다는 것을 입증하게됩니다.

통합 테스트를 수행 할 때 단 대단 사례를보고 단위 테스트를 통과 한 모든 세그먼트가 함께 작동하는지 확인해야합니다. 기능 테스트는 코드가 요구 사항을 충족하는지 확인합니다. 수락 테스트는 최종 사용자가 최종 제품을 승인하는지 확인하기 위해 수행됩니다.

3

많은 단위 테스트가 먼저 수행되고 개발이 주위에서 수행되는 기술에 대해 들어 봤습니다. 누군가가 "TDD (Test Driven Development) - TDD (Thanks Elie)"라고 말했습니다.

하지만 해외 작업 인 경우 이러한 단위 테스트를 수행하는 데 시간을 소비하기 때문에 더 많은 비용을 청구 할 수 있습니다. 그런 다음주의해야합니다. 단위 테스트에 경험이있는 사람으로부터 2 차 의견을 듣고 실제로 말하고있는대로 확인할 것입니다.

단위 테스트는 개발 프로젝트에 약간의 시간을 더할 것이지만, 물론 품질 관리를 제공 할 수도 있습니다. 그럼에도 불구하고, 이것은 내가 사내 프로젝트에서 원하는 품질 관리의 유형입니다. 이것은 오프 쇼어 회사가 당신에게 따뜻한 퍼지를주기 위해 버리는 것일 수도 있습니다.

+0

첫 번째 단락에서 참조하는 기술은 TDD : Test Driven Development입니다. – Elie

+0

예, 정확히는 - 고마워요. – JasonMichael

2

Wikipedia 단위 테스트는 OO 프로그래밍의 경우 클래스의 메소드가 될 최소 코드 양을 테스트하는 것입니다.

일부는 단위 테스트에서 의미하는 바를 좀 더 일반적인 용어로 사용할 수 있습니다. 일부는 일부 통합 테스트를 구성 단위가 혼합 된 단위 테스트로 간주 할 수 있습니다.

1

이것은 거의 "What is a 'Unit'?"질문의 반복입니다.

"단위"는 유연하게 정의 할 수 있습니다. 자신의 문서에 "unit"에 대한 정의가없는 경우이를 분명히해야합니다.

유닛을 코드의 큰 어셈블리로 생각할 수도 있습니다. 가장 바람직한 정의는 아닙니다.

여러 계층의 테스트 (유닛, 모듈, 패키지, 애플리케이션)에 동의하지만, 이것도 단위 테스트 도구로 수행 할 수 있다고 생각합니다. "단위 란 무엇인가?" 질문은 항상 올라오고 있습니다.

단위는 상황에 따라 다릅니다. 개별 개발자의 경우 단위는 클래스 여야합니다. 때로는 모듈 또는 패키지를 의미하기도합니다.

팀의 경우 팀 단위는 패키지이거나 완전한 응용 프로그램 일 수 있습니다.

0

우리가 생각하는 것은 무엇이 중요합니까? 여기서 문제는 문서에서 사용하는 용어에 불만이 있다는 것입니다. 왜 그들과상의하지 않니?

+0

@Tim, QA 문서에 대한 의견을 보내 드리겠습니다. 건배, 롭 –

4

테스트가 하나의 일관된 비즈니스 운영 만 처리하는 한 단위 테스트가 여러 클래스 또는 하위 모듈에도 적용될 수있는 이유는 없습니다. 한 사람의 급여를 계산하기 위해 다양한 전략을 사용하는 BO의 방법 인 "calculateWage"에 대해 생각해보십시오. 그것은 내 의견으로는 하나의 단위 테스트입니다.

3

테스트하는 데 사용하는 프로세스와이를 지원하는 데 사용되는 기술 간에는 차이가 있습니다. 단위 테스팅에 사용되는 다양한 프레임 워크는 일반적으로 매우 유연하며 작은 코드 단위, 큰 단위를 테스트하고 전체 프로세스를 테스트하는 데 사용할 수 있습니다. 이러한 유연성은 혼란을 가져올 수 있습니다.

귀하가 채택한 특정 방법론이나 프로세스가 무엇이든간에, 귀하가 다양한 단위 테스트를 별개의 어셈블리 또는 모듈로 분리하는 것이 좋습니다. 정확한 배치는 코드와 회사 조직에 따라 다릅니다.

단위 테스트 프레임 워크를 사용하여 축적 된 효과는 코드 테스트의 대부분이 자동화된다는 것입니다. 올바르게 채택 된 개발자는 완전한 Q & A 프로세스를 거치지 않고 코드 코드의 변경 사항을 더 잘 평가할 수 있습니다. Q & 프로세스 자체는 개발 단계에서 나오는 코드의 품질이 높아질수록 생산성이 향상됩니다.

모든 품질 문제에 대한 해답은 다른 도구와 마찬가지로 유용한 도구임을 이해하십시오.

0

10 년 전, 코드에서 작성된 테스트로 "단위 테스트"가 사용되기 전에 동일한 지정이 수동 테스트에 적용되었습니다. 나는 매우 공식화 된 소프트웨어 개발 프로세스로 소프트웨어 개발 회사에서 일했습니다. 코드를 작성하기 전에 "단위 테스트"를 작성해야했습니다. 그 시대에 단위 테스트는 텍스트 문서 (예 : Word)로 작성되었습니다. 그들은 앱을 사용할 때 사용자가 따라야 할 정확한 단계를 설명했습니다. 예를 들어, 새로운 고객을 설정하기 위해 페이지에 정확한 입력을 입력하는 방법을 설명했습니다. 또는 사용자가 특정 제품을 검색하여 표시된 정보가 테스트 문서와 일치하는지 확인해야했습니다. 따라서 테스트는 테스터가 수행 한 스크립트로 결과를 기록한 것입니다. 단위 테스트의 새로운 화신이 등장하자 오래되고 인간적인 테스트 또는 새로운 코딩 된 테스트를 의미하는지 여부를 파악하는 동안 혼란 스러웠습니다.

2

단위 테스트는 자신감있게 수행 할 수있는 가장 작은 확신입니다. 즉, 회귀 및 스펙 편차에 대한 방패를 반복적으로 구축하는 것이 중요합니다. 실제로 객체 지향 아키텍처와 통합하는 방법이 아닙니다.

0

는 나도 해외 팀의 그룹을지도한다. 우리는 단위 테스트 세트를 가지고 있습니다 ...하지만 그다지 의미가 없습니다. :) 그래서 우리는 품질에 대한 기능과 테스터에 훨씬 더 의존합니다. 단위 테스트의 상속 문제는 함수에 대한 완벽한 지식을 갖고 있으며 개발자를 신뢰한다는 것입니다. 현실 세계에서는 가정하기가 어렵습니다.

0

단위 테스트 : 단위 또는 소프트웨어에 대한 테스트가 완료되었습니다. 기능 명세 또는 의도 된 설계 구조를 만족하는지 검증한다.

관련 문제