2011-04-29 4 views
5

단위 테스트를위한 코드 적용 범위를 캡처하는 TeamCity 빌드가 있습니다. 또한 빌드 성공을위한 최소 코드 적용 범위에 대한 환경 변수를 정의했습니다. 이는 잘 작동하지만이 임계 값을 수동으로 유지하는 것을 원하지 않습니다. 내가 가지고있는 질문은 코드 커버리지가 향상되어 임계 값을 자동으로 조정하는 방법 (TeamCity 외부의 코드 적용 통계를 게시하고 마지막 성공 빌드의 결과를 읽는 것 이외의 방법)이 있는지 여부입니다. backsliding :)?TeamCity에서 코드 커버리지 임계 값을 최고 수위로 설정하려면 어떻게해야합니까?

예를 들어, 현재 코드 적용 범위가 20 % (기존 응용 프로그램)이고 새로운 단위 테스트가 작성되면 코드 적용 범위가 25 %로 향상된다고 가정하십시오. 그런 다음 누군가가 단위 테스트없이 새 코드를 체크인하고 코드 적용 범위가 24 %로 떨어집니다. 코드 커버리지가 25 %에서 24 %로 떨어지기 때문에 TeamCity가 빌드를 실패하게하고 싶습니다.

답변

1

이전 질문이지만 "실패 조건"기능을 통해 최신 버전의 TeamCity에서 가능하다는 점을 말씀 드리고 싶습니다. 실패 조건은 이전에 생성 된 메트릭과 비교할뿐만 아니라 상수를 사용할 수 있습니다. 이 경우 실패 조건은 다음과 같습니다.

enter image description here

9

나는 질문에 응답하기 전에 내가 먼저 설명하고 싶은 코드 커버리지에 대한 몇 가지 애완 동물 이론을 가지고있다.

우선 몇 가지 상황 :

  • Code coverage의 많은 종류가 있습니다,하지만 난 단지 라인 범위에 대해 이야기하는거야,하지만 당신은 다른 종류를 대체 할 수 있어야한다.
  • 질문 : "... 누군가가 단위 테스트 및 코드 적용 범위 하락없이 새 코드를 확인합니다 ..."비슷한 내용 : "일부 사람 (리팩터링/중복 제거/알고리즘 대체)으로 테스트를 제거합니다. 코드 및 적용 범위가 감소합니다. "
  • 범위는 단일 테스트를 실행 한 결과로 측정해야합니다. 즉, 응용 프로그램을 실행하고 외부에서 자극함으로써가 아닙니다.
  • 범위의 백분율은 오도 된 것입니다.
    나는 이것에 대해 생각해 보았고 실제로 얼마나 많은 코드 행이 다루어지지 않는지 알고 싶다.
    이 답변에 대한 내 코멘트보기 : Ensure minimal coverage on new Subversion commits
  • 범위는 가능한 한 높아야합니다. "... 타기를 허용하지 않고 개선 ..."
  • 100% coverage is possible.
    도서관에도 불구하고 해봤습니다.

난 당신이 지금까지 코드 커버리지에 관한 한 두 부문에 코드를 분할해야 theory 있습니다

  1. 모든 코드가 100 % 적용되는 부문.
  2. 코드가 적용되지 않는 부분.

어느 부서가 여러 프로젝트로 구성 될 수 있지만 부서의 구성원은 파일이어야합니다 (Java와 C# 모두 소스 파일을 가짐). 전체 파일 폴더가 바람직합니다. 첫 번째 부문에는 한 세트의 프로젝트를, 두 번째 부문에는 한 세트의 프로젝트를 가질 수 있습니다.

이제는 범위 부족 보고서가 두 번째 부문의 줄 수에 불과합니다.

작동 모드는 코드를 테스트하면서 코드가 100 % 적용 범위에 속하는 경우에만 사용해야합니다.그러나 두뇌가 테스트 할 수있는 방법을 찾지 못하는 까다로운 코드 조각을 발견하면 테스트되지 않은 비트가 두 번째 부분으로 이동하도록 리팩터링해야합니다. 또는 브레인 웨이브를 얻을 수 있으며 0 % 이상으로 두 번째 부분을 올리는 테스트를 찾을 수 있습니다. 이때 첫 번째 부분으로 코드를 리팩토링합니다. 이것은 모든 체크인이 나의 이론적 인 불변성을 유지한다는 것을 의미합니다. 이제

, 다시 질문 :
이 아니, 나는 JetBrains 웹 사이트에서 간단히 살펴에서 모두 떨어져 인 TeamCity를 모르는, 그래서 범위를 업데이트하는 방법을 모르겠지만, 내 이론에 따르면 100 % 또는 아무것도 없어야하므로 프로젝트 당 제한을 설정할 수 있습니까? 가능한 경우 100 % 고정 한도가 첫 번째 부서에서 작동합니다.
두 개의 부서를 가질 수있는 경우 두 번째 부서의 코드 메트릭 라인을 사용하여 자동 업데이트를 수행하려는 경우 점차적으로 낮아집니다.

+0

+1 정말 환상적인 답변입니다! – bragboy

+1

+1 좋은 답변 - 필자는 비슷한 이론을 가지고 있으며 많은 코드 라이브러리에서 100 % 적용 범위를 달성했습니다. –

0

테스트를 실행 한 후 적용 범위를 확인하고 환경 변수를 가장 가까운 5 이하로 업데이트하십시오.

임계 값이 처음 25이고 도달 범위가 31로 점프하면 30으로 업데이트하고 임계 값이 30 미만으로 떨어지면 중단됩니다. 물론 점프가 발생할 때 31로 만들 수 있습니다.

모든 테스트가 끝난 후 현재 커버리지가 현재 임계 값보다 큰지 확인하고 임계 값을 새 값으로 설정했는지 확인합니다.

+0

고마워요. 정확히 제가 현재하고있는 일이지만 수동 프로세스이기 때문에 자동화하고 싶습니다. –

+0

나는 자동화 된 방법으로 그렇게했다고 생각했습니다! 팀 시티에서는 빌드 스크립트가 무엇이든, 테스트를 실행 한 후 적용 범위 값에 따라 업데이트됩니다. 빌드 스크립트에 대한 자세한 내용을 제공 할 수있는 경우 ncover 등을 호출하는 방법에 대해 자세히 알려 드리겠습니다. – manojlds

+0

죄송합니다 - 나는 "자동화 된"의미를 보지 못했습니다. :) 빌드 러너는 MSBuild이며 코드 커버리지 통계를 내보내는 데 문제가 없습니다. 임계 값은 현재 TeamCity에서 환경 변수로 설정됩니다. 당신의 도움을 주셔서 감사합니다! –