코드 커버리지 분석을위한 코드를 제외해야합니까? 코드 적용 측면에서 이점은 큰 응용

주로 레거시 응용 프로그램과 같은 여러 응용 프로그램에서 작업하고 있습니다. 현재 코드 범위는 매우 낮습니다 (일반적으로 10 ~ 50 %).

몇 주 후, Cobertura (현재 JaCoCo로 마이그레이션하는 경우에도 코드 커버리지 도구)의 패키지 또는 클래스 제외에 대해 방갈로르 팀 (인도에서 개발의 주요 부분이 이루어짐)과 반복적으로 논의하고 있습니다.

이들의 관점은 다음과 같습니다. 애플리케이션의 일부 계층에 대한 단위 테스트를 작성하지 않기 때문에 (1) 이 코드는 코드 적용 범위 측정에서 제외해야합니다. 다시 말해, 코드 범위 측정을 테스트 되거나 테스트 되어야 하는 코드로 제한하려고합니다 .

또한 복잡한 클래스에 대한 단위 테스트를 수행 할 때 순수한 코드 적용 측면에서 이점은 큰 응용 프로그램으로 인해 눈에 띄지 않습니다. 코드 범위의 범위를 줄이면 이러한 노력이 더 눈에 띄게됩니다 …

이 방법의 관심은 테스트 가능한 것으로 간주되는 응용 프로그램 부분의 현재 상태를 나타내는 코드 적용 범위 측정법이 있다는 것입니다 .

그러나 내 견해는 우리가 어떻게 든 인물을 위조하고 있다는 것입니다. 이 솔루션은 노력없이 더 높은 수준의 코드 적용 범위에 도달하는 쉬운 방법입니다. 저를 괴롭히는 또 다른 요점은 다음과 같습니다. 만약 우리가 일주일에서 다른 주로 커버리지 증가를 보이면,이 좋은 소식이 개발자들의 훌륭한 작업 때문인지 아니면 새로운 배제 때문인지 어떻게 알 수 있습니까?

또한 코드 적용 범위 측정에서 무엇이 고려되는지 정확히 알 수 없습니다. 예를 들어, 코드 적용 범위가 40 % 인 10,000 줄의 코드 응용 프로그램이있는 경우 코드 기반의 40 %가 테스트되었음을 ​​공제 할 수 있습니다 (2) . 그러나 제외를 설정하면 어떻게됩니까? 코드 적용 범위가 이제 60 % 인 경우 정확히 무엇을 공제 할 수 있습니까? “중요한”코드베이스의 60 %가 테스트 되었습니까? 내가 어떻게 할 수있는

내가 걱정하는 한, 나는 우리가 그것에 대해 기쁘지 않더라도 “실제”코드 적용 범위 값을 유지하는 것을 선호합니다. 또한 Sonar 덕분에 코드 기반을 쉽게 탐색하고 모든 모듈 / 패키지 / 클래스에 대해 자체 코드 적용 범위를 알 수 있습니다. 물론 글로벌 코드 범위는 여전히 낮습니다.

그 주제에 대한 당신의 의견은 무엇입니까? 프로젝트는 어떻게합니까?

감사.

(1) 이 계층은 일반적으로 UI / Java Bean 등과 관련이 있습니다.

(2) 사실이 아니라는 것을 알고 있습니다. 사실, 그것은 내 코드베이스의 40 % 만 의미합니다.



답변

일반적으로 Visual Studio에서 생성하는 WCF 클라이언트와 같은 자동 생성 코드는 제외합니다. 일반적으로 많은 코드 줄이 있으며 테스트하지는 않습니다. 이로 인해 다른 코드 덩어리에 대한 테스트를 늘리고 코드 적용 범위를 0.1 % 만 늘리는 것이 매우 어려워졌습니다.

또한 팀이이 레이어가 가능한 한 얇다 고 확신 할 수있는 한 데이터 레이어 상호 작용을 배제 할 것입니다. 레이어가 얇 으면 큰 효과는 없지만 적용 범위 보고서에 많은 구성 요소가 0 %로 남아 있다고 주장 할 수 있으므로 필요한 구성 요소를 반드시 눈치 채지 않아도됩니다 정말 걱정합니다. UI 계층은 사용되는 프레임 워크에 따라 비슷한 방식으로 논쟁 할 수 있습니다.

그러나 반격으로 단위 테스트 자체도 제외하겠습니다. 그것들은 항상 ~ 100 %의 커버리지를 가져야하며 코드베이스의 큰 비율에 해당하며, 수치가 위를 향하게 왜곡됩니다.


답변

좋은 질문. 일반적으로 몇 가지 이유로 코드 커버리지에서 코드를 제외하는 경향이 있습니다. 예를 들면 다음과 같습니다.

  • 생성
  • 레거시 (더 이상 업데이트되지 않음)
  • 여기에 온다 : 특정 레이어, 테스트 할 의도가 없다.

왜 마지막 요점? 주의가 산만 해지는 것을 억제하면서 내가 관심있는 것에 집중하는 것이 좋습니다. UI-Layer를 테스트하지 않으려는 경우이를 고려하십시오. 소프트웨어의 중요한 부분 인 비즈니스 로직에서만주의를 끌 수 있습니다.

그러나:

  1. 단위 테스트에서 특정 레이어를 제외하는 이유는 무엇입니까?
  2. 이러한 계층을 테스트하려면 전체 팀을 표시하기 위해 이러한 계층을 통계에 포함시켜야합니다. 매일 중요하고 수행해야합니다.

마지막으로, 숫자를 너무 진지하게 고려하지 마십시오. 30 % 적용 범위는 소프트웨어의 필수 부분 인 견고한 소프트웨어를 증명할 수 있습니다.


답변

나는 당신에게 동의하는 경향이 있으며 모든 코드를 코드 커버리지 메트릭 (및 Sonar)에 포함시킵니다. 코드의 일부를 테스트 할 계획이 없더라도 (예측 가능), 메트릭에는 실제 상태가 반영되어야합니다. 이로 인해 코드베이스의 상당 부분에 대한 테스트를 작성하지 않는 강력한 이유가 있습니다. 결국 (코드의 다른 중요한 부분이 이미 다뤄지면) 문제를 제거하기 위해 다시 고려하거나 다른 방법을 선택할 수 있습니다 (예 : 문제의 코드를 리팩토링하여 테스트 가능하게하거나 모든 로직을 코드베이스의 다른 테스트 가능 부분 또는 전체 레이어를 모두 제거하기 (레이어가 테스트 할 가치가 없다면, 충분한 이유가 있습니까?)

현재 프로젝트에서는 정적 분석 경고 힙을 생성하는 생성 된 코드를 제외하고는 모든 코드를 메트릭에 포함합니다. 이 코드는 일반적으로 논리가없는 거대한 POD 클래스로 구성되므로 테스트 할 것이 없습니다.


답변

이제는 사용중인 코드 커버리지 도구에 익숙하지 않거나 Java Bean에 익숙하지 않지만 UI와 관련이 있다고 말한 것입니다.

나의 제한된 지식으로 나는 이것을 말할 것이다.

  1. 어떤 종류의 테스트 도구로도 숫자가 테스트를 방해하지 않도록하십시오.
  2. 클래스가 복잡하고 단위 테스트가 불가능한 경우 클래스를 더 간결하고 테스트 가능한 클래스로 리팩터링하는 것이 좋습니다. 많은 노력과 헌신이 필요하지만 장기적으로 지불해야합니다.
  3. UI 구성 요소 테스트는 어려울 수 있지만 해당 구성 요소에서 수행중인 기능을 계속 테스트 할 수 있습니다.
  4. 웹 기반 프로젝트를 수행하는 경우 QUnit을 사용하여 모든 클라이언트 측 코드를 단위 테스트 할 수 있습니다.

코드 커버리지는 숫자에 불과하며 코드 커버리지가 높을수록 좋은 테스트를 나타내지 않습니다. 더 높은 백분율을 목표로하는 것이 아니라 핵심 라이브러리를보다 강력하고 테스트 가능하게 만드는 데 집중하십시오.


답변

일부 제외는 의미가 있습니다 (프로젝트에 실제로 영향을 미치거나 영향을 미치지 않는 보일러 플레이트 코드는 올바르게 작동합니다). 코드 커버리지를 메트릭으로 수집하더라도 유용한 정보를 제공하지 않기 때문에 의미가 없습니다. 100 % 코드 적용 범위는 실제 목표가 아니며 프로젝트에 따라 낮은 적용 범위 숫자도 나쁘지 않을 수 있습니다. 20-30 % 코드 적용 범위는 테스트 할 가치가있는 모든 것을 포함 할 수 있습니다. 코드 범위는 실제로 코드의 X %가 실제로 알 수없는 품질에 대한 테스트의 유형에 불과하다는 것을 알려줍니다.


답변

코드의 각 레이어에 대한 일련의 메트릭을보고하는 것이 좋습니다. 이러한 측정 항목에는 크기 정보 (예 : LoC, 라이브러리 수, 클래스 또는 메서드 수 등), 테스트 정보 (예 : 적용 범위) 및 버그 정보 (예 : 찾기 및 수정 속도)가 포함되어야합니다.

제외 된 레이어의 적용 범위는 0 %이며 테스트 한 영역의 적용 범위는 60 %입니다. 크기 정보를 통해 사람들은 테스트되지 않은 테스트 량을 이해할 수 있습니다. 버그 정보는 제외 된 레이어에 대한 테스트를 작성해야하는지 여부와 기존 테스트가 작동하는지 알려줍니다.

소프트웨어 조직이 순수성 메트릭에 너무 집중하기가 쉽습니다. 우리는 메트릭스를 만들지 않고 훌륭한 소프트웨어를 만듭니다. 고품질 소프트웨어를 적시에 제공하는 데 도움이되는 메트릭이 가장 정직하고 순수한 메트릭입니다.


답변