코드 커버리지 품질 주장을 반박하는 방법에 대한 도구 / 제안


11

이제 사람들이이 질문을 중복하거나 여러 번 요청할 수 있다는 것을 알고 있습니다.이 경우 내 질문에 대한 답변으로 관련 질문에 대한 링크를 부탁드립니다.

최근 코드 범위에 대해 일부 사람들과 의견이 맞지 않았습니다. 100 % 적용 범위가 우수한 품질 테스트를 의미하지 않으며 따라서 양질의 코드를 의미하지 않는다는 주장에 따라 우리 팀이 코드 적용 범위를 완전히보고 싶지 않은 사람들이 있습니다.

나는 Code Coverage가 확실하게 테스트되지 않은 것을 알려주고 그 영역에 집중하도록 도와주는 주장을 팔아서 철회 할 수있었습니다.

(위의 내용은 /programming/695811/pitfalls-of-code-coverage 와 같은 다른 SO 질문에서 비슷한 방식으로 논의되었습니다 )

이 사람들의 주장은 팀은 낮은 품질의 테스트를 신속하게 생성하여 상당한 품질을 추가하지 않으면 서 시간을 낭비함으로써 대응할 수 있다는 것입니다.

나는 그들의 관점을 이해하고 있지만 더 많은 적용 범위 기준을 처리하는 더 강력한 도구 / 프레임 워크를 도입하여 코드 적용에 대한보다 강력한 사례를 만드는 방법을 찾고 있습니다(Functional, Statement,Decision, Branch, Condition, State, LCSAJ, path, jump path, entry/exit, Loop, Parameter Value etc) .

내가 찾고있는 것은 그러한 코드 적용 도구와 실습 / 프로세스의 조합에 대한 제안으로 내 제안에 대해 편안하게 느끼면서 그러한 주장에 대응할 수 있습니다.

또한 주관적이지만 코드 범위가 주관적이지만 팀이 코드 품질과 테스트 가치를 더 잘 인식 할 수 있도록 도와 주었으므로 이러한 주장에 대응하는 방법에 대한 귀하의 경험 / 지식을 바탕으로 수반되는 의견 / 제안을 환영합니다.


편집 : 일반적인 코드 범위의 약점에 대한 이해에 대한 혼란을 줄이려면 도구를 참조하지 않거나 Statement Coverage 도구가 많이 있음 을 지적하고 싶습니다 . 사실 여기에 잘못된 것에 관한 좋은 기사가 있습니다 : http://www.bullseye.com/statementCoverage.html

나는 여러 가지 적용 기준과 수준에 더 들어가기 위해 단순한 진술 또는 선 적용 범위 이상을 찾고있었습니다.

참조 : http://en.wikipedia.org/wiki/Code_coverage#Coverage_criteria

아이디어가 여러 기준에 따라 적용 범위를 알려 주면 테스트 품질에 대한 합리적인 자동화 된 평가가됩니다. 나는 절대로 라인 커버리지가 좋은 평가라고 말하려고하지 않습니다. 사실 그것은 내 질문의 전제입니다.


편집 :
좋아, 어쩌면 나는 그것을 너무 극적으로 투영했지만, 당신은 요점을 얻는다. 문제는 모든 팀에서 일반적으로 프로세스 / 정책을 균질 / 일관된 방식으로 설정하는 것입니다. 그리고 테스트 품질을 어떻게 보장하고, 시간을 측정하지 않고 보장 된 시간을 어떻게 할당 할 것인지에 대한 두려움이 일반적입니다. 따라서 적절한 프로세스와 올바른 도구를 사용하여 백업 할 때 시간이 낭비되는 프로세스에 시간이 걸리지 않음을 알고 코드 품질을 향상시킬 수있는 측정 가능한 기능을 좋아합니다.


편집 : 지금까지 내가 대답에서 얻은 것 :

  • 코드 검토는 테스트 품질을 보장하기위한 테스트를 포함해야합니다.
  • Test First 전략은 단순히 적용 범위를 늘리기 위해 작성된 후에 작성된 테스트를 피하는 데 도움이됩니다.
  • 단순한 Statement / Line 이외의 테스트 기준을 다루는 대체 도구 탐색
  • 발견 된 코드 / 버그 수를 분석하면 적용 범위의 중요성을 이해하고 더 나은 사례를 만들 수 있습니다.
  • 가장 중요한 것은 올바른 일을하고 그들의 신념을 위해 싸우기위한 팀의 의견을 신뢰하는 것입니다
  • 해당 블록 / 테스트 수-토론 가능하지만 일부 가치 보유

지금까지 멋진 답변에 감사드립니다. 정말 감사합니다. 이 실은 몇 시간 동안의 브레인 스토밍보다 강력합니다.


4
어느 곳에서도 100 % 코드 적용 범위를 충족 할 것을 제안하는 사람은 없습니다 .
Jimmy Hoffa 2016 년

1
감사. 그리고 나는 이미 알고 있습니다. 또한 사람들은 일반적으로 100 % 코드 적용 범위를 100 % Statement (또는 line) 적용 범위와 연관시키는 경향이 있습니다. 또한 저항 할 수 없었습니다-지미, 그들은 모든 곳에서 당신을 찾고있었습니다.
MickJ

3
"그런 다음 팀은 낮은 품질의 테스트를 신속하게 작성하여 상당한 품질을 추가하지 않으면 서 시간을 낭비함으로써 대응할 것입니다."– 훌륭한 팀!
Piotr Perak 2016 년

좋아, 어쩌면 나는 그것을 너무 극적으로 투영했지만, 당신은 요점을 얻는다. 문제는 모든 팀에서 일반적으로 프로세스 / 정책을 균일하고 일관된 방식으로 설정하는 것입니다. 그리고 테스트 품질을 어떻게 보장하고, 시간을 측정하지 않고 보장 된 시간을 어떻게 할당 할 것인지에 대한 두려움이 일반적입니다. 따라서 적절한 프로세스와 올바른 도구를 사용하여 백업 할 때 시간이 낭비되는 프로세스에 시간이 걸리지 않음을 알고 코드 품질을 향상시킬 수있는 측정 가능한 기능을 좋아합니다.
MickJ

1
@JimmyHoffa-공간이 중요한 소프트웨어는 일반적으로 100 % 코드 적용이 필요합니다.
mouviciel 2016 년

답변:


9

내 경험상 코드 범위는 사용자가 만드는 만큼 유용 합니다 . 모든 사례를 포괄하는 훌륭한 테스트 를 작성하면 해당 테스트를 통과하면 요구 사항을 충족 한 것입니다. 실제로 그것은 테스트 주도 개발이 사용 하는 정확한 아이디어입니다 . 구현에 대해 전혀 모른 채 코드 앞에 테스트를 작성합니다 (때로는 다른 팀이 테스트를 완전히 작성한다는 의미입니다). 이 테스트는 최종 제품이 사양에 명시된 모든 작업을 수행하는지 확인한 다음 테스트를 통과하기위한 최소 코드를 작성합니다.

여기서의 문제는 테스트가 충분히 강하지 않으면 에지 사례 또는 예기치 않은 문제를 놓치고 실제로 사양을 충족하지 않는 코드를 작성한다는 것입니다. 코드를 검증하기 위해 테스트를 사용하기로 결정했다면, 좋은 테스트를 작성하는 것이 절대적으로 필요하거나 시간을 낭비하고 있습니다.

귀하의 질문에 실제로 답변하지 않았다는 것을 깨달았을 때 여기에서 답변을 편집하고 싶었습니다. 나는 그 위키 기사 를보고 TDD의 몇 가지 언급 된 이점을 볼 것이다. 실제로 조직이 가장 잘 작동하는 방식에 따라 결정되지만 TDD는 업계에서 확실히 사용되고 있습니다.


테스트 작성이 먼저 테스트 품질을 향상 시킨다는 제안으로 +1이므로 테스트와 코드 적용의 조합이 확실히 도움이됩니다.
MickJ

예, 항상 코드를 개발 한 후에 테스트를 작성하면 코드가 통과 할 것으로 알고있는 사항 만 테스트하거나 구현을 보완하는 방식으로 테스트를 작성한다는 것을 항상 발견했습니다. 정말 아무도 도와주지 않습니다. 독립적 코드의 테스트를 작성하는 경우 코드가 무엇에 집중 해야 그것이 무엇보다는 할 않습니다 않습니다.
Ampt

감사합니다 @Ampt. TDD를 사용한 강화 프로세스 외에도 더 많은 적용 범위 기준을보다 철저한 방식으로 처리하여 최소한 어느 정도 작성된 테스트 품질을 검증하는 데 도움이되는 코드 적용 도구가 있습니까?
MickJ

나는 당신을 잘못 이해하고 있을지 모르지만, 다른 도구가 당신의 테스트에 대해 다른 범위를 알려줄 것을 제안하고 있습니까? 커버리지 도구는 테스트 실행을 관찰하고 어떤 코드 줄이 실행되는지 기록하는 것이 항상 저의 경험이었습니다. 실행 된 라인 수가 동일하게 유지되므로 스위칭 툴은 적용 범위에 영향을 미치지 않아야합니다. 동일한 테스트에 더 많은 적용 범위를 제공하는 도구에주의해야합니다. 즉, 모든 코드 줄을 치는 것이 철저한 테스트 품질에 대한 좋은 평가라고 생각하지 않습니다 . 좋은 테스트는 좋은 요구 사항에서 비롯됩니다.
Ampt

감사. 당신이 말하는 것은 Statement Coverage(또는 실행되는 코드 라인)입니다. 나는 단순한 진술이나 선을 넘어서서 더 많은 것을 찾고있었습니다 multiple coverage criteria. en.wikipedia.org/wiki/Code_coverage#Coverage_criteriaen.wikipedia.org/wiki/Linear_Code_Sequence_and_Jump를 참조하십시오 . 아이디어가 여러 기준에 따라 적용 범위를 알려 주면 테스트 품질에 대한 합리적인 자동화 된 평가가됩니다. 나는 절대로 라인 커버리지가 좋은 평가라고 말하려고하지 않습니다. 사실 그것은 내 질문의 전제입니다.
MickJ

6

우선, 사람들 100 % 적용 범위를 옹호합니다.

대부분의 개발자는 ... "100 % 명세서 범위"를 적절하다고 생각합니다. 이것은 좋은 시작이지만, 거의 충분하지 않습니다. "100 % 지점 적용 범위"를 충족하는 더 나은 적용 범위 표준 ID ...

Steve McConnell, 코드 완료 , 22 장 : 개발자 테스트.

당신과 다른 사람들이 언급했듯이, 커버리지만을위한 코드 커버리지 는별로 달성하지 못할 것입니다. 그러나 한 줄의 코드를 실행할 수 없다면 왜 작성됩니까?

자신의 프로젝트에서 데이터를 수집하고 분석하여 논쟁을 해결하는 것이 좋습니다.

데이터를 수집하기 위해 개인적으로 다음 도구를 사용합니다.

  • 코드 적용 범위를 측정하기위한 JaCoCo 및 관련 Eclipse 플러그인 EclEmma
  • 자동화 된 빌드, 테스트 및보고를위한 Ant 스크립트
  • 연속 빌드를위한 Jenkins- 소스 제어 변경시 자동 빌드 트리거
  • Jenkins 용 JaCoCo 플러그인 -각 빌드의 커버리지 메트릭을 캡처하고 트렌드를 그래프로 표시합니다. 또한 빌드 상태에 영향을주는 프로젝트 별 적용 범위 임계 값을 정의 할 수 있습니다.
  • 버그 추적을위한 Bugzilla

일단 그 (또는 비슷한 것)를 갖추면 자신의 데이터를보다 자세히 볼 수 있습니다.

  • 커버가 잘 안된 프로젝트에서 더 많은 버그가 발견됩니까?
  • 잘 다루지 않는 클래스 / 방법에서 더 많은 버그가 발견됩니까?
  • 기타

귀하의 데이터 코드 범위에 대한 귀하의 입장을 지원할 것으로 기대합니다 . 그것은 확실히 내 경험이었습니다. 그러나 그렇지 않은 경우 조직이 원하는 것보다 낮은 코드 적용 표준으로 성공할 수 있습니다. 또는 테스트가 좋지 않을 수도 있습니다. 이 작업은 코드 커버리지 불일치의 해결에 관계없이 결함이 적은 소프트웨어를 제작하는 데 집중할 것입니다.


나는이 답변을 정말로 좋아한다. 도구 제안에 감사 드리며 더 중요한 것은 코드 적용 범위를 정당화하는 데이터 기반 접근 방식이라는 아이디어가 마음에 듭니다. 나는 팀에게 그것의 가치에 대해 단어를 사용하는 경향이 있지만 어쨌든 그것을 의심하지 않을 것입니다. 그것은 지금까지 우리의 경험을 위해 더 견고한 사례를 구축하는 데 도움이 될 수 있습니다. 감사!
MickJ

4

이 사람들의 주장은- 팀은 낮은 품질의 테스트를 신속하게 생성 하여 상당한 품질을 추가하지 않으면 서 시간을 낭비 함으로써 반응 할 것 입니다.

이것은 도구가 아니라 신뢰 의 문제입니다 .

그들이 그 진술을 정말로 믿는다면, 팀이 코드를 전혀 작성하지 않을 것이라고 왜 물어보십시오.


코드의 기능이 가장 중요하다는 것을 알고 있기 때문에 테스트, 문서, 의견, 리뷰 등은 즉각적인 결과없이 희생 될 수 있습니다. 동의하지만 나쁜 징조입니다.
JeffO

좋아, 어쩌면 나는 그것을 너무 극적으로 투영했지만, 당신은 요점을 얻는다. 문제는 모든 팀에서 일반적으로 프로세스 / 정책을 균일하고 일관된 방식으로 설정하는 것입니다. 그리고 테스트 품질을 어떻게 보장하고, 시간을 측정하지 않고 보장 된 시간을 어떻게 할당 할 것인지에 대한 두려움이 일반적입니다. 따라서 적절한 프로세스와 올바른 도구를 사용하여 백업 할 때 시간이 낭비되는 프로세스에 시간이 걸리지 않음을 알고 코드 품질을 향상시킬 수있는 측정 가능한 기능을 좋아합니다.
MickJ

3

좋아, 어쩌면 나는 그것을 너무 극적으로 투영했지만, 당신은 요점을 얻는다. 문제는 모든 팀에서 일반적으로 프로세스 / 정책을 균질 / 일관된 방식으로 설정하는 것입니다.

나는 그것이 문제라고 생각합니다. 개발자는 일관된 정책이나 글로벌 정책에 관심을 갖지 않으며 (종종 훌륭한 이유 때문에) 회사 정책을 준수하기보다는 자신이 옳다고 생각하는 것을 자유롭게하기를 원합니다.

글로벌 프로세스 및 측정이 가치와 개발 속도 및 품질에 긍정적 인 영향을 미친다는 것을 입증하지 않는 한 이는 합리적입니다.

일반적인 타임 라인 :

  1. dev : 이봐 요-코드 커버리지 메트릭을 대시 보드에 추가했습니다.
  2. 관리자 : 물론, 필수 목표와 그에 대한 준수를 추가합시다
  3. dev : 신경 쓰지 말고 코드 커버리지는 어리 석고 쓸모가 없습니다.

1
+1 나는 그렇게 여러 번 동의하지 않았습니다. 대화가 이런 식으로 진행되지만 내 경우입니다. dev : 이봐 요-코드 커버리지 메트릭을 대시 보드에 추가했습니다. 관리자 : 물론, 품질 향상에 도움이된다고 생각하는 것은 훌륭합니다. 관리자 상사 : 팀 간 하나의 프로세스가 필요하다고 생각합니다. 지출 비용에서 가치를 보장 할 수 없다면 코드 적용 범위는 의미가 없다고 생각합니다.
MickJ 2016 년

2

내 경험상 코드 범위와 결합하여 메트릭스를 가치있게 만드는 몇 가지 사항이 있습니다.

코드 리뷰

나쁜 테스트를 개발자에게 다시 제공 할 수 있으면이 의미없는 적용 범위를 제공하는 나쁜 테스트의 수를 제한하는 데 도움이됩니다.

버그 추적

모듈에 많은 코드 적용 범위가 있지만 해당 영역에서 여전히 많은 버그가 발생하면 개발자가 테스트를 통해 개선해야 할 문제가 있음을 나타냅니다.

프래그머티즘

사소하지 않은 코드에 대한 좋은 테스트로 아무도 100 %에 도달하지 않습니다. 팀 리더 인 경우 코드 범위를 살펴 보지만 "N %에 도달해야합니다!"라고 말하는 대신 격차를 식별하고 사람들에게 시스템을 게임 할 기회를 제공하지 않고 목표를 달성하는 "모듈 X의 적용 범위를 개선"하도록 요청하십시오.

해당 블록 / 테스트 수

대부분의 코드 커버리지 도구는 커버 된 블록과 커버되지 않은 블록을 나열합니다. 이를 실제 테스트 수와 결합하면 나쁜 테스트 또는 결합 된 설계를 나타내는 '광범위한'테스트의 상태를 나타내는 메트릭을 얻을 수 있습니다. 이는 한 스프린트에서 다른 스프린트로의 델타로 더 유용하지만 아이디어는 동일합니다. 코드 범위를 다른 메트릭과 결합하여 더 많은 통찰력을 얻으십시오.


+1 좋은 제안, 특히 Blocks Covered / # of 테스트 및 코드 검토가 마음에 듭니다. 이미 코드 검토를 수행하고 있지만 테스트 자체를보다 면밀히 검토하는 것이 중요하다는 점을 강조하면 도움이됩니다.
MickJ

2

여기 내 2 센트가 있습니다.

소프트웨어 개발에 도움을 줄 수 있기 때문에 최근 많은 관심을 받고있는 많은 관행이 있습니다. 그러나 일부 개발자는 이러한 방법을 맹목적으로 적용합니다. 방법론을 적용하는 것은 알고리즘을 실행하는 것과 같으며 올바른 단계를 수행 한 후 원하는 결과를 얻을 수 있다고 확신합니다.

몇 가지 예 :

  • 100 % 코드 적용 범위로 단위 테스트를 작성하면 더 나은 코드 품질을 얻을 수 있습니다.
  • TDD를 체계적으로 적용하면 더 나은 디자인을 얻을 수 있습니다.
  • 페어 프로그래밍을하면 코드 품질이 향상되고 개발 시간이 단축됩니다.

위의 진술의 기본 문제는 인간이 컴퓨터가 아니며 소프트웨어를 작성하는 것이 알고리즘을 실행하는 것과 다르다는 것입니다.

따라서 위의 진술에는 약간의 진실이 포함되어 있지만 약간 단순화합니다. 예 :

  • 단위 테스트는 많은 오류를 포착하고 코드 범위는 코드의 어느 부분이 테스트되는지를 나타내지 만 사소한 테스트는 쓸모가 없습니다. 예를 들어, 버튼을 클릭하여 해당 대화 상자가 열리면 버튼 이벤트를 대화 상자를 여는 구성 요소로 보내는 전체 논리를 간단한 수동 테스트 (버튼 클릭)로 테스트 할 수 있습니다. 이 논리를 테스트?
  • TDD는 훌륭한 디자인 도구이지만 개발자가 문제 영역을 잘 이해하지 못하면 제대로 작동하지 않습니다 (예 : 이 유명한 게시물 참조 ).
  • 페어 프로그래밍은 두 개발자가 함께 작업 할 수 있으면 효과적입니다. 그렇지 않으면 재앙입니다. 또한 숙련 된 개발자는 가장 중요한 문제에 대해 간략하게 논의한 다음 별도로 코딩하는 것을 선호 할 수 있습니다. 이미 알고있는 많은 세부 사항에 대해 많은 시간을 소비하는 것은 지루하고 시간 낭비 일 수 있습니다.

코드 범위로 돌아갑니다.

나는 Code Coverage가 확실하게 테스트되지 않은 것을 알려주고 그 영역에 집중하도록 도와주는 주장을 팔아서 철회 할 수있었습니다.

특정 모듈에 대해 100 % 적용 범위가 있다면 가치를 판단해야한다고 생각합니다.

모듈이 매우 중요하고 복잡한 계산을 수행합니까? 그런 다음 모든 단일 코드 줄을 테스트하고 의미있는 단위 테스트 (해당 도메인에서 의미있는 단위 테스트)를 작성하고 싶습니다.

모듈은 버튼을 클릭 할 때 도움말 창을 여는 것과 같이 중요하지만 간단한 작업을 수행합니까? 수동 테스트가 더 효과적 일 것입니다.

이 사람들의 주장은 팀은 낮은 품질의 테스트를 신속하게 생성하여 상당한 품질을 추가하지 않으면 서 시간을 낭비함으로써 대응할 수 있다는 것입니다.

제 생각에는 맞습니다 : 100 % 코드 적용 만으로 코드 품질을 강화할 수는 없습니다 . 적용 범위를 계산하고 통계를 만들기 위해 더 많은 도구를 추가해도 도움이되지 않습니다. 오히려 코드의 어느 부분이 더 민감하고 광범위하게 테스트되어야하며 어떤 부분은 오류가 발생하기 쉬운 지 논의해야합니다 (단위 테스트를 사용하지 않고 오류를 훨씬 쉽게 발견하고 수정할 수 있다는 의미에서).

개발자에게 100 % 코드 적용 범위를 적용하면 일부는 현명한 테스트를 작성하는 대신 의무를 이행하기 위해 바보 같은 단위 테스트를 작성하기 시작합니다.

아무런 조치없이 보장 된 시간을 어떻게 할당합니까?

인간의 지능과 판단력을 측정 할 수 있다는 환상 일 수도 있습니다. 유능한 동료가 있고 자신의 판단을 신뢰하는 경우 "이 모듈에 대해 코드 적용 범위를 늘리면 거의 이점이 없습니다. 따라서 시간을 보내지 마십시오"또는 "이 모듈에 대해 가능한 한 많은 범위를 커버하기 위해서는 합리적인 단위 테스트를 구현하기 위해 1 주일이 더 필요합니다. "

따라서 (다시 말하면, 이것은 2 센트입니다) : 모든 팀, 모든 프로젝트 및 모든 모듈에 맞는 코드 범위와 같은 프로세스를 찾고 매개 변수를 설정하려고 시도하지 마십시오. 그러한 일반적인 과정을 찾는 것은 환상이며 나는 당신이 하나를 발견하면 그것이 차선책이라고 생각합니다.


모두 사실이며 나는 이미 동의합니다. 100 % 코드 적용 범위를 지원하지 않는 것을 알 수 있습니다. 그것은 베팅 기술, 도구 및 프로세스를 사용하여 가치를 향상시키는 것에 관한 것입니다. 또한 코드 적용 범위 기준을 완전히 이해하는 데 도움이됩니다 (대부분이 줄 / 문이라고 가정). 우수 게시물에 +1
MickJ 2016 년

2

"품질이 낮은 테스트를 신속하게 작성하여 시간을 낭비하면서 상당한 품질을 추가하지 않으면 팀이 반응 할 것입니다."

이것은 이론적 인 것이 아니라 실제 위험입니다.

코드 초과만으로는 기능 장애 메트릭입니다. 나는 그 교훈을 어렵게 배웠습니다. 한 번, 나는 메트릭이나 관행의 균형을 유지하지 않고 그것을 강조했다. 예외를 포착하고 숨기고 어설 션이없는 수백 가지 테스트는 추악한 일입니다.

"이러한 코드 커버리지 툴과 그에 따른 관행 / 프로세스의 조합에 대한 제안"

다른 모든 제안 외에도 테스트 품질을 평가할 수있는 자동화 기술에는 돌연변이 테스트 ( http://en.wikipedia.org/wiki/Mutation_testing )가 있습니다. Java 코드의 경우 PIT ( http://pitest.org/ )가 작동하며 이것이 내가 본 최초의 돌연변이 테스트 도구입니다.

아시다시피, 코드 범위 부족은 소프트웨어 품질 위험으로 쉽게 식별 할 수 있습니다. 코드 적용 범위는 소프트웨어 품질에 필요하지만 불충분 한 조건이라고 가르칩니다. 소프트웨어 품질 관리를 위해 균형 잡힌 스코어 카드 접근 방식을 취해야합니다.


1

코드 적용 범위는 정확한 단위 테스트라는 증거가 아닙니다.

그러나 그들이 모든 단위 테스트가 훌륭하다는 것을 증명할 수있는 방법을 제공 할 수 없다면 (이것이 선의의 정의가 나올 때마다) 이것은 실제로 뮤트 포인트입니다.


2
말을하지 않는 포인트는 무례 합니다. (나는 단지 단어 놀이를 좋아한다-나의 철자는 수정되지 않았다).

1

나는 코드 커버리지가 호손 효과에 쉽게 영향을 받는다는 것을 항상 발견했다 . 이로 인해 "소프트웨어 측정 항목이없는 이유는 무엇입니까?" 대답은 일반적으로 프로젝트의 현재 상태에 대한 높은 수준의 이해를 제공하는 것입니다.

"우리는 얼마나 가깝습니까?"

"이 시스템의 품질은 어떻습니까?"

"이 모듈은 얼마나 복잡합니까?"

아아, 프로젝트가 얼마나 좋은지 나쁜지를 알 수있는 단일 메트릭이 없으며 단일 숫자에서 그 의미를 도출하려는 시도는 반드시 지나치게 단순화 될 것입니다. 측정 항목은 모두 데이터에 관한 것이지만, 그 의미를 해석하는 것은 훨씬 정서적 / 심리적 과제이므로 다른 구성의 팀이나 다른 도메인의 문제에 일반적으로 적용 할 수 없습니다.

적용 범위의 경우 코드 품질의 프록시로 자주 사용되는 것으로 생각됩니다. 그리고 실제 문제는 끔찍하게 복잡한 주제를 0에서 100 사이의 단일 정수로 요약하여 100 % 적용 범위를 달성하기 위해 끝없는 탐구에서 잠재적으로 도움이되지 않는 작업을 추진하는 데 사용될 것입니다. Bob Martin과 같은 사람들은 100 % 적용 범위가 유일한 진지한 목표라고 말하며 그 이유는 무엇이든 알 수 있습니다.

물론 코드베이스를 이해하는 데 도움이되지 않는 적용 범위를 얻는 방법은 많이 있습니다. 예를 들어 toString ()을 테스트하는 것이 가치가 있습니까? 불변 객체에 대한 게터와 세터는 어떻습니까? 팀은 정해진 시간에 지원하기 위해 많은 노력을 기울이고 있으며 그 시간은 항상 완벽한 업무를 수행하는 데 필요한 시간보다 짧은 것 같습니다. 따라서 완벽한 일정이 없으면 근사치로해야합니다.

좋은 근사치를 만드는 데 유용한 메트릭은 Crap4J 입니다. 이제는 소멸되었지만 쉽게 직접 포트 / 구현할 수 있습니다. Crap4J 는 더 복잡한 코드 (if, while, for 등)가 더 높은 테스트 범위를 가져야 함을 암시 하여 코드 범위를 순환 복잡성 에 관련 시키려고합니다 . 나에게이 간단한 아이디어는 사실이었다. 내 코드베이스에 위험이 어디에 있는지 이해하고 싶고 정말로 중요한 위험 중 하나는 복잡성입니다. 따라서이 도구를 사용하면 코드 기반이 얼마나 위험한지 빠르게 평가할 수 있습니다. 복잡한 경우 적용 범위가 향상되었습니다. 그렇지 않다면 모든 코드 줄을 다루는 데 시간을 낭비 할 필요가 없습니다.

물론 이것은 하나의 메트릭과 YMMV입니다. 그것이 당신에게 의미가 있는지 그리고 그것이 팀이 프로젝트가 어디에 있는지에 대해 합리적으로 우울한 느낌을 줄 수 있는지 이해하기 위해 시간을 보내야합니다.


커버리지를 적용 할 수있는 코드 및 Crap4J 링크를 선택하기 위해 순환 복잡성을 사용하는 것에 대한 큰 제안에 감사드립니다. 나는 또한 crap4j의 굉장함을 cobertura로 짜는 것에 대해 이야기하는 훌륭한 기사를 발견했다.- schneide.wordpress.com
2010/

0

돌아가서 기존 코드를 다루는 것이 최선의 방법이라고 말할 수는 없습니다. 새로운 코드 나 변경 한 코드에 대한 테스트를 포함하는 것이 이치에 맞습니다.

버그가 발견되면 해당 버그로 인해 실패한 테스트를 작성하고 테스트가 녹색으로 바뀌도록 버그를 수정하십시오. 테스트에 대한 의견을 작성하여 버그를 작성하십시오.

목표는 예상치 못한 부작용에 대한 염려없이 변경을 수행 할 수 있도록 테스트에 대한 충분한 신뢰를 얻는 것입니다. 테스트되지 않은 코드를 길들이는 방법에 대한 요약을 보려면 레거시 코드를 이용한 효과적인 작업을 확인하십시오.

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