سؤال

ولقد ركبت على جهاز الكمبيوتر الخاص بي C ++ اختبار فقط مع رخصة UnitTest (فقط رخصة اختبار وحدة) بوصفها البصرية ستوديو 2005 المساعد (cpptest_7.2.11.35_win32_vs2005_plugin.exe).

ولدي عينة مشابهة لما يلي:

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 (%)]

وأنا حقا لا أفهم لماذا ليس لدي تغطية 100٪ عندما يتعلق الأمر PathCoverage (PC). أيضا إذا كان شخص لديه خبرة مع C ++ اختبار باراسوفت يمكن أن تفسر تغطية MCDC منخفضة بالنسبة لي التي من شأنها أن تكون كبيرة.

وماذا علي أن أفعل لزيادة التغطية؟ وأنا من الأفكار في هذه الحالة. الاتجاهات إلى (بعض أجزاء) وثائق هي موضع ترحيب.

وشكرا لك،

واللاعب Iulian

هل كانت مفيدة؟

المحلول

وهذا هو إشارة جيدة على أنواع مختلفة من مدونة التغطية: HTTP: //www.bullseye. كوم / coverage.html .

على MCDC : في لتحسين التغطية MCDC ستحتاج للنظر في some_condition. على افتراض انها تعبير منطقية معقدة، سوف تحتاج إلى النظر في ما إذا كنت تمارس تركيبات اللازمة من القيم. على وجه التحديد، يحتاج كل منطقية التعبير دون أن يمارس الصواب والخطأ.

<القوي> مسار : في واحدة من الأشياء المذكورة في الرابط اعلاه بأنها عيب تغطية مسار هو أن العديد من المسارات من المستحيل لممارسة الرياضة. قد يكون هذا هو الحال مع المثال الخاص بك.

نصائح أخرى

لا يسعني مع الأداة المحددة التي تستخدمها، ولكن الفكرة العامة مع تغطية مسار هو أن كل مسار ممكن خلال التعليمات البرمجية يجب أن يتم تنفيذها.

إذا رسم مخطط من خلال البرنامج، المتفرعة في كل حال / كسر / متابعة، وما إلى ذلك ينبغي أن ترى أي مسارات الاختبارات الخاصة بك يأخذون من خلال البرنامج. للحصول على 100٪ (والذي هو ليس من الضروري تماما، كما أنها لا تضمن اختبار الكمال) واختبار لديك للذهاب إلى أسفل كل فرع من فروع القانون، وتنفيذ كل سطر.

وعلى أمل أن يساعد.

وتحتاج اثنين على الأقل testcases للحصول على تغطية 100٪. واحد حيث some_condition هو حق واحد حيث أنه ليس كذلك. إذا كان لديك أنه يجب عليك الحصول على تغطية 100٪.

وعلى الرغم من أنك يجب أن نرى تغطية 100٪ من الكمال. قد تحتاج 3 اختبارات لأنه في هذه الحالة بحيث يمكن اختبار جميع المجموعات. بحث عن مقياس مكابي لمعرفة المزيد عن ذلك.

وهناك أربعة مسارات افتراضية من خلال تلك الوظيفة. كل بند، إذا يضاعف عدد من المسارات. كل-بيان إذا كان فرع حيث يمكنك الذهاب بطريقتين مختلفتين. لذلك كلما واجه أداة الخاص ب "إذا"، فإنه يفترض رمز إما أن تأخذ "الحقيقي" فرع أو فرع "كاذبة". علي أية حال هي ليست دائما "ممكنة. النظر فيما يلي:

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

وفرع "كاذبة" للبيان إذا كان يتعذر الوصول إليه. هذا هو مثال واضح، ولكن عندما كنت عاملا في عدة بيانات إذا، يصبح من الصعب على نحو متزايد لمعرفة ما إذا كان مسار ممكن أم لا.

وهناك ثلاثة فقط مسارات محتملة في التعليمات البرمجية. المسار الذي يأخذ فرع "كاذبة" في أول بيان إذا وفرع "الحقيقي" في الثانية غير قابلة للوصول.

وأداة لديك ليست ذكية بما يكفي لتحقيق ذلك.

وأن يقال، حتى لو كانت أداة مثالية، والحصول على 100٪ من التغطية مسار ربما هو المرجح في تطبيق حقيقي. ومع ذلك، والتغطية مسار منخفضة جدا هو علامة على يقين من أن طريقة لديه عالية جدا مقياس مكابي.

وشخصيا، أعتقد أنه من شكل سيء لبدء أي وظيفة مع

ومنطقي retCode = صحيح.

أنت جعل افتراض صريح أنه سوف ينجح افتراضيا، ومن ثم تفشل في ظل ظروف معينة.

وسوف المبرمجين القادمة بعد لا تجعل هذا الافتراض نفسه.

وفشل بسرعة، تفشل في وقت مبكر.

وكما قال آخرون، إذا كنت ترغب في اختبار حالات الفشل، لديك لرمز الاختبارات التي تفشل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top