اختبار تطبيقات الحوسبة عالية الأداء
تتألف تطبيقات الحوسبة عالية الأداء ، التي تعمل على الحواسيب العملاقة المتوازية للغاية، من برامج متزامنة مصممة باستخدام نماذج متعددة الخيوط والعمليات . قد تتكون هذه التطبيقات من بنيات متنوعة ( خيوط ، عمليات محلية ، عمليات موزعة، إلخ) بدرجات متفاوتة من التوازي. على الرغم من أن البرامج المتزامنة عالية الأداء تستخدم أنماط تصميم ونماذج ومبادئ مشابهة لتلك المستخدمة في البرامج التسلسلية، إلا أنها، على عكس البرامج التسلسلية، تُظهر عادةً سلوكًا غير حتمي. يزداد احتمال حدوث الأخطاء مع ازدياد عدد التفاعلات بين البنيات المتوازية المختلفة. ومن أنواع الأخطاء الشائعة: حالات التزامن ، وتضارب البيانات، وحالات الجمود ، وفقدان الإشارات، والتعطل.
التحديات
يمكن تقسيم البرامج المتوازية إلى فئتين رئيسيتين: البرامج المتوازية صراحةً والبرامج المتوازية ضمنيًا . استخدام بنيات لغة متوازية مُعرَّفة لإنشاء العمليات والتواصل والتزامن يجعل التطبيق متوازيًا صراحةً. أما استخدام أداة أو مُترجم مُوازٍ لتحويل برنامج تسلسلي إلى برنامج متوازي، فيجعله متوازيًا ضمنيًا. كلا الفئتين عرضة للأخطاء بنفس القدر.
حشرات هايزن
ينبغي أن تعمل التطبيقات المتزامنة بشكل صحيح على جميع جداول سلاسل العمليات الممكنة في نظام التشغيل الأساسي. مع ذلك، لا تكشف أساليب الاختبار التقليدية إلا عن عدد قليل من الأخطاء، ويعود ذلك أساسًا إلى مشكلة أخطاء هايزن [ 1 ] . خطأ هايزن هو خطأ يتغير أو يختفي عند محاولة عزله وفحصه باستخدام مصحح الأخطاء ، وذلك بإضافة بعض البنى البرمجية مثل طلبات التزامن أو عبارات التأخير.
عدم التكرار
تنشأ مشكلة أخرى نتيجةً لسلوك المجدول غير المتوقع . إذ تؤثر اختلافات حمل النظام على سلوك المجدول، ولا يمكن تغيير هذا السلوك يدويًا. ولمواجهة هذا الغموض، يجب تشغيل البرنامج عدة مرات في بيئات تشغيل مختلفة. ومع ذلك، لا يُضمن إمكانية إعادة إنتاج الخطأ. في معظم الأحيان، يعمل البرنامج بشكل صحيح، ولا يظهر الخطأ إلا عند توافر شروط محددة. ونتيجةً لذلك، يُعد عدم قابلية تكرار البرامج المتزامنة عائقًا رئيسيًا أمام اكتشاف الأخطاء. على سبيل المثال، انظر إلى ما يلي.
void thread1 ( void * t ) { mutex_lock ( a ); mutex_lock ( b ); // قم ببعض العمل ... mutex_unlock ( b ); mutex_unlock ( a ) ; } | void thread2 ( void * t ) { mutex_lock ( b ); mutex_lock ( a ); // قم ببعض العمل ... mutex_unlock ( a ); mutex_unlock ( b ) ; } |
من الواضح أن هذا يسبب مشكلة التعطل. ومع ذلك، قد يتسبب في التعطل في بعض عمليات تشغيل البرنامج، بينما قد يعمل بنجاح في عمليات أخرى.
تأثير المسبار
يُلاحظ تأثير التحقق في البرامج المتوازية عند إضافة عبارات تأخير إلى برامج متوازية تواجه مشاكل في التزامن. هذا التأثير، مثل أخطاء هايزن، يُحدث تغييرات في السلوك قد تُخفي المشاكل. يُعدّ اكتشاف مصدر تأثير التحقق تحديًا كبيرًا في اختبار التطبيقات المتوازية. الفرق الرئيسي بين تأثير التحقق وأخطاء هايزن هو أن أخطاء هايزن تظهر عند إضافة عبارات تأخير إضافية و/أو طلبات تزامن إلى التطبيق المتزامن أثناء الاختبار، بينما يظهر تأثير التحقق عندما يُضيف المطور عبارات تأخير إلى تطبيقات متزامنة ذات تزامن ضعيف.
استراتيجيات الاختبار
تؤدي الاختلافات بين البرامج المتسلسلة والمتزامنة إلى اختلافات في استراتيجيات اختبارها. يمكن تعديل استراتيجيات البرامج المتسلسلة لتناسب التطبيقات المتزامنة، كما طُوّرت استراتيجيات متخصصة. يتضمن الاختبار عادةً تصميم حالات الاختبار والتحقق من أن البرنامج يُنتج النتائج المتوقعة. وبالتالي، تُكتشف الأخطاء في المواصفات والوظائف وغيرها من خلال تشغيل التطبيق وإخضاعه لأساليب اختبار مثل الاختبار الوظيفي ، واختبار الصندوق الأبيض ، واختبار الصندوق الأسود ، واختبار الصندوق الرمادي . [ 2 ] يُستخدم التحليل الثابت أيضًا لاكتشاف الأخطاء في البرامج عالية الأداء باستخدام أساليب مثل تحليل تدفق البيانات ، وتحليل تدفق التحكم ، والتعقيدات الحلقية ، وتحليل هروب الخيوط ، وتحليل التقطيع الثابت لتحديد المشكلات. يُمكن أن يوفر استخدام التحليل الثابت قبل اختبار الوظائف الوقت، إذ يُمكنه تحديد طبيعة الخطأ ومصدره. تستطيع تقنيات التحليل الثابت اكتشاف مشكلات مثل نقص التزامن ، والتزامن غير السليم، والتنبؤ بحدوث حالات الجمود ، وأخطاء ما بعد الانتظار في طلبات الالتقاء .
تفاصيل:
الجدولة الحتمية / الاختبار القابل للتكرار
إن عدم تحديد الجدول الزمني له مصدران. [ 1 ]
- 1. تقسيم الوقت
- يقوم المجدول بتبديل السياقات على فترات زمنية متساوية. وتعتمد هذه الفترة على سرعة المعالجات الفردية، وحالة التسلسل الهرمي للذاكرة وذاكرة التخزين المؤقت، وحمل النظام. حتى على نفس المعالج، وتحت نفس الحمل، تختلف الفترة قليلاً بسبب اختلافات طفيفة في تردد ساعة النظام.
- 2. أخطاء الصفحة
- يقوم المجدول بتعليق البرنامج في حال حدوث خطأ في الصفحة ، مما يسمح للخيوط الأخرى بالاستمرار بينما يقوم النظام بجلب الصفحة. وبما أن حدوث أخطاء الصفحات يعتمد على العمليات الأخرى قيد التشغيل، فإن توقيت تبديل السياق يصبح غير محدد.
لجعل البرامج المتزامنة قابلة للتكرار، يُستخدم مُجدوِل خارجي. يُجهّز البرنامج قيد الاختبار لإضافة استدعاءات إلى هذا المُجدوِل. تُجرى هذه الاستدعاءات في بداية ونهاية كل سلسلة عمليات، وكذلك قبل كل طلب تزامن. يقوم هذا المُجدوِل بحظر سلاسل التنفيذ بشكل انتقائي عن طريق الاحتفاظ بإشارة مرتبطة بكل سلسلة عمليات، بحيث تكون سلسلة عمليات واحدة فقط جاهزة للتنفيذ في أي وقت. وبالتالي، فإنه يحوّل التطبيق المتوازي غير الحتمي إلى تسلسل تنفيذ تسلسلي لتحقيق التكرار. يُعطى عدد قرارات الجدولة التي يتخذها المُجدوِل التسلسلي بالمعادلة التالية:
(N * K / P)*{(N + P)!} حيث N = عدد الخيوط، K = نقاط تبديل السياق المحتملة، P = ميزانية تبديلات السياق الاستباقيةالاختبار الموجه بالتعليقات
للحصول على نتائج أكثر دقة باستخدام الجدولة الحتمية، يمكن اختيار نهج بديل. إذ يمكن لبعض عمليات المقاطعة الموضوعة بشكل صحيح في البرنامج المتزامن اكتشاف الأخطاء المتعلقة بتضارب البيانات. [ 1 ] تُكتشف الأخطاء في مجموعات. وجود خطأ واحد يُشير إلى احتمال كبير لوجود المزيد من الأخطاء في نفس منطقة الكود. وبالتالي، تُحدد كل دورة من عملية الاختبار أجزاء الكود التي تحتوي على أخطاء. وتُدقق الدورة التالية هذه الأجزاء بدقة أكبر عن طريق إضافة استدعاءات جدولة حولها. السماح للمواقع الإشكالية بالتنفيذ بترتيب مختلف قد يكشف عن سلوك غير متوقع.
الاختبارات المتعلقة بالتوقيت
تضمن هذه الاستراتيجية عدم تعرض التطبيق لتأثير التحقق. تتراوح مصادر الأخطاء التي تُسبب تأثير التحقق بين مشاكل إنشاء المهام ومشاكل التزامن والاتصال. متطلبات الاختبارات المتعلقة بالتوقيت: [ 3 ]
- يجب أن تختلف مدة التأخير
- يجب أن تغطي نقاط التأخير مواقع البرنامج المناسبة
- يجب إدراج عبارات التأخير أو إزالتها أو نقلها لإحداث تأثير التحقق.
عدد حالات الاختبار لكل مجموعة بيانات إدخال هو:
n C 1 + n C 1 + … + n C 1 = 2 n -1 حيث n = العدد الإجمالي لعمليات المزامنة وإنشاء العمليات ومكالمات الاتصال.
هذه المعادلة من الرتبة الأسية. ولتقليل عدد حالات الاختبار، تُستخدم إما طريقة التنفيذ الحتمية (DET) أو تقنية التنفيذ المتعدد (MET). ويجب معالجة العديد من المشكلات التالية:
- تأجيل التنفيذ
- إضافة التأخيرات مهمة بسيطة. يمكن استخدام عبارة sleep() النموذجية لإضافة التأخيرات.
- تحديد مكان إدخال التأخيرات
- تُعرف مواقع الإدخال بنقاط التأخير. ولأن الهدف من حالات الاختبار المتعلقة بالتوقيت هو اكتشاف أخطاء التزامن والاتصال وإنشاء الخيوط، تُضاف عبارات التأخير مباشرةً قبل هذه العبارات.
المزايا
- سهل التنفيذ على معالجات متعددة دون الحاجة إلى ترتيب طلبات المزامنة.
- لا حاجة لإنشاء رسم بياني للتزامن
- أكثر فعالية في اكتشاف الأعطال
- يقل إجمالي عدد حالات الاختبار، ومع ذلك فإن تغطية الكود أكبر، وذلك بفضل التحليل الثابت.
جميع اختبارات Du-Path
تعتمد هذه الطريقة على مفهوم زوج التعريف والاستخدام، من أجل تحديد المسارات التي سيتم اختبارها.
استراتيجيات التحقق
التحقق من البرمجيات هو عملية تثبت أن البرمجيات تعمل بشكل صحيح وتؤدي المهمة المقصودة كما هو مصمم لها.
حسابات الاختبار
يُدخل النظام بياناتٍ لتوليد نتيجةٍ معروفة. ويمكن الحصول على زوج المدخلات والنتيجة هذا من نتائج تجريبية سابقة و/أو حسابات يدوية. [ 4 ] هذا اختبار على مستوى النظام، ولا يُمكن إجراؤه إلا بعد دمج جميع الوحدات ذات الصلة. علاوةً على ذلك، فهو يُظهر فقط وجود أخطاء برمجية، ولا يُقدم أي معلومات تفصيلية حول عددها أو موقعها أو طبيعتها.
اختبارات التناظر
تُستخدم هذه الاختبارات بشكل أساسي في المحاكاة العلمية. غالبًا ما يتعذر التنبؤ بمخرجات المحاكاة. ولأن هذه المحاكاة تسعى إلى وصف القوانين العلمية، يجب أن تراعي أي تناظرات في النظرية. وبالتالي، من خلال تغيير شروط الإدخال على طول خطوط التناظر، ثم مقارنة النتائج المُتحصل عليها بنتائج مُستمدة من مصادر خارجية، يُمكن الكشف عن وجود أخطاء. [ 4 ]

في الحوسبة العلمية، تتركز معظم البيانات في المنطقة المركزية لظروف المحاكاة. ونتيجةً لذلك، يصعب إجراء اختبار القيم الحدية [ 2 ] باستخدام بيانات تجريبية في الوقت الفعلي. لذا، يتم نقل مركز المحاكاة (على سبيل المثال، لقيمة البيانات 10 في الشكل 1) إلى إحدى الحدود لاختبار شرط الحدود بفعالية.
اختبارات التنفيذ المتوازية
تُستخدم اختبارات التنفيذ المتوازي عادةً للتطبيقات التي تستخدم نماذج برمجة الذاكرة الموزعة مثل تمرير الرسائل . وغالبًا ما تُطبق هذه الاختبارات على البرامج التي تستخدم شبكات منتظمة من المعالجات. [ 4 ]
الملخص العالمي
تستخدم العديد من قواعد البيانات المتوازية المعالجة المتوازية الموزعة لتنفيذ الاستعلامات. عند تنفيذ دالة تجميعية مثل دالة الجمع، تُستخدم الاستراتيجية التالية: [ 5 ]
- قم بحساب المجموع الجزئي محليًا ومتزامنًا في كل معالج باستخدام البيانات الموجودة في قسم القرص المرتبط به.
- أضف هذه المجاميع الفرعية المحلية للحصول على النتيجة النهائية.
قد تحتوي النتيجة النهائية على بعض أخطاء التقريب، حيث يقوم كل معالج بتقريب النتائج المحلية بشكل مستقل. يتمثل أحد الاختبارات في التأكد من عدم حدوث مثل هذه الأخطاء. ويتطلب ذلك إثبات أن المجموع الكلي مستقل عن عملية التفكيك. يتمثل أسلوب جمع بديل في إرسال جميع القيم الفردية إلى معالج واحد لجمعها. ويمكن مقارنة هذه النتيجة بالنتيجة الموزعة لضمان الاتساق.
أدوات
مايكروسوفت تشيس
تُزيل هذه الأداة عدم الحتمية باستخدام جدولة حتمية. فهي تتعقب مسارات الجدولة التي تم تنفيذها سابقًا وتضمن تنفيذ كل مسار جدولة جديد. [ 1 ]
مراجع
- 1 2 3 4 توماس بول؛ سيباستيان بوركهارت؛ بيلي دي هالو؛ مادانلال موسوفاثي؛ شاز قدير (مايو-يونيو 2011). “الاختبار المتوقع والتدريجي للتعليمات البرمجية متعددة الخيوط”. برامج آي إي إي إي . 28 (3): 75-83 . دوى : 10.1109/MS.2010.64 .
- ١ ٢ فن اختبار البرمجيات، الطبعة الثانية . جون وايلي وأولاده. ٢٠٠٤. ص ٢٥٦. ISBN 978-0-471-46912-4.
- ↑ تشير-سون يانغ؛ لوري ل. بولوك (1997). "التحديات في الاختبار الآلي للبرامج متعددة الخيوط". وقائع المؤتمر الدولي الرابع عشر لاختبار برامج الحاسوب : 157-166 . CiteSeerX 10.1.1.52.8791 .
- ١ ٢ ٣ ستيفن بوث؛ ديفيد هينتي (٢٠٠٤). "استراتيجيات التحقق لبرمجيات الحوسبة عالية الأداء". "هندسة البرمجيات لتطبيقات أنظمة الحوسبة عالية الأداء (HPCS)"، ورشة عمل W3S - المؤتمر الدولي السادس والعشرون لهندسة البرمجيات . المجلد ٢٠٠٤. الصفحات ٢٤-٢٦ . doi : 10.1049/ic:20040413 (غير نشط في ١٢ يوليو ٢٠٢٥). ISBN 0-86341-418-4.
{{cite book}}: صيانة CS1: رقم التعريف الرقمي غير نشط اعتبارًا من يوليو 2025 ( رابط ) - ↑ كورث، هنري . مفاهيم نظام قواعد البيانات . ماكجرو هيل.
- اختبار البرمجيات
