التحليل الساكن - من المواعدة إلى التكامل

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



تطور

في واقع الأمر ، إذا كنت تكتب بأي لغة حديثة ، فعندئذٍ ، دون أن تعرف حتى عنها ، مررتها عبر محلل ثابت. الحقيقة هي أن أي مترجم حديث يقدم مجموعة صغيرة من التحذيرات حول المشاكل المحتملة في الكود. على سبيل المثال ، عند تجميع كود C ++ في Visual Studio ، يمكنك رؤية ما يلي:



مسائل

في هذا الإخراج ، نرى أن متغير var لم يتم استخدامه مطلقًا في أي مكان في الوظيفة. لذلك في الواقع ، لقد استخدمت دائمًا محلل كود ثابت بسيط. ومع ذلك ، على عكس المحللين المحترفين مثل Coverity أو Klocwork أو PVS-Studio ، يمكن أن تشير التحذيرات التي يقدمها المترجم إلى مجموعة صغيرة فقط من المشكلات.



إذا كنت لا تعرف على وجه اليقين ما هو التحليل الثابت وكيفية تنفيذه ، فاقرأ هذه المقالة لمعرفة المزيد حول هذه المنهجية.



لماذا هناك حاجة إلى التحليل الثابت؟



باختصار: التسارع والتبسيط.



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



auto x = obj.x;
auto y = obj.y;
auto z = obj.z;


لقد كتبت الكود التالي:



auto x = obj.x;
auto y = obj.y;
auto z = obj.y;


كما ترى ، هناك خطأ مطبعي في السطر الأخير. على سبيل المثال ، يصدر PVS-Studio التحذير التالي:



V537 ضع في اعتبارك مراجعة صحة استخدام العنصر "y".



إذا كنت تريد أن تضع يديك في هذا الخطأ ، فجرب مثالًا جاهزًا في Compiler Explorer: * انقر *.



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



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



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



يمكنك العثور على المزيد من الأخطاء الشيقة التي يمكن للمحلل اكتشافها في المقالات:





الآن ، بعد قراءة هذه المادة واقتناعك بفائدة التحليل الساكن ، قد ترغب في اختبارها. ولكن من أين تبدأ؟ كيف أقوم بدمج أداة جديدة في مشروع جارٍ؟ وكيف يقدم الفريق له؟ ستجد إجابات لهذه الأسئلة أدناه.



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



0. التعرف على الصك



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



ماذا ستتعلم في هذه المرحلة:



  • ما هي طرق التفاعل مع المحلل؟
  • هل المحلل متوافق مع بيئة التطوير الخاصة بك ؛
  • ما هي المشاكل الموجودة في مشاريعك الآن.


بعد تثبيت كل ما تحتاجه ، فإن الخطوة الأولى هي إجراء تحليل للمشروع بأكمله ( Windows ، Linux ، macOS ). في حالة PVS-Studio في Visual Studio ، سترى صورة مماثلة:



قائمة

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



قائمة

الواقع ، يمكن رؤية 178 تحذيرًا بسهولة أكبر من بضعة آلاف ... غالبًا ما توجد التحذيرات الجيدة في



علامتي التبويب " متوسط" و " منخفض" ، ولكن تتضمن هذه الفئات التشخيصات التي تتميز بدقة أقل (موثوقية). يمكن العثور على مزيد من المعلومات حول مستويات وخيارات التحذير للعمل تحت Windows هنا: * انقر *.



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



1. الأتمتة



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



ماذا ستتعلم في هذه المرحلة:



  • ما هي خيارات الأتمتة التي توفرها الأداة ؛
  • هل المحلل متوافق مع نظام البناء الخاص بك؟


نظرًا لعدم وجود وثائق مثالية ، يتعين عليك أحيانًا الكتابة للدعم . هذا أمر طبيعي ويسعدنا مساعدتك. :)



الآن دعنا ننتقل إلى خدمات التكامل المستمر (CI). يمكن تضمين أي محلل فيها دون أي مشاكل كبيرة. للقيام بذلك ، تحتاج إلى إنشاء مرحلة منفصلة في خط الأنابيب ، والتي توجد عادةً بعد اختبارات التجميع والوحدة. يتم ذلك باستخدام أدوات مساعدة مختلفة لوحدة التحكم. على سبيل المثال ، يوفر PVS-Studio الأدوات المساعدة التالية:





لدمج التحليل في CI ، عليك القيام بثلاثة أشياء:



  • تثبيت المحلل
  • إجراء التحليل ؛
  • نتائج التسليم.


على سبيل المثال ، لتثبيت PVS-Studio على Linux (Debian-base) ، تحتاج إلى تشغيل الأوامر التالية:



wget -q -O - https://files.viva64.com/etc/pubkey.txt \
    | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list \
  https://files.viva64.com/etc/viva64.list
  
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio


في أنظمة Windows ، لا يمكن تثبيت المحلل من مدير الحزم ، ولكن من الممكن نشر المحلل من سطر الأوامر:



PVS-Studio_setup.exe /verysilent /suppressmsgboxes 
/norestart /nocloseapplications


يمكنك قراءة المزيد حول نشر PVS-Studio على أنظمة Windows * هنا *.



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



نظرًا لأن طريقة التشغيل تعتمد على النظام الأساسي وخصائص المشروع ، فسوف أعرض خيار C ++ (Linux) كمثال:



pvs-studio-analyzer analyze -j8 \
                            -o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -w


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



ملحوظة. تنسيق النص غير ملائم. إنه مجرد مثال. انتبه إلى تنسيق التقرير الأكثر إثارة للاهتمام - FullHtml. يسمح لك بالتنقل عبر التعليمات البرمجية الخاصة بك.



يمكنك قراءة المزيد حول إعداد التحليل على CI في مقالة " PVS-Studio and Continuous Integration " (Windows) أو " كيفية إعداد PVS-Studio في Travis CI"(Linux).



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



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



git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list


أنت الآن بحاجة إلى تمرير قائمة الملفات هذه إلى المحلل. على سبيل المثال ، في PVS-Studio يتم تنفيذ هذا باستخدام علامة -S :



pvs-studio-analyzer analyze -j8 \
                            -o PVS-Studio.log \
                            -S .pvs-pr.list


يمكنك معرفة المزيد حول تحليل طلبات السحب * هنا *. حتى إذا لم يكن CI الخاص بك مدرجًا في قائمة الخدمات المحددة في المقالة ، فسيكون القسم العام الخاص بنظرية هذا النوع من التحليل مفيدًا لك.



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



كل هذا جيد وجيد ، لكني أود أن أتمكن من عرض جميع التحذيرات في مكان واحد. ليس فقط من محلل ثابت ، ولكن أيضًا من اختبارات الوحدة أو من محلل ديناميكي. هناك العديد من الخدمات والمكونات الإضافية لهذا الغرض. PVS-Studio ، على سبيل المثال ، لديه مكون إضافي للاندماج في SonarQube .



2. التكامل على أجهزة المطورين



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



كأبسط خيار ، يمكن للمطورين تثبيت المحلل المطلوب بأنفسهم. ومع ذلك ، سيستغرق هذا وقتًا طويلاً ويلهيهم عن التطوير ، لذا يمكنك أتمتة هذه العملية باستخدام المثبت والعلامات الضرورية. هناك العديد من الأعلام الخاصة بـ PVS-Studio للتثبيت الآلي . ومع ذلك ، هناك دائمًا مديرو حزم مثل Chocolatey (Windows) أو Homebrew (macOS) أو عشرات الخيارات لنظام Linux.



بعد ذلك ، ستحتاج إلى تثبيت المكونات الإضافية الضرورية ، على سبيل المثال ، لـ Visual Studio و IDEA ورايدر إلخ.



3. الاستخدام اليومي



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



إذا اكتشف المحلل مشاكل في الكود الذي تم تغييره مؤخرًا ، فسيقوم بالإبلاغ عنها من تلقاء نفسه. على سبيل المثال ، سوف يخبرك PVS-Studio بهذا عن طريق إشعار: من



تنبيه

نافلة القول أنه لا يكفي إخبار المطورين باستخدام الأداة. نحن بحاجة إلى إخبارهم بطريقة ما ما هو وكيف هو. على سبيل المثال ، فيما يلي مقالات حول البدء السريع لبرنامج PVS-Studio ، ولكن يمكنك العثور على برامج تعليمية مماثلة لأي أداة تفضلها:





توفر هذه المقالات جميع المعلومات اللازمة للاستخدام اليومي ولا تستغرق الكثير من الوقت. :)



حتى في مرحلة التعرف على الأداة ، قمنا بإلغاء الكثير من التحذيرات أثناء إحدى عمليات الإطلاق الأولى. للأسف ، المحللون الساكنون ليسوا مثاليين ، لذا فهم يقدمون إيجابيات خاطئة من وقت لآخر. عادة ما يكون من السهل قمعها ، على سبيل المثال ، في ملحق PVS-Studio لبرنامج Visual Studio ، يكفي النقر فوق زر واحد:



كبح

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



بعد الدمج



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



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



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







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



All Articles