# تحليل البرنامج المتحرك

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

## أنواع
### الاختبار الوظيفي

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

### تغطية الكود

تغطية الكود عملية تهدف إلى تحديد الأجزاء من الكود البرمجي التي لم يتم اختبارها، أي الأجزاء التي لم يتم تغطيتها بواسطة اختبارات الوحدة أو أي نوع آخر من الاختبارات. تساعد هذه العملية في الكشف عن الفجوات في الاختبارات، مما يمكّن المطورين من تحسين جودة البرنامج وضمان تغطيته بالكامل.
على الرغم من أن تحليل تغطية الكود يحدد الأجزاء التي لم يتم اختبارها، إلا أنه لا يضمن أن الكود الذي تم اختباره قد خضع لاختبارات كافية. يمكن أن يتم تنفيذ التعليمات البرمجية بنجاح، حتى في حال عدم تحقق الاختبارات فعليًا من السلوك الصحيح للكود.
* تغطية الكود لا تعني الجودة: التغطية العالية قد تشير إلى أن العديد من الأسطر قد تم تنفيذها، لكنها لا تضمن أن السلوك المنشود قد تم التحقق منه بشكل صحيح.
* اختبارات غير فعالة: قد يكون لديك اختبارات تنجح دون أن تتحقق من الشروط الأساسية أو السيناريوهات الهامة، مما يعني أن الأخطاء قد تبقى غير مكتشفة.
* تحليل سلوك الكود: يجب أن تتضمن اختبارات البرمجيات أساليب إضافية مثل اختبار السلوك الوظيفي واختبار الحالات الحدودية، لضمان أن الكود يتعامل بشكل صحيح مع جميع السيناريوهات.
* تقييم جودة الاختبارات: من المهم تقييم جودة الاختبارات وليس مجرد الكمية. يجب أن تركز الاختبارات على السيناريوهات الواقعية وتحقق من النتائج المتوقعة بدلاً من مجرد قياس نسبة التغطية.
* Gcov هو برنامج تغطية الكود المصدر GNU .
* تقوم VB Watch بحقن كود التحليل الديناميكي في برامج Visual Basic لمراقبة تغطية الكود ومكدس النداء وتتبع التنفيذ والكائنات والمتغيرات المولدة.

### الاختبار الديناميكي

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

### اكتشاف خطأ الذاكرة

* AddressSanitizer : اكتشاف أخطاء الذاكرة لنظامي التشغيل Linux و macOS وWindows والمزيد. جزء من LLVM .
* BoundsChecker : اكتشاف أخطاء الذاكرة للتطبيقات المستندة إلى Windows. جزء من Micro Focus DevPartner .
* Dmalloc : مكتبة لفحص تخصيص الذاكرة والتسريبات. يجب إعادة تجميع البرنامج، ويجب أن تتضمن جميع الملفات ملف الرأس C الخاص dmalloc.h.
* Intel Inspector : مصحح أخطاء الذاكرة الديناميكية لتطبيقات C وC++ وFortran التي تعمل على أنظمة التشغيل Windows وLinux .
* تنقية : الكشف بشكل أساسي عن تلف الذاكرة واكتشاف تسرب الذاكرة.
* Valgrind : يقوم بتشغيل البرامج على معالج افتراضي ويمكنه اكتشاف أخطاء الذاكرة (على سبيل المثال، سوء استخدام malloc و free ) وظروف السباق في البرامج متعددة الخيوط .

### التضبيب

Fuzzing هي تقنية اختبار تُستخدم للكشف عن الأخطاء والثغرات الأمنية في البرمجيات من خلال تنفيذ البرنامج على مجموعة واسعة من المدخلات. تُستخدم هذه المدخلات، التي يتم إنشاؤها غالبًا بشكل عشوائي أو شبه عشوائي، لاختبار سلوك التطبيق في ظل ظروف غير متوقعة أو غير عادية.

### التنفيذ الرمزي الديناميكي

يتضمن التنفيذ الرمزي الديناميكي، المعروف أيضًا باسم DSE أو التنفيذ التوافقي، إجراء اختبار للبرنامج على مدخلات فعلية، حيث يتم جمع قيود المسار المرتبطة بهذا التنفيذ. بعد ذلك، يُستخدم مُحلل القيود (عادةً ما يكون مُحلل SMT) لتوليد مدخلات جديدة يمكن أن تؤدي إلى اتخاذ البرنامج لمسار تدفق تحكم مختلف، مما يسهم في زيادة تغطية التعليمات البرمجية ضمن مجموعة الاختبار. يمكن اعتبار DSE نوعًا من التمويه، المعروف باسم التمويه "الصندوق الأبيض".

### تحليل تدفق البيانات الديناميكي

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

### الاستدلال الثابت

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

### تحليل الأمن

يمكن استخدام التحليل الديناميكي للكشف عن مشاكل الأمان.
* IBM Rational AppScan عبارة عن مجموعة من حلول أمان التطبيقات المخصصة لمراحل مختلفة من دورة حياة التطوير. يتضمن المجموعة منتجين رئيسيين للتحليل الديناميكي: IBM Rational AppScan Standard Edition، وIBM Rational AppScan Enterprise Edition. بالإضافة إلى ذلك، يتضمن المجموعة IBM Rational AppScan Source Edition، وهي أداة تحليل ثابتة.

### أخطاء التزامن

* يستخدم Parasoft Jtest اكتشاف أخطاء وقت التشغيل للكشف عن العيوب مثل ظروف السباق والاستثناءات وتسريبات الموارد والذاكرة وثغرات الهجمات الأمنية.
* يقوم Intel Inspector بإجراء تحليل وقت التشغيل وتحليل أخطاء الذاكرة في نظام التشغيل Windows.
* Parasoft Insure++ هي أداة لتحليل الذاكرة وقت التشغيل واكتشاف الأخطاء. يوفر مكون Inuse عرضًا رسوميًا لتخصيصات الذاكرة بمرور الوقت، مع رؤية محددة للاستخدام الإجمالي للكومة، وتخصيصات الكتلة، والتسريبات المعلقة المحتملة، وما إلى ذلك.
* Thread Sanitizer من Google عبارة عن أداة للكشف عن سباق البيانات. يقوم بتجهيز LLVM IR لالتقاط عمليات الوصول إلى الذاكرة السريعة.

### تقطيع البرنامج

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

### تحليل الأداء

تستخدم معظم أدوات تحليل الأداء تقنيات تحليل البرامج الديناميكية.</link>

## التقنيات

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

### أمثلة

DynInst عبارة عن مكتبة تصحيح أكواد وقت التشغيل مفيدة في تطوير اختبارات تحليل البرامج الديناميكية وتطبيقها على الملفات القابلة للتنفيذ المترجمة. لا يتطلب Dyninst كود المصدر أو إعادة التجميع بشكل عام، ومع ذلك، فإن الملفات القابلة للتنفيذ غير المجردة والملفات القابلة للتنفيذ التي تحتوي على رموز تصحيح الأخطاء تكون أسهل في التعامل معها.
Iroh.js هي مكتبة تحليل كود وقت التشغيل لـ JavaScript . إنه يتتبع مسار تنفيذ التعليمات البرمجية، ويوفر مستمعين وقت التشغيل للاستماع إلى أنماط التعليمات البرمجية المنفذة المحددة، ويسمح باعتراض سلوك تنفيذ البرنامج والتلاعب به.

## انظر أيضا

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

## مراجع

* ↑ Myers, G. J. (1979). The Art of Software Testing. John Wiley and Sons.
* ↑ Chen, Ju; Han, Wookhyun; Yin, Mingjun; Zeng, Haochen; Song, Chengyu; Lee, Byoungyoung; Yin, Heng; Shin, Insik (2022). {SYMSAN}: Time and Space Efficient Concolic Execution via Dynamic Data-flow Analysis (بالإنجليزية). pp. 2531–2548. ISBN:978-1-939133-31-1. Archived from the original on 2024-06-17.
* ↑ Chang، Walter؛ Streiff، Brandon؛ Lin، Calvin (27 أكتوبر 2008). "Efficient and extensible security enforcement using dynamic data flow analysis". Proceedings of the 15th ACM conference on Computer and communications security. CCS '08. New York, NY, USA: Association for Computing Machinery. ص. 39–50. DOI:10.1145/1455770.1455778. ISBN:978-1-59593-810-7. S2CID:6888893.
* بوابة برمجة الحاسوب
* بوابة علم الحاسوب
قالب:Software testing