تنوع البرمجيات

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

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

المجالات الرئيسية هي:

 تنوع التصميم، برمجة الإصدار ن، تنوع البيانات لتحمل الخطأ.
 التوزيع العشوائي.
 تنوع البرامج الطبيعية.
 خط منتجات البرمجيات.

مجالات فرعية 
يمكن تنويع البرمجيات في معظم المجالات:

 في البرامج الثابتة للأنظمة وأجهزة الاستشعار المضمنة.
 في تطبيقات الإنترنت.
 في تطبيقات الجوال.

تقنيات 
من الممكن تضخيم تنوع البرمجيات من خلال عمليات التحويل المؤتمتة التي تخلق تنوعًا اصطناعيًا. المحول البرمجي المتعدد هو مترجم محرك التنويع. تعتبر بيئة التنفيذ متعددة المتغيرات (MVEE) مسؤولة عن اختيار المتغير لتنفيذ ومقارنة الإخراج.

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

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

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

تشمل عوامل التحويل ما يلي:

 التوزيع العشوائي لتخطيط التعليمات البرمجية: إعادة ترتيب الوظائف في التعليمات البرمجية.
 عشوائية تخطيط الكرات: إعادة ترتيب الكرات.
 المكدس العشوائي المتغير: إعادة ترتيب المتغيرات في كل إطار المكدس.
 عشوائية تخطيط كومة.

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

مراجع 

هندسة البرمجيات