سؤال

ما هي تغطية الكود وكيف يمكنك قياسها؟

لقد سُئلت هذا السؤال فيما يتعلق بتغطية كود الاختبار الآلي الخاص بنا.ويبدو أنه، خارج الأدوات الآلية، يعد الأمر فنًا أكثر منه علمًا.هل هناك أي أمثلة واقعية لكيفية استخدام تغطية الكود؟

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

المحلول

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

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

ويستخدم فريقنا ماجلان - مجموعة في بيت أدوات مدونة التغطية . إذا كنت من متجر. NET أو Visual Studio ودمج أدوات لجمع مدونة التغطية. يمكنك أيضا طرح بعض الأدوات المخصصة، مثل هذه المقالة يصف.

إذا كنت متجر C ++، وإنتل لديها بعض <لأ href = "http://www.intel.com/software/products/compilers/docs/fmac/doc_files/source/extfile/optaps_for/common/optaps_pgo_covr. هتم "يختلط =" noreferrer "> ادوات التي تعمل على ويندوز ولينكس، على الرغم من أنني لم تستخدم لهم. لقد سمعت أيضا هناك أداة gcov لدول مجلس التعاون الخليجي، ولكن أنا لا أعرف شيئا عن ذلك ولا يمكن أن تعطي لك رابطا.

وأما كيف نستخدمها - كود التغطية هي واحدة من المعايير خروجنا لكل معلم. لدينا في الواقع ثلاثة كود المقاييس تغطية - تغطية من وحدة الاختبارات (من فريق التطوير)، واختبارات السيناريو (من فريق الاختبار) والتغطية المشتركة

.

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

نصائح أخرى

وتغطية كود اختبارات أساسا كيف أن الكثير من التعليمات البرمجية المشمولة الاختبارات. لذلك، إذا كان لديك 90٪ تغطية رمز من يعنيه هناك 10٪ من التعليمات البرمجية التي لا تشملها الاختبارات. وأنا أعلم أنك يمكن التفكير بأن تغطي 90٪ من رمز ولكن عليك أن تنظر من زاوية مختلفة. ما المانع للحصول على 100٪ تغطية رمز؟

وهناك مثال جيد وسوف يكون هذا:

if(customer.IsOldCustomer()) 
{
}
else 
{
}

والآن، في رمز أعلاه هناك مسارين / الفروع. إذا كنت ضرب دائما "YES" فرع فأنت لا تغطي جزء آخر، وسيظهر في نتائج التغطية القانون. هذا أمر جيد لأنه الآن أنت تعرف أن ما لم تتم تغطيتها، ويمكن أن تكتب اختبار لتغطية جزء آخر. إذا لم يكن هناك تغطية رمز فأنت مجرد الجلوس على قنبلة موقوتة لتنفجر.

NCover هو أداة جيدة لقياس مدونة التغطية.

ونتذكر فقط، بعد أن "100٪ رمز تغطية" يتم اختبار لا يعني كل شيء تماما - في حين أنه يعني كل سطر من التعليمات البرمجية يتم اختباره، وهذا لا يعني يتم اختبارها تحت كل حالة (المشترك) ..

وأود أن استخدام رمز تغطية لتسليط الضوء على أجزاء من التعليمات البرمجية التي يجب أن ربما كتابة الاختبارات ل. على سبيل المثال، إذا تبين أيا كان أداة رمز تغطية myImportantFunction () لا يتم تنفيذ أثناء تشغيل بلدي وحدة الاختبارات الحالية، فإنها ينبغي تحسين الارجح.

وأساسا، 100٪ رمز تغطية لا يعني التعليمات البرمجية الخاصة بك على ما يرام. استخدامه بمثابة دليل لكتابة اختبارات أكثر شمولا (unit-).

استكمالا لبعض النقاط للعديد من الإجابات السابقة:

تعني تغطية الكود مدى تغطية مجموعة الاختبار الخاصة بك لشفرة المصدر الخاصة بك.أي.إلى أي مدى يتم تغطية الكود المصدري بمجموعة حالات الاختبار.

كما هو مذكور في الإجابات أعلاه، هناك معايير تغطية مختلفة، مثل المسارات والشروط والوظائف والبيانات وما إلى ذلك.ولكن المعايير الإضافية التي يتعين تغطيتها هي

  1. تغطية الحالة:سيتم تقييم جميع التعبيرات المنطقية لمعرفة الصواب والخطأ.
  2. تغطية القرار:ليس فقط التعبيرات المنطقية التي سيتم تقييمها للتأكد من صحتها وخطأها مرة واحدة، ولكن لتغطية جميع نصوص if-elseif-else اللاحقة.
  3. تغطية الحلقة:يعني أنه تم تنفيذ كل حلقة محتملة مرة واحدة، وأكثر من مرة وصفر مرة.وأيضًا، إذا كان لدينا افتراض بشأن الحد الأقصى، فاختبر الحد الأقصى لأوقات الحد الأقصى، إذا كان ذلك ممكنًا، ومرة ​​واحدة أكثر من الحد الأقصى.
  4. تغطية الدخول والخروج:اختبار لجميع المكالمات الممكنة وقيمة الإرجاع الخاصة بها.
  5. تغطية قيمة المعلمة (PVC).للتحقق مما إذا تم اختبار جميع القيم الممكنة للمعلمة.على سبيل المثال، يمكن أن تكون السلسلة أيًا مما يلي بشكل شائع:أ) فارغة، ب) فارغة، ج) مسافة بيضاء (مسافة، علامات تبويب، سطر جديد)، د) سلسلة صالحة، ه) سلسلة غير صالحة، و) سلسلة أحادية البايت، ز) سلسلة مزدوجة البايت.قد يؤدي الفشل في اختبار كل قيمة معلمة محتملة إلى ترك خطأ.يمكن أن يؤدي اختبار خيار واحد فقط من هذه الخيارات إلى تغطية التعليمات البرمجية بنسبة 100% حيث يتم تغطية كل سطر، ولكن بما أنه يتم اختبار خيار واحد فقط من الخيارات السبعة، فهذا يعني تغطية 14.2% فقط من قيمة المعلمة.
  6. تغطية الميراث:في حالة المصدر الموجه للكائنات، عند إرجاع كائن مشتق مشار إليه بواسطة الفئة الأساسية، يجب اختبار التغطية التي سيتم تقييمها، إذا تم إرجاع كائن شقيق.

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

تم شرح تغطية الكود جيدًا في الإجابات السابقة.إذن، هذا أقرب إلى إجابة للجزء الثاني من السؤال.

لقد استخدمنا ثلاث أدوات لتحديد تغطية التعليمات البرمجية.

  1. JTest - أداة خاصة مبنية على JUnit.(إنه يولد اختبارات الوحدة أيضًا.)
  2. كوبرتورا - أداة تغطية تعليمات برمجية مفتوحة المصدر يمكن دمجها بسهولة مع اختبارات JUnit لإنشاء التقارير.
  3. إيما - آخر - استخدمنا هذا لغرض مختلف قليلاً عن اختبار الوحدة.وقد تم استخدامه لإنشاء تقارير التغطية عند وصول المستخدمين النهائيين إلى تطبيق الويب.هذا إلى جانب أدوات اختبار الويب (على سبيل المثال:Canoo) يمكن أن يوفر لك تقارير تغطية مفيدة جدًا تخبرك بمقدار التعليمات البرمجية التي تتم تغطيتها أثناء الاستخدام النموذجي للمستخدم النهائي.

نحن نستخدم هذه الأدوات ل

  • تأكد من أن المطورين قد كتبوا اختبارات وحدة جيدة
  • تأكد من اجتياز جميع التعليمات البرمجية أثناء اختبار الصندوق الأسود

وتغطية الرمز هو مجرد مقياس للالتعليمات البرمجية التي يتم اختبارها. وهناك مجموعة متنوعة من المعايير التغطية التي يمكن قياسها، ولكن عادة هو مختلف المسارات، والظروف، وظائف، والبيانات داخل البرنامج الذي ماكياج التغطية الإجمالية. مقياس التغطية الرمز هو مجرد نسبة من الاختبارات التي تنفذ كل هذه المعايير التغطية.

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

لبيرل هناك هو حدة جمعة :: تغطية حيث تستخدم بانتظام على بلدي الوحدات.

إذا تدار بناء وتركيب وحدة كتبها :: بناء يمكنك ببساطة تشغيل ./Build testcover للحصول على موقع HTML الجميل أن يقول لك التغطية في الباطن، خط وشرط، مع ألوان جميلة مما يجعلها سهلة لمعرفة أي مسار رمز له لم يتم تغطيتها.

في الإجابات السابقة وقد سبق بيان تغطية كود جيدا. أنا مجرد إضافة بعض المعارف المتصلة أدوات إذا كان لديك تعمل على iOS وOSX المنابر، كسكودي يوفر مرفق لاختبار ومراقبة مدونة التغطية.

والمراجع الروابط:

HTTPS: // المطور .apple.com / مكتبة / أرشيف / وثائق / DeveloperTools / المفاهيمية / testing_with_xcode / الفصول / 07-code_coverage.html

https://medium.com/zendesk-engineering/code -coverage و-كسكودي-6b2fb8756a51

وكل روابط مفيدة للتعلم واستكشاف مدونة التغطية مع كسكودي.

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