답변:
우리 는 적어도 70 %를 목표로합니다 . 보다 쉽게 테스트 할 수있는 것 (예 : 기능적 데이터 구조)에서는 90 %를 목표로하며 대부분의 개인은 가능한 한 100 %에 가깝습니다. 테스트하기 매우 어려운 WPF 관련 항목 및 기타 프레임 워크에서는 적용 범위가 훨씬 낮습니다 (거의 70 %).
코드 범위만으로는 메트릭이 좋지 않다는 의견이 있습니다. 코드 를 포괄 하는 수많은 쓸모없는 테스트를 쉽게 생성 할 수 있지만, 예를 들어 출력을 적절하게 확인하지 않거나 엣지 케이스를 테스트하지는 않습니다. 코드를 다루는 것은 예외가 아니라 올바른 것이 아니라는 것을 의미합니다. 품질 테스트가 필요합니다. 수량은 그다지 중요하지 않습니다.
"충분히"는 아무 것도 위반하지 않는다는 확신을 가지고 코드를 변경할 수있는 시점입니다. 일부 프로젝트에서는 10 %, 다른 프로젝트에서는 95 % 일 수 있습니다.
거의 100 % 나되지 않습니다. 그러나 때로는 100 % 코드 적용 범위를 얻으려고 시도하는 것이 코드 기반에서 부스러기를 제거하는 좋은 방법 일 수 있습니다. 더 많은 테스트를 작성하거나 코드를 작성하는 두 가지 방법으로 코드 적용 범위를 늘릴 수 있습니다. 테스트하기 어렵 기 때문에 코드를 다루지 않으면 쉽게 테스트 할 수 있도록 단순화하거나 리팩토링 할 수 있습니다. 테스트를 귀찮게하는 것이 너무 모호한 경우 일반적으로 코드에서 다른 코드를 사용하지 않을 가능성이 높습니다.
대부분의 코드 중 20 % 만 시간의 80 %를 실행합니다 . 코드 커버리지 분석은 콜 그래프 와 쌍을 이루어 가장 테스트해야 할 사항을 결정 하지 않는 한 유용하지 않습니다 . 그것은 당신의 엣지 케이스가 어디에 있는지를 알려줍니다. 실제 코드의 5 % 미만을 구성하는 엣지 케이스에 대해서만 100 개의 테스트가 제공 될 수 있습니다.
따라서 중요한 경로를 정의하는 20 %의 100 %, 나머지 그래프의 50 % 이상을 호출 그래프에 따라 포함해야합니다. 총 보장 범위는 대략 70 %-75 %입니다.
점검없이 중요한 엣지 케이스를 남기면서 전체 적용 범위를 70 % 이상 달성하는 데 시간을 소모하지 마십시오.
테스트되지 않은 영역을 나타내는 가이드로 적용 범위를 사용하십시오. 적용 범위에 대한 의무를 갖지 않고 코드가 포함되지 않은 이유를 이해하는 것이 현명합니다. 부족한 이유를 기록하는 것은 위험의 균형을 잡을 수있는 좋은 훈련입니다.
때때로 그 이유는 바람직한 '시간 부족'보다 적지 만 초기 릴리스에서는 괜찮을 수도 있습니다. 커버리지를 향상시키기 위해 다시 영역을 표시하는 것이 좋습니다.
100 % 명세서 적용 범위가 중요하지 않은 시스템에 적합한 것으로 간주되는 중요 비행 소프트웨어를 작업하고 있습니다. 보다 중요한 시스템의 경우 분기 / 의사 범위를 확인하고 때로는 엄격하지 않은 기술 호출 MC / DC를 사용합니다.
또한 객체 코드도 다루 었는지 확인해야합니다.
그것은 우리의 경우 가치 / 비용에 대한 위험 사이의 균형입니다. 버그가 빠질 위험에 따라 정보에 입각 한 선택이 필요합니다.
@RevBingo의 대답은 100 %에 대한 투쟁으로 인해 사용하지 않는 코드를 정리하거나 삭제할 수 있다고 제안하기 때문에 정말 좋아합니다. 다른 답변에서 보지 못한 것은 높은 커버리지가 필요한 시점과 그렇지 않은 시점에 대한 감각입니다. 나는 이것을 시작할 때 찔렀다. 이와 같은 차트에 세부 정보를 추가하는 것이 모든 코드에 맞는 하나의 테스트 적용 범위 번호를 찾는 것보다 더 유용한 추구라고 생각합니다.
java.util Collections와 같은 공용 API의 경우 데이터베이스에 연결되지 않고 HTML을 반환하지 않습니다. 시간 또는 기타 이유로 90-95 %에 정착하더라도 100 % 적용 범위가 고귀한 시작 목표라고 생각합니다. 제약. 기능이 완성 된 후에 테스트 범위를 늘리면 다른 종류의 코드 검토보다 더 자세한 검사 수준이 적용됩니다. API가 널리 사용된다면 사람들은 예상치 못한 방식으로 API를 사용하고 서브 클래스 화하고 역 직렬화하는 등의 작업을 수행합니다. 그들의 첫 경험이 버그를 찾거나 감독하는 것을 원하지 않습니다!
데이터 구조를 가져오고 데이터 구조를 반환하는 비즈니스 인프라 코드의 경우 100 %가 여전히 좋은 시작 목표이지만이 코드가 많은 오용을 유발할 정도로 공개되지 않은 경우 85 %가 여전히 허용됩니까?
문자열을 가져오고 반환하는 코드의 경우 단위 테스트가 훨씬 취하기 쉽지만 많은 상황에서 여전히 유용 할 수 있다고 생각합니다.
너무 취하기 때문에 HTML을 반환하는 함수에 대한 테스트를 작성하는 것이 싫습니다. 누군가가 CSS, JavaScript 또는 HTML 및 영어의 전체 블로 브를 변경하면 인간 최종 사용자에게 의미가없는 것은 무엇입니까? 많은 비즈니스 로직을 사용하여 약간의 HTML을 생성하는 기능을 찾을 수 있다면 테스트 할 가치가 있습니다. 그러나 반대 상황은 전혀 테스트 할 가치가 없습니다.
일부 코드의 경우 "정확한"의 정의는 "최종 사용자에게 의미가 있습니다." 자동화 된 문법 검사 또는 출력의 HTML 유효성 검사와 같이이 코드에 대해 비 전통적인 테스트를 수행 할 수 있습니다. 나는 시스템의 나머지 부분에서 "로그인"이라고 할 때 "로그인"이라고 말하는 것과 같이, 우리가 일반적으로 직장에서 자주 접하는 불일치에 대해 grep 문을 설정했습니다. 이 사람은 단위 테스트가 아니라 특정 결과를 기대하지 않고 문제를 잡는 데 도움이되는 방법입니다.
그러나 궁극적으로 오직 인간 만이 인간에게 합리적인 것을 판단 할 수 있습니다. 단위 테스트는 당신을 도울 수 없습니다. 때로는 여러 사람이 그것을 정확하게 판단하는 데 필요합니다.
이것은 슬픈 카테고리이며 글을 쓰는 사람이 적습니다. 그러나 충분히 큰 프로젝트에는 사업상의 이점을 제공하지 않고도 일주일의 시간을 낭비 할 수있는 토끼 구멍이 있습니다.
Hibernate 테스트를 위해 자동으로 데이터를 모의하는 방법을 보여주기 때문에 책을 구입했습니다. 그러나 Hibernate HQL 및 SQL 쿼리 만 테스트했습니다. 많은 HQL 및 SQL을 수행해야하는 경우 실제로 최대 절전 모드를 이용할 수 없습니다. Hibernate 인 메모리 데이터베이스의 형태가 있지만 테스트에서 효과적으로 사용하는 방법을 알아내는 데 시간을 투자하지 않았습니다. 실행 중이라면 Hibernate가 일부 쿼리를 실행하게하는 객체 그래프를 탐색하여 물건을 계산하는 비즈니스 로직에 대해 높은 (50 % -100 %) 테스트 범위를 원합니다. 이 코드를 테스트하는 능력은 현재 0 %에 가깝고 문제가 있습니다. 따라서 프로젝트의 다른 영역에서 테스트 범위를 향상시키고 데이터베이스에 액세스하는 기능보다 순수한 기능을 선호합니다. 주로 이러한 기능에 대한 테스트를 작성하기가 쉽기 때문입니다. 아직도,
테스트하는 응용 프로그램의 일부에 달려 있다고 생각합니다. 예를 들어 비즈니스 로직이나 복잡한 데이터 변환과 관련된 구성 요소의 경우 90 % (가능한 한 높은) 범위를 목표로합니다. 가능한 한 많은 코드를 테스트하여 작지만 위험한 버그를 발견했습니다. 테스트하는 동안 1 년 후에 고객 사이트에서 버그를 발견하는 것보다는 오히려 버그를 발견하고 싶습니다. 또한 높은 코드 적용 범위의 이점은 테스트를 적절히 조정해야하므로 사람들이 작업 코드를 너무 쉽게 변경하지 못하도록한다는 것입니다.
반면에 코드 범위가 덜 적합한 구성 요소가 있다고 생각합니다. 예를 들어, GUI를 테스트 할 때 버튼을 클릭 할 때 실행되는 모든 코드를 포함하는 테스트를 작성하려면 이벤트를 올바른 구성 요소에 전달하는 데 많은 시간이 소요됩니다. 이 경우 버튼을 클릭하고 프로그램의 동작을 관찰하는 수동 테스트를 수행하는 전통적인 방법을 사용하는 것이 훨씬 더 효과적이라고 생각합니다 (오른쪽 대화 상자 창이 열리나요?) 올바른 도구가 선택됩니까? ?).
테스트 스위트에 충분한 커버리지가 있는지 알기위한 척도로 코드 커버리지를 사용하는 것에 대한 높은 의견이 없습니다.
주된 이유는 먼저 코드를 작성한 다음 테스트를 한 다음 코드 적용 범위를 살펴보고 테스트를 놓친 부분을 발견 한 경우 개선이 필요한 프로세스이기 때문입니다. 당신이 진정한 TDD를한다면, 당신은 100 % 코드 커버리지를 가지고 있습니다 (물론, 테스트하지 않은 사소한 것이 있습니다). 그러나 테스트 대상을 찾기 위해 코드 범위를 살펴보면 잘못된 테스트를 작성할 수 있습니다.
따라서 코드 범위에서 결론을 내릴 수있는 유일한 것은 코드가 너무 낮 으면 테스트가 충분하지 않다는 것입니다. 그러나이 값이 높으면 올바른 테스트를 모두 받았다는 보장이 없습니다.