تحليل البرامج الثابتة
في علوم الحاسوب ، يُعرف تحليل البرامج الثابت (المعروف أيضًا بالتحليل الثابت أو المحاكاة الثابتة ) بأنه تحليل برامج الحاسوب دون تنفيذها، وذلك على عكس تحليل البرامج الديناميكي الذي يُجرى على البرامج أثناء تنفيذها في بيئة متكاملة. [ 1 ] [ 2 ]
يُستخدم هذا المصطلح عادةً للإشارة إلى التحليل الذي تُجريه أداة آلية، بينما يُطلق على التحليل البشري عادةً اسم "فهم البرنامج" أو " استيعاب البرنامج " أو "مراجعة الكود" . وفي الحالة الأخيرة، يُستخدم أيضًا فحص البرمجيات واستعراضها . في معظم الحالات، يُجرى التحليل على نسخة من الكود المصدري للبرنامج ، وفي حالات أخرى، على شكل من أشكال الكود التنفيذي الخاص به .
يُعدّ التحليل الثابت (SA) والتعقيد الحسابي الضمني (ICC) من أبرز مناهج اعتماد الموارد . يتميز التحليل الثابت بطبيعته الخوارزمية، إذ يركز على لغة برمجة عامة مختارة، ويسعى إلى تحديد جدوى البرامج المكتوبة بتلك اللغة من خلال تحليل تركيبها. في المقابل، يحاول التعقيد الحسابي الضمني منذ البداية إنشاء لغات برمجة أو أساليب متخصصة تُحدد فئة التعقيد. وبالتالي، يركز التحليل الثابت على وقت الترجمة، دون أي متطلبات على المبرمج، بينما يُعدّ التعقيد الحسابي الضمني منهجًا لتصميم اللغات.
— د. ليفانت (2020) [ 3 ]
لا ينبغي الخلط بين علم التحليل الثابت وعلم التدقيق اللغوي ، وهو عملية التحقق من أخطاء أسلوب البرمجة .
الأساس المنطقي
تتفاوت درجة تعقيد التحليل الذي تُجريه الأدوات، فمنها ما يقتصر على دراسة سلوك العبارات والتصريحات الفردية، [ 4 ] ومنها ما يشمل تحليله كامل شفرة المصدر للبرنامج. وتتنوع استخدامات المعلومات المُستقاة من التحليل، بدءًا من تسليط الضوء على أخطاء البرمجة المحتملة (مثل أداة lint ) وصولًا إلى الأساليب الرسمية التي تُثبت رياضيًا خصائص برنامج مُعين (مثل تطابق سلوكه مع مواصفاته).
يمكن وصف مقاييس البرمجيات والهندسة العكسية بأنهما شكلان من أشكال التحليل الثابت. ويجري استخدام استخلاص مقاييس البرمجيات والتحليل الثابت معًا بشكل متزايد، لا سيما في إنشاء الأنظمة المدمجة، من خلال تحديد ما يسمى بأهداف جودة البرمجيات . [ 5 ]
يتزايد استخدام التحليل الثابت تجاريًا في التحقق من خصائص البرمجيات المستخدمة في أنظمة الحاسوب بالغة الأهمية للسلامة، وتحديد الثغرات البرمجية التي قد تكون عرضة للاختراق . [ 6 ] على سبيل المثال، اعتمدت الصناعات التالية على التحليل الثابت للبرمجيات كوسيلة لتحسين جودة البرمجيات المتطورة والمعقدة بشكل متزايد:
- البرمجيات الطبية : حددت إدارة الغذاء والدواء الأمريكية (FDA) استخدام التحليل الثابت للأجهزة الطبية. [ 7 ]
- البرمجيات النووية: في المملكة المتحدة، يوصي مكتب التنظيم النووي (ONR) باستخدام التحليل الثابت لأنظمة حماية المفاعلات . [ 8 ]
- برامج الطيران (بالتزامن مع التحليل الديناميكي ). [ 9 ]
- السيارات والآلات (تشكل ميزات السلامة الوظيفية جزءًا لا يتجزأ من كل مرحلة من مراحل تطوير منتجات السيارات، ISO 26262 ، القسم 8).
أفادت دراسة أجرتها شركة VDC Research عام 2012 أن 28.7% من مهندسي البرمجيات المدمجة الذين شملهم الاستطلاع يستخدمون أدوات التحليل الثابت، وأن 39.7% منهم يتوقعون استخدامها خلال عامين. [ 10 ] ووجدت دراسة أخرى أجريت عام 2010 أن 60% من المطورين الذين شملهم الاستطلاع في مشاريع بحثية أوروبية استخدموا على الأقل أدوات التحليل الثابت الأساسية المدمجة في بيئات التطوير المتكاملة (IDE). ومع ذلك، لم يستخدم سوى 10% منهم أداة تحليل إضافية (وربما أكثر تطورًا). [ 11 ]
في مجال أمن التطبيقات ، يُستخدم مصطلح اختبار أمان التطبيقات الثابت (SAST). يُعدّ اختبار أمان التطبيقات الثابت جزءًا أساسيًا من دورات حياة تطوير الأمان (SDLs)، مثل دورة حياة تطوير الأمان التي حددتها مايكروسوفت [ 12 ] ، وهو ممارسة شائعة في شركات البرمجيات. [ 13 ]
أنواع الأدوات
نشرت مجموعة إدارة الكائنات (OMG ) دراسةً حول أنواع تحليل البرمجيات المطلوبة لقياس جودة البرمجيات وتقييمها. وتصف هذه الوثيقة، بعنوان "كيفية تقديم أنظمة تقنية معلومات مرنة وآمنة وفعّالة وسهلة التغيير بما يتماشى مع توصيات CISQ"، ثلاثة مستويات لتحليل البرمجيات. [ 14 ]
- مستوى الوحدة
- التحليل الذي يتم داخل برنامج أو روتين فرعي محدد، دون الاتصال بسياق ذلك البرنامج.
- المستوى التكنولوجي
- تحليل يأخذ في الاعتبار التفاعلات بين برامج الوحدات للحصول على رؤية أكثر شمولية ودلالية للبرنامج ككل من أجل إيجاد المشكلات وتجنب النتائج الإيجابية الخاطئة الواضحة .
- مستوى النظام
- تحليل يأخذ في الاعتبار التفاعلات بين البرامج الوحدوية، ولكن دون أن يقتصر على تقنية أو لغة برمجة محددة.
يمكن تحديد مستوى آخر من تحليل البرمجيات.
- مستوى المهمة/الأعمال
- يشمل التحليل مراعاة بنود وقواعد وعمليات طبقة الأعمال/المهمة المُطبقة ضمن نظام البرمجيات لتشغيله كجزء من أنشطة المؤسسة أو طبقة البرنامج/المهمة. تُنفذ هذه العناصر دون التقيد بتقنية أو لغة برمجة محددة، وفي كثير من الحالات تُوزع على لغات متعددة، ولكن يتم استخراجها وتحليلها بشكل ثابت لفهم النظام وضمان نجاح المهمة.
تستخدم العديد من أدوات التحليل الثابت تمثيلات وسيطة للبرامج لفحص بنية الشيفرة المصدرية دون تنفيذ البرنامج. ولهذا الغرض، تُستخدم أشجار بناء الجملة المجردة (ASTs) بشكل شائع، لأنها توفر تمثيلاً منظماً للعناصر النحوية للبرنامج.
الأساليب الرسمية
الأساليب الرسمية هو المصطلح المستخدم لوصف تحليل البرمجيات (ومكونات الحاسوب المادية ) التي تُستخلص نتائجها حصراً باستخدام أساليب رياضية دقيقة. وتشمل هذه الأساليب الرياضية الدلالات الدلالية ، والدلالات البديهية ، والدلالات التشغيلية ، والتفسير المجرد .
من خلال اختزالها مباشرةً إلى مسألة التوقف ، يُمكن إثبات أن إيجاد جميع أخطاء وقت التشغيل المُحتملة في أي برنامج (أو بشكلٍ أعم، أي نوع من انتهاك مواصفات النتيجة النهائية للبرنامج) (لأي لغة كاملة تورينج ) مسألة غير قابلة للحسم : فلا توجد طريقة آلية تُجيب دائمًا بصدق عما إذا كان برنامج ما قد يُظهر أخطاءً أثناء التشغيل أم لا. تعود هذه النتيجة إلى أعمال تشرش وغودل وتورينج في ثلاثينيات القرن العشرين (انظر: مسألة التوقف ونظرية رايس ). وكما هو الحال مع العديد من المسائل غير القابلة للحسم، لا يزال بالإمكان محاولة تقديم حلول تقريبية مفيدة.
تتضمن بعض تقنيات تنفيذ التحليل الثابت الرسمي ما يلي: [ 15 ]
- التفسير المجرد ، لنمذجة تأثير كل عبارة على حالة آلة مجردة (أي أنها "تنفذ" البرنامج بناءً على الخصائص الرياضية لكل عبارة وتصريح). تُقارب هذه الآلة المجردة سلوكيات النظام بشكل مفرط: مما يُسهّل تحليل النظام المجرد، على حساب عدم الاكتمال (ليست كل خاصية صحيحة في النظام الأصلي صحيحة في النظام المجرد). مع ذلك، إذا تم تطبيقه بشكل صحيح، يكون التفسير المجرد سليمًا (يمكن ربط كل خاصية صحيحة في النظام المجرد بخاصية صحيحة في النظام الأصلي). [ 16 ]
- تحليل تدفق البيانات ، وهو أسلوب قائم على الشبكة لجمع المعلومات حول مجموعة القيم المحتملة؛
- منطق هوار ، وهو نظام رسمي يتضمن مجموعة من القواعد المنطقية للاستدلال بدقة حول صحة برامج الحاسوب . يتوفر دعم للأدوات لبعض لغات البرمجة (مثل لغة البرمجة SPARK (وهي مجموعة فرعية من Ada ) ولغة نمذجة جافا - JML - باستخدام ESC/Java و ESC/Java2 ، ومكون Frama-C WP ( أضعف شرط مسبق ) الإضافي للغة C الممتد باستخدام ACSL ( لغة مواصفات ANSI/ISO C )).
- تعتبر عملية التحقق من النموذج الأنظمة التي لها حالة محدودة أو يمكن اختزالها إلى حالة محدودة عن طريق التجريد ؛
- التنفيذ الرمزي ، كما هو مستخدم لاستخلاص التعبيرات الرياضية التي تمثل قيمة المتغيرات المتغيرة في نقاط معينة في الكود.
- تحليل المرجع القابل للتصفير
التحليل الثابت القائم على البيانات
يستفيد التحليل الثابت القائم على البيانات من قواعد بيانات برمجية واسعة النطاق لاستنتاج قواعد البرمجة وتحسين دقة التحليل. [ 17 ] [ 18 ] على سبيل المثال، يمكن استخدام جميع حزم جافا مفتوحة المصدر المتوفرة على GitHub لتعلم استراتيجيات تحليل جيدة. ويمكن استخدام تقنيات التعلم الآلي لاستنتاج القواعد. [ 19 ] كما يمكن التعلم من عدد كبير من الإصلاحات والتحذيرات السابقة. [ 17 ]
المعالجة
تُصدر أدوات التحليل الثابتة تحذيرات. بالنسبة لأنواع معينة من هذه التحذيرات، من الممكن تصميم وتنفيذ تقنيات معالجة آلية . على سبيل المثال، اقترح لوغوزو وبال معالجات آلية لـ cccheck في لغة C# . [ 20 ]
انظر أيضاً
مراجع
- ↑ ويشمان، ب.أ؛ كانينغ، أ.أ؛ كلوترباك، د.ل؛ وينسبارو، ل.أ؛ وارد، ن.ج؛ مارش، د.و.ر (مارس 1995). "منظور صناعي حول التحليل الثابت" (ملف PDF) . مجلة هندسة البرمجيات . 10 (2): 69-75 . doi : 10.1049/sej.1995.0010 . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 27-09-2011.
- ↑ إيجيل، مانويل؛ شولت، ثيودور؛ كيردا، إنجين؛ كرويجل، كريستوفر (5 مارس 2008). "دراسة استقصائية حول تقنيات وأدوات التحليل الديناميكي الآلي للبرمجيات الخبيثة" . مجلة ACM Computing Surveys . 44 (2): 6:1–6:42. doi : 10.1145/2089125.2089126 . ISSN 0360-0300 . S2CID 1863333 .
- ↑ ليفانت، دانيال (2020). "لغة أمرية عامة للوقت متعدد الحدود". arXiv : 1911.04026 [ cs.CC ].
- ↑ خاتيوادا، ساكيت؛ توشيف، ميروسلاف؛ محمود، أنس (2018-01-01). "دلالات كافية: منهج نظري للمعلومات لتحديد موقع أخطاء البرمجيات باستخدام استرجاع المعلومات" . تكنولوجيا المعلومات والبرمجيات . 93 : 45-57 . doi : 10.1016/j.infsof.2017.08.012 .
- ↑ "أهداف جودة البرمجيات لشفرة المصدر" مؤرشفة بتاريخ 4 يونيو 2015 على موقع Wayback Machine (ملف PDF). وقائع مؤتمر البرمجيات والأنظمة المدمجة في الوقت الحقيقي 2010 ، ERTS2010.org، تولوز، فرنسا: باتريك برياند، مارتن بروشيه، تييري كامبوا، إيمانويل كوتنسو، أوليفييه غيتا، دانيال مينبيرت، فريدريك موندو، باتريك مونييه، لويك نوري، فيليب سبوزيو، فريدريك ريتيلو.
- ↑ تحسين أمن البرمجيات من خلال التحليل الثابت والتحليل أثناء التشغيل الدقيق. مؤرشف بتاريخ 2011-06-05 في Wayback Machine (ملف PDF)، بنيامين ليفشيتس، القسم 7.3 "التقنيات الثابتة للأمن". أطروحة دكتوراه من جامعة ستانفورد، 2006.
- ↑ إدارة الغذاء والدواء الأمريكية (2010-09-08). "بحث سلامة برمجيات مضخات التسريب في إدارة الغذاء والدواء" . إدارة الغذاء والدواء. مؤرشف من الأصل في 2010-09-01 . تم الاطلاع عليه في 2010-09-09 .
- ↑ أنظمة السلامة الحاسوبية - إرشادات فنية لتقييم الجوانب البرمجية لأنظمة الحماية الرقمية الحاسوبية، "أنظمة السلامة الحاسوبية" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 4 يناير 2013. تم الاطلاع عليه بتاريخ 15 مايو 2013 .
- ↑ ورقة موقف CAST-9. اعتبارات تقييم مناهج هندسة السلامة لضمان البرمجيات. مؤرشفة بتاريخ 2013-10-06 في Wayback Machine // إدارة الطيران الفيدرالية، فريق برمجيات هيئات الاعتماد (CAST)، يناير 2002: "التحقق. يجب على مقدم الطلب/المطور تحديد مزيج من التحليلات الثابتة والديناميكية وتطبيقها على البرنامج."
- ↑ VDC Research (2012-02-01). "الوقاية الآلية من العيوب لجودة البرمجيات المدمجة" . VDC Research. مؤرشف من الأصل بتاريخ 2012-04-11 . تم الاطلاع عليه بتاريخ 2012-04-10 .
- ↑ براوز، كريستيان ر.، رينيه راينرز، وسيلفيا دينتشيفا. "دراسة تجريبية لدعم الأدوات في مشاريع البحث الموزعة للغاية". المؤتمر الدولي الخامس لهندسة البرمجيات العالمية (ICGSE)، 2010. IEEE، 2010. https://ieeexplore.ieee.org/Xplore/login.jsp?url=%2Fielx5%2F5581168%2F5581493%2F05581551.pdf&authDecision=-203
- ↑ م. هوارد وس. ليبنر. دورة حياة تطوير الأمن: SDL: عملية لتطوير برمجيات أكثر أمانًا بشكل واضح. مطبعة مايكروسوفت، 2006. ISBN 978-0735622142
- ↑ آخيم د. بروكر وأوي سودان. نشر اختبار أمان التطبيقات الثابتة على نطاق واسع. مؤرشف بتاريخ 21-10-2014 في Wayback Machine . في GI Sicherheit 2014. سلسلة محاضرات في المعلوماتية، 228، الصفحات 91-101، GI، 2014.
- ↑ "الورقة البيضاء لـ OMG | CISQ - اتحاد جودة المعلومات والبرمجيات" (ملف PDF) . مؤرشف (PDF) من الأصل بتاريخ 28-12-2013 . تم الاطلاع عليه بتاريخ 18-10-2013 .
- ↑ فيجاي ديسيلفا وآخرون (2008). "دراسة استقصائية للتقنيات الآلية للتحقق الرسمي من البرمجيات" (ملف PDF) . مجلة Transactions On CAD. مؤرشف (ملف PDF) من الأصل بتاريخ 4 مارس 2016. تم الاطلاع عليه بتاريخ 11 مايو 2015 .
- ↑ جونز، بول (9 فبراير 2010). "نهج التحقق القائم على الأساليب الرسمية لتحليل برمجيات الأجهزة الطبية" . تصميم الأنظمة المدمجة. مؤرشف من الأصل في 10 يوليو 2011. تم الاسترجاع في 9 سبتمبر 2010 .
- 1 2 "التعلم من أخطاء الآخرين: تحليل الشفرة البرمجية القائم على البيانات" . www.slideshare.net . 13 أبريل 2015.
- ↑ سودربيرغ، إيما؛ تشيرش، لوك؛ هوست، مارتن (21-06-2021). "تحسينات سهولة الاستخدام القائمة على البيانات المفتوحة لتحليل الشفرة الثابتة وتحدياتها" . التقييم والتحليل في هندسة البرمجيات . EASE '21. نيويورك، نيويورك، الولايات المتحدة الأمريكية: رابطة آلات الحوسبة. ص 272-277 . doi : 10.1145/3463274.3463808 . ISBN 978-1-4503-9053-8.
- ↑ أوه، هاكجو؛ يانغ، هونغسوك؛ يي، كوانغكيون (2015). "تعلم استراتيجية لتكييف تحليل البرنامج عبر التحسين البايزي". وقائع مؤتمر ACM SIGPLAN الدولي لعام 2015 حول البرمجة الكائنية والأنظمة واللغات والتطبيقات - OOPSLA 2015. الصفحات 572-588 . doi : 10.1145/2814270.2814309 . ISBN 9781450336895. S2CID 13940725 .
- ↑ لوغوزو، فرانشيسكو؛ بول، توماس (15 نوفمبر 2012). "إصلاح البرامج التلقائي المعياري والمُدقَّق" . إشعارات ACM SIGPLAN . 47 (10): 133-146 . doi : 10.1145/2398857.2384626 . ISSN 0362-1340 .
للمزيد من القراءة
- أيواه، ناثانيال؛ هوفماير، ديفيد؛ مورغنثالر، ج. ديفيد؛ بينيكس، جون؛ بو، ويليام (2008). "استخدام التحليل الثابت لاكتشاف الأخطاء". مجلة IEEE للبرمجيات . 25 (5): 22-29 . CiteSeerX 10.1.1.187.8985 . doi : 10.1109/MS.2008.130 . S2CID 20646690 .
- برايان تشيس، جاكوب ويست (فورتيفاي سوفتوير) (2007). البرمجة الآمنة باستخدام التحليل الثابت . أديسون-ويسلي. ISBN 978-0-321-42477-8.
- فليمنج نيلسون؛ هان ر. نيلسون؛ كريس هانكين (10 ديسمبر 2004). مبادئ تحليل البرامج (طبعة 1999 (مصححة 2004) ). سبرينغر. ISBN 978-3-540-65410-0.
- "التفسير المجرد والتحليل الثابت"، المدرسة الشتوية الدولية حول علم الدلالة والتطبيقات 2003، بقلم ديفيد أ. شميدت
- تحليل البرامج الثابتة
- تحليل البرامج
- هندسة البرمجيات
