2012-08-12 3 views
6

알파벳 A에서 알파벳 B로 가능한 한 가독 적으로 음역을 시도하는 응용 프로그램을 만드는 경우를 가정 해 봅시다.모든 단위 테스트가 성공적일까요?

언어 B가 매우 복잡하기 때문에 이것이 항상 성공적인 것은 아닙니다. 그러나 당신은 대략적인 음역을 얻습니다.

20-30 %가 실패 할 것으로 예상 할 때 어떻게 단위 테스트를 작성 하시겠습니까?

답변

8

항상 단위 테스트가 성공적이라는 목표를 가져야합니다. 사용하는 방식에 따라 소프트웨어의 심각한 오류와 예상대로 보이는 번역 오류를 구분할 수 없습니다.

내가 모두 분리 제안 : 만 소프트웨어는

  • 테스트를 생성합니다 (이 번역에서 몇 가지 실수를 포함하더라도)를 예상 한대로 작동하는지 확인하기 위해

    1. 를 사용하여 단위 테스트를 귀하의 소프트웨어에 의해 생성 된 번역을 포함하는 데이터 세트. 이 테스트 데이터 세트를 수동으로 또는 R과 같은 통계 소프트웨어 패키지를 사용하여 검사하여 번역 품질에 대한 아이디어를 얻을 수 있습니다.
  • +1

    +1 * 프로그램에서 지정된 요구 사항을 충족하는지 확인하는 * acceptance * 테스트에서 프로그램의 정확성을 검증하는 테스트. –

    5

    실패 할 것으로 예상되는 단위 테스트는 단위 테스트가 아닙니다. 필터 역할을하는 평가 함수를 사용하여 성공 정의를 변경하고 "충분히 근접한"것인지를 결정하고 합격/불합격을 결정해야합니다. 번역사가 좋아지면 필터에 막대를 올릴 수 있습니다.

    7

    단위 테스트는 결정적이어야합니다. 오류 테스트는 소프트웨어 오류를 나타냅니다. 은 "의도 한대로 작동합니다"이 아닙니다. 귀하의 경우에는 변환 성공 여부에 관계없이 결과를 확인하고 테스트 할 수있는 방법으로 데이터를 준비하십시오. (항상 실패에 대한 테스트는 에 대한 예상 오류 - 항상 중요합니다. 시험 합격/불합격).

    3

    이 상황에서 배운 기술은 기능적 (또는 결정 성) 코드 부분 만 테스트하는 것입니다. 물론, 결정적 부분과 비 결정적 부분을 분리하는 것이 어려운 부분입니다. 이것을 말하는 축약 형 방식은 '[리팩토링]을 기능적으로'줄이는 것인데, 이는 결정 론적 인 코드의 부분을 분리 한 다음 해당 부분을 테스트하는 것을 의미합니다.

    시나리오 기반의 컨텍스트 비트의 경우이 코드는 이라는 오픈 소스 단위 테스트 라이브러리를 사용하여 레거시 코드에 대한 테스트를 수행 할 때이 기술을 적용한 내용에 대해 blog 게시물을 읽어보십시오.

    여기서 흥미로운 또 다른 기술은 '이론 기반'테스트입니다. 이에 대한 자세한 내용은 blog 게시물을 확인하십시오.

    1

    단위 테스트가 실패 할 수있는 유일한 이유는 타이밍이 관련되어있는 경우입니다 (주로 전자 테스트의 경우). 그러나 이러한 경우에도 단위 테스트에서 타이밍 문제를 제거하는 것이 목표입니다. 가능한 경우 타임 아웃 또는 다른 타이밍 문제를 확장/전환함으로써 그것이 불가능할 때, 잘 문서화되어야합니다.

    타이밍 문제를 제거하고 테스트를 결정적으로 수행하는 또 다른 방법은 일부 외부 삽입 메소드를 사용하여 외부 인터페이스 용 스텁을 작성하는 것입니다. 즉, 외부 인터페이스 메소드가 리턴 할 값을 설정할 수 있어야합니다. 이 방법으로 단위 테스트를 설정하면 문자 그대로 모든 오류 조건을 모두 테스트 할 수 있습니다.

    (이야기 : 여러 단위 테스트가 때때로 실패하는 회사에서 근무했습니다. 심각한 오류 또는 타이밍 문제인지 분석 할 수있는 사람은 소수에 불과했기 때문에 좋은 단위 테스트를 만드는 데 많은 시간을 절약 할 수 있습니다. 첫 번째 장소).

    관련 문제