사람들은 어떻게 테스트 스위트를 유지합니까?


17

특히 다음과 같은 측면이 궁금합니다.

  1. 테스트 사례가 잘못되었거나 구식이며 수리 또는 폐기해야한다는 것을 어떻게 알 수 있습니까? 테스트 케이스가 유효하지 않더라도 여전히 통과하고 침묵 상태가되어 소프트웨어가 제대로 작동한다고 잘못 믿을 수 있습니다. 그렇다면 테스트 스위트의 이러한 문제를 어떻게 알 수 있습니까?

  2. 테스트 스위트가 더 이상 충분하지 않으며 새로운 테스트 케이스를 추가해야한다는 것을 어떻게 알 수 있습니까? 이것이 요구 사항 변경과 관련이 있다고 생각하지만 테스트 스위트의 적절성을 확인하는 체계적인 접근 방법이 있습니까?


4
역설 : 누가 테스트를 테스트합니까?
Konrad Rudolph

답변:


11

짧은 답변 : Cobertura, PMD, Sonar 등과 같은 코드 커버리지 및 코드 품질 도구와 같은 테스트 사례의 품질을 유지하는 데 도움이되는 알려진 도구를 사용하면 프로그램의 중요한 구성 요소가 충분히 테스트되지 않은 경우이를 알 수 있습니다. 또한 문제가 발생할 때마다 가장 먼저 깨질 수있는 통합 테스트를 작성하십시오.

긴 대답 :

테스트 사례가 잘못되었거나 구식이며 수리 또는 폐기해야한다는 것을 어떻게 알 수 있습니까? 테스트 케이스가 유효하지 않더라도 여전히 통과하고 침묵 상태가되어 소프트웨어가 제대로 작동한다고 잘못 믿을 수 있습니다. 그렇다면 테스트 스위트의 이러한 문제를 어떻게 알 수 있습니까?

  • Cobertura 와 같은 코드 적용 툴을 사용하면 주어진 클래스 또는 복잡한 메소드에 대한 테스트 케이스가 더 이상 충분하지 않음을 감지 할 수 있습니다. 모든 곳에서 100 % 코드 범위에 도달 할 필요는 없으며 대부분의 경우 달성하기 어렵고 반드시 유용한 것은 아닙니다. 그러나 프로그램의 가장 중요한 측면에 대한 테스트는 코드 범위의 80 % 이상을 목표로 유지되어야합니다.
  • 사용하여 연속 빌드 및 통합 도구 등, 젠킨스 와 함께, 내가 매우 좋아 해요 소나 플러그인, 당신은 최신 변경 사항에 대한 책임을 사람들에게 경고의 이메일과 다른 유형의 전송 설정 트리거 할 수 있습니다. 다양한 그래프와 통계 (Sonar는 다른 여러 도구 중에서도 Cobertura를 사용합니다)는 코드 검토 자와 테스트 케이스 개발자가 중요한 것에 집중할 수 있도록 도와줍니다.

테스트 스위트가 더 이상 충분하지 않으며 새로운 테스트 케이스를 추가해야한다는 것을 어떻게 알 수 있습니까? 이것이 요구 사항 변경과 관련이 있다고 생각하지만 테스트 스위트의 적절성을 확인하는 체계적인 접근 방법이 있습니까?

첫 번째 질문에 대해 쓴 것은 두 번째 질문에 대한 답변의 일부입니다. 여기에 다음 사항을 추가하겠습니다.

  • 테스트 사례 외에 통합 테스트 사례 (또는 원하는 경우 "비즈니스"사례)를 작성하십시오. 이들은 종종 여러 클래스 / 메소드에 의존하기 때문에 변경 / 중단 될 가능성이 큽니다. 그리고 자주 끊어지기 때문에 잊을 가능성이 줄어 듭니다. 개인적인 경험을 통해 좋은 시험을 작성하는 데 도움이되는 유일한 접근법 / 방법론은 테스트 주도 개발 입니다. 특히 테스트 케이스를 작성하는 사람이 코드 케이스를 작성하는 사람과 동일하지 않은 경우. TDD를 사용하여 좋은 테스트 사례를 작성하는 데에도 시간이 걸리지 만 적어도 나에게는 결과가 매우 만족 스러웠습니다.
  • 버그가 나올 때마다 수정 사항과 함께 제공되는 테스트 케이스를 작성하십시오. 테스트 사례는이 특정 버그만 포함해야합니다. 버그를 담당하는 코드를 완전히 다루었으므로 다시 나오지 않아야합니다.

나는 테스트를 작성하는 사람이 코드를 작성하는 사람과 다르다는 것을 제외하고는 모두 동의합니다. 이론적으로는 좋은 것처럼 들리며 비효율적이지 않으면 좋을 것입니다. 코드베이스가 아무리 훌륭하더라도 크기에 관계없이 일부 코드의 작동 방식에 익숙해지기까지 몇 시간이 걸립니다. 따라서 기본적으로 테스트 작성자는 이미 cdoe에 익숙하고 어떻게 작동하는지 다른 사람이 들어 와서 들어오고 나가는 것을 배우고 테스트를 작성해야합니다. 코드 품질이 최고가 아니라면 포괄적 인 테스트를 작성하는 데 며칠이 걸릴 수 있습니다.
Earlz

@Earlz 두 사람이 같은 프로젝트에서 일하지 않으면 동의합니다. 두 개발자가 동일한 프레임 워크, 라이브러리 및 개발 방법론을 일관된 방식으로 일관되게 사용하는 동일한 프로젝트에서 작업하는 경우 복잡한 비즈니스 요구 사항을 제외하고는 아무런 문제가 없습니다.
Jalayn

내 경우에는 @Jalayn, 제품은 매우 복잡합니다. 코드 품질은 최고는 아니지만 최악은 아닙니다 (정기 리팩토링). 우리는 별도의 테스터를 요구하지만 단위 테스트를 위해 작업을 완료 한 사람이 수행합니다. 우리의 제품은 복잡한 주제, 난독 화를 다루는 수백 가지 클래스로 구성됩니다.
Earlz

@Jalayn이 도구를 언급 해 주셔서 감사합니다. 그러나 적용 범위 도구와 마찬가지로 항상 실행할 수는 없습니다. 그렇다면 어느 시점에서 그러한 도구를 실행해야합니까? 소스 코드를 여러 번 변경 한 후? 아니면 몇 가지 테스트 업데이트 후? 이에 대한 일반적인 지침이 있습니까?
Ida

1
지속적인 빌드 서버가있는 경우 저장소에 무언가가 커밋 될 때마다 애플리케이션이 빌드되고 테스트 될 수 있습니다 (직장에서 수행함). 구성 가능하며 예를 들어 15 분마다 빌드 할 수도 있습니다. 코드 적용 범위는 테스트 사례 동안 활성화되며 많은 오버 헤드를 추가하지 않습니다. 그러나 Sonar와 같이 전체 코드 품질 검사를 사용하는 빌드는 일반적으로 시간이 오래 걸리며 예를 들어 야간에 실행됩니다. 이상적으로는 이러한 도구를 수동으로 실행할 필요가 없습니다.
Jalayn

9

요구 사항을 이해하고 코드를 이해하며 동의하는지 확인하는 경우를 제외하고는 테스트 케이스를 올바르게 작성하는 것 외에는 테스트 케이스가 올바른지 확인할 수 있는 방법이 없습니다 . 테스트 스위트를 사용하는 요점은이 작업을 한 번만 수행하면된다는 것입니다. 그때부터 테스트를 다시 실행하고 테스트를 통과했는지 확인할 수 있습니다. 반면 테스트 스위트가 없으면 항상 열심히 집중해야합니다. 즉, 코드베이스에 무언가를 할 때마다. 그러나 당신이 처음부터 옳은 일을하도록해야한다는 근본적인 문제는 여전히 남아 있습니다. 컴퓨터는 단순히 그 일을 우리에게 덜 해줄만큼 지능적이지 않습니다.

따라서 (1) 테스트 스위트가 불완전한 경우이를 확인할 수있는 간단한 방법은 없습니다. 코드 적용 범위 분석은 일부 코드 줄이 실행되지 않았 음을 증명할 수 있습니다. 즉, 제품군에 어떤 방식으로 결함이 있지만 결함이 얼마나 심각하지 않은지, 그리고 그것이 충분하다는 것을 결코 증명할 수는 없습니다. 100 % 코드 적용 범위에서도 모든 관련 상태를 보장 할 수는 없습니다시스템의 운동이 수행 될 수 있고, 존재할 수있는 조합 상태의 수 때문에 임의의 현실적인 시스템에 대해 완전한 상태 커버리지를 달성 할 수 없다. 테스트 케이스를 점검하여 검사하려는 항목을 확인하는 것이 올바른지 확인하는 좋은 방법 중 하나는 테스트를 작성하고 실제로 실패했는지 확인하고 코드를 작성 / 변경 한 다음 테스트가 통과하는지 확인하는 것입니다. 따라서 테스트 중심 개발에 대한 열의는 개별 테스트가 올바른 일을 수행 할 수 있다는 것을 확신 할 수있게하며, 그런 식으로 전체 코드베이스를 작성하면 대규모 시스템에서도 비슷한 수준의 신뢰를 얻을 수 있습니다.

(2) 테스트 스위트는 일반적으로 요구 사항이 변경 될 때마다 불충분하게됩니다 . 추측 할 필요는 없습니다. 고객이 특정 동작 변경을 원하고 변경 전후에 테스트가 성공하면 특정 입력 / 출력 관계를 실행하지 않은 것이 분명합니다.

테스트 범위가 없거나 범위가 무엇인지 모르는 레거시 시스템의 경우 공식적인 증거는 없지만 경험에서 말하면 (부모의 조언 : 개인적인 의견이 따릅니다!) 테스트에서 압도적으로 가능성이 높습니다. 입니다 하지 충분한. 테스트가 사실적이며 선택적인 품질 향상이지만 실제로는 필요하지 않은 활동으로 간주 될 때 테스트가 코드 기반을 유지하도록하는 인센티브가 불완전하고 체계적이지 않은 경향이 있습니다. 없어요

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.