문제

CPPTEST_7.2.11.35_WIN32_VS2005_PLUGIN.EXE로서 UnitTest 라이센스 (단위 테스트 라이센스 만)로 만 컴퓨터 C ++ 테스트에만 설치했습니다.

다음과 비슷한 샘플이 있습니다.

bool MyFunction(... parameters... )
{
    bool bRet = true;

        // do something
    if( some_condition )
    {
        // do something
        bRet = CallToAFunctionThatCanReturnBothTrueAndFalse....
    }
    else
    {
        bRet = false;
        // do something
    }

    if(bRet == false)
    {
        // do something
    }

    return bRet;
}

제 경우에는 적용 범위 도구를 실행 한 후 다음 결과가 있습니다 (앞서 언급 한 것과 유사한 함수의 경우).

[LC=100 BC=100 PC=75 DC=100 SCC=100 MCDC=50 (%)]

PC)과 관련하여 왜 100% 적용 범위가 없는지 이해하지 못합니다. 또한 C ++ 테스트에 대한 경험이있는 사람이 Parasoft가 저에게 낮은 MCDC 적용 범위를 설명 할 수 있다면 좋을 것입니다.

적용 범위를 늘리려면 어떻게해야합니까? 이 경우 아이디어가 없어서. 문서의 일부 (일부)에 대한 지침을 환영합니다.

고맙습니다,

iulian

도움이 되었습니까?

해결책

이것은 다양한 유형의 코드 커버리지에 대한 좋은 참조입니다. http://www.bullseye.com/coverage.html.

MCDC: MCDC 적용 범위를 개선하려면 살펴 봐야합니다. some_condition. 복잡한 부울 표현이라고 가정하면 필요한 값 조합을 운동하는지 여부를 살펴 봐야합니다. 구체적으로, 각 부울 하위 표현은 참과 거짓으로 행사해야합니다.

: 위의 링크에서 언급 된 것 중 하나는 경로 범위의 단점으로 많은 경로가 운동하기가 불가능하다는 것입니다. 그것은 당신의 예제의 경우 일 수 있습니다.

다른 팁

사용중인 특정 도구를 도울 수는 없지만 경로 커버리지의 일반적인 아이디어는 코드를 통한 가능한 각 경로를 실행해야한다는 것입니다.

프로그램을 통해 유량 차트를 그리면 각 IF/BREAK/계속 등을 분기합니다. 테스트가 프로그램을 통해 어떤 경로를 섭취하는지 확인해야합니다. 100%를 얻으려면 (완전히 필요하지도 않고 완벽한 테스트를 보장하지도 않음) 테스트는 코드의 모든 지점을 내려야 모든 라인을 실행해야합니다.

도움이되기를 바랍니다.

100% 적용 범위를 얻으려면 최소 2 개의 테스트 케이스가 필요합니다. 일부는 일부 _condition이 사실이고 그렇지 않은 곳은 하나입니다. 당신이 있다면, 당신은 100% 적용 범위를 얻어야합니다.

100% 적용 범위를 완벽하게 볼 수 있습니다. 이 경우이를 위해 3 개의 테스트가 필요하므로 모든 조합을 테스트 할 수 있습니다. 그것에 대해 더 많이 배우려면 순환 복잡성을 찾으십시오.

그 기능을 통해 네 가지 가설 경로가 있습니다. 각 if-clause는 경로 수를 두 배로 늘립니다. 각 IF 진술은 두 가지 다른 방법으로 갈 수있는 지점입니다. 따라서 도구가 "if"에 직면 할 때마다 코드가 "True"브랜치 또는 "False"브랜치를 취할 수 있다고 가정합니다. 그러나 이것이 항상 가능하지는 않습니다. 고려하다:

bool x = true;
if (x) {
    do_something();
} 

if 진술의 "거짓"지점은 도달 할 수 없습니다. 이것은 명백한 예이지만 몇 가지 if 진술을 고려할 때 경로가 가능한지 여부를 확인하기가 점점 어려워집니다.

코드에는 세 가지 가능한 경로 만 있습니다. 첫 번째 IF 문에서 "거짓"브랜치를 취하는 경로와 두 번째 IF 문의 "진정한"브랜치는 도달 할 수 없습니다.

당신의 도구는 그것을 깨닫기에 충분히 똑똑하지 않습니다.

즉, 도구가 완벽하더라도 100 % 경로 범위를 얻는 것은 실제 응용 프로그램에서는 거의 없을 것입니다. 그러나 경로 커버리지가 매우 낮은 경로는 메소드가 너무 높은 순환 복잡성을 가지고 있다는 확실한 신호입니다.

개인적으로, 나는 어떤 기능을 시작하는 것이 나쁜 형태라고 생각합니다.

bool retcode = true;

기본적으로 성공할 것이라는 명시적인 가정을하고 특정 조건에서 실패합니다.

당신이 이후에 오는 프로그래머들은이 같은 가정을하지 않을 것입니다.

빠르게 실패하고 일찍 실패합니다.

다른 사람들이 말했듯이, 실패 사례를 테스트하려면 실패한 테스트를 코드해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top