تغطية الكود هي مقياس يستخدم في فحص البرمجيات ويقوم بوصف المرحلة التي وصل إليها فحص الكود المصدري للبرنامج. وهي إحدى صور الفحص التي يتم فيها فحص الكود بشكل مباشر وبذلك تكون إحدى صور فحص الصندوق الأبيض.[1] بمرور الوقت، توسع استخدام تغطية الكود ليشمل مجال الالكترونيات الرقمية، والتي تعتمد منهجية تصميمها المعاصر على لغات وصف الإلكترونيات
كانت تغطية الكود من بين أولى الطرق التي تم اختراعها من أجل الفحص المنهجي للبرمجيات. قام ميلر وماوني بنشر أول مرجع في اتصالات رابطة مكائن الحوسبة عام 1963.[2]
تغطية الكود هي إحدى الاعتبارات في شهادة أمان معدات إلكترونيات الطيران. تم توثيق المعيار الذي تم من خلاله اعتماد معدات إلكترونيات الطيران بواسطة وكالة الطيران الفدرالية في DO-178B 2[3]
يتم استخدام واحد أو أكثر من معايير التغطية لقياس مدى استخدام البرنامج بواسطة حزمة فحص
هناك العديد من معايير التغطية، المعايير الرئيسية هي:[4]
على سبيل المثال، نفترض دالة سي++ التالية:
int foo(int x, int y)
{
int z = 0;
if ((x>0) && (y>0)) {
z = x;
}
return z;
}
بافتراض أن هذه الدالة جزء من برنامج أكبر وأن هذا البرنامج يتم تشغيله بواسطة حزمة فحص ما.
في اللغات، كلغة باسكال حيث لايتم تقييم العمليات البوليانية القياسية بالقصر، ليس من الضروري أن تعني تغطية الشرط تغطية التقرير. على سبيل المثال، نفترض القطعة التالية من الكود:
if a and b then
يمكن استيفاء تغطية الشرط من خلال فحصين:
a=true
, b=false
a=false
, b=true
ومع ذلك، فإن مجموعة الفحوصات تلك لاتستوفي تغطية التقرير حيث لن يتم استيفاء شرط if في أي من الحالات
قد يكون إدخال العيوب ضروريا من أجل ضمان تغطية كافية لشروط وفروع كود إدارة الاستثناء أثناء الفحص
في تطبيقات السلامة الحرجة (على سبيل المثال. برمجيات إلكترونيات الطيران) غالبا ماتكون هناك حاجة إلى استيفاء تغطية شرط/تقرير معدلة C/DCهذه المعايير هي امتداد لمعايير شرط/تقرير مع تطلب قيام كل شرط بالتأثير على ناتج التقرير بشكل مستقل. على سبيل المثال، نفترض الكود التالي:
if (a or b) and c then
يتم استيفاء معايير شرط/تقرير من خلال مجموعة الفحوصات التالية:
ومع ذلك، لن تستوفي مجموعة الفحوصات الموجودة بالأعلى تغطية شرط/تقرير المعدّلة، حيث لن تؤثر القيمة"b" في الفحص الأول والقيمة "c" في الفحص الثاني على الناتج. وبذلك نحتاج إلى مجموعة الفحص التالية لاستيفاء MC/DC
تؤثر القيم بالخط البارز على الناتج، ينبغي أن يتواجد كل متغير كقيمة مؤثرة مرة واحدة على الأقل مع false ومرة مع true
تتطلب هذه المعايير فحص كل التركيبات الشرطية داخل كل تقرير. على سبيل المثال، تحتاج قطعة الكود من القسم السابق إلى ثمانية فحوصات:
هناك معايير تغطية أخرى تُستخدم بشكل أقل:
تحتاج تطبيقات السلامة الحرجة غالبا إلى برهنة أن الفحص يحقق 100% من بعض صور تغطية الكود.
تتصل بعض معايير التغطية بالأعلى. على سبيل المثال، تعني تغطية المسار تغطية التقرير والجملة ودخول/خروج. تعني تغطية التقرير تغطية الجملة لأن كل جملة جزء من فرع ما.
تغطية المسار الكامل، النوع المذكور بالأعلى يكون عادة غير عملي أو غير ممكن.أي وحدة تحتوي على تتابع ن تقرير داخلها يمكن أن يكون ضمنها عدد مسارات حتى 2n ؛ يمكن أن ينتج عن تركيبات الحلقات عدد لانهائي من المسارات. قد يكون العديد من المسارات أيضا غير قابل للتطبيق، والتي لايكون فيها دخل للبرنامج ضمن الفحص الذي يمكن أن يتسبب في تنفيذ هذا المسار المحدد. ومع ذلك تم برهنة إمكانية ايجاد خوارزمية غرض عام للتعرف على المسارات غير القابلة للتطبيق (يمكن استخدام مثل هذه الخوارزمية لحل مشكلة التوقف.[7] تحاول طرق تغطية المسار العملية بدلا من ذلك التعرف على درجات مسارات الكود التي تختلف فقط في عدد تنفيذات الكود لتحقيق تغطية «المسار الأساسي». ينبغي على المختبر تغطية كل درجات المسار.
يتم بناء البرمجية المستهدفة بخيارات خاصة و/أو يتم تشغيلها من خلال بيئة خاصة بحيث يتم تعيين ممارسة (تنفيذ) كل دالة على نقاط الدالة في كود المصدر. تساعد هذه العملية المطورين وموظفي ضمان الجودة على البحث عن أجزاء المنظومة التي يتم الدخول إليها نادرا أو لم يتم الدخول إليها مطلقا في الحالات العادية (معالجة الخطأ وماشابه) وتساعد على طمأنة مهندسي الفحص على أن معظم الشروط المهمة (نقاط الدالة) قد تم فحصها. يتم تحليل الخرج الناتج لمعرفة أي من أجزاء الكود لم يتم ممارسته ويتم تحديث الفحوصات بحيث تتضمن هذه الأجزاء كلما اقتضت الضرورة. وبالترافق مع باقي طرق تغطية الكود، يكون الهدف تطوير فحوصات تراجعية دقيقة لكن يمكن التحكم فيها.
عند تنفيذ سياسات تغطية الكود ضمن بيئة تطوير برمجية ما، يجب مراعاة الآتي:
يمكن لمهندسي الفحص أن يقوموا بإلقاء نظرة على نتائج فحص تغطية الكود بحيث تساعدهم على استنباط حالات الفحص والدخل أو مجموعات التكوين والتي ستقوم بزيادة تغطية الكود على الدوال الحيوية. هناك صورتان شائعتان لتغطية الكود يتم استخدامهما من قِبل المُختبرين وهما تغطية الجملة (أو الخط) وتغطية المسار (أو الحافة). تقوم تغطية الخط بالتبليغ على بصمة تنفيذ الفحص من حيث أي من خطوط الكود تم تنفيذها لاكمال الفحص.تقوم تغطية الحافة بالتبليغ عن أي من الفروع أونقاط تقرير الكود تم تنفيذها لاكمال الفحص. تقوم كلتا التغطيتين بالتبليغ عن ميزان التغطية والذي يقاس كنسبة مئوية. معني ذلك يعتمد على أي من صور تغطية الكود تم استخدامها حيث أن تغطية مسار 67% أكثر شمولا من تغطية جملة 67% وبشكل عام، تتطلب أدوات تغطية الكود ومكتباتها البرمجية تكلفة آداء و/أو ذاكرة أو موارد أخرى غير مقبولة لعمليات البرمجيات المعتادة. ولذلك، يتم استخدامها فقط في المختبر. وكما يجب أن يتوقع المرء، فإن هناك درجات من البرمجيات لا يمكن اخضاعها عمليا لفحوصات التغطية تلك، ومع ذلك يمكن الوصول إلى تقريب لتعيين درجة التغطية عبر التحليل أكثر من الفحص المباشر.
هناك أيضاً بعض العيوب التي يتم التأثير عليها من خلال تلك الأدوات. وعلى وجه الخصوص قد لاتظهر بعض حالات التعرض أو العمليات الحساسة للوقت الحقيقي المشابهة عند تشغيلها في بيئات تغطية الكود؛ وعلى العكس قد يصبح اكتشاف بعض تلك العيوب أسهل كنتيجة للأحمال الإضافية على الكود الفحصي.
{{استشهاد بكتاب}}
: الوسيط author-name-list parameters تكرر أكثر من مرة (مساعدة)
{{استشهاد بدورية محكمة}}
: الوسيط غير المعروف |شهر=
تم تجاهله يقترح استخدام |تاريخ=
(مساعدة)