التحليل الساكن - من التعارف إلى التكامل

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

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

التحليل الساكن - من التعارف إلى التكامل
في هذا الإخراج نرى أن المتغير فار لم يتم استخدامه مطلقًا في أي مكان في الوظيفة. لذلك في الواقع، كنت تستخدم دائمًا محللًا بسيطًا للكود الثابت. ومع ذلك، على عكس المحللين المحترفين مثل 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.x;

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

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

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

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

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

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

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

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

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

0. التعرف على الأداة

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

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

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

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

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

التحليل الساكن - من التعارف إلى التكامل
في الواقع، فإن عرض 178 تحذيرًا أسهل بكثير من عرض عدة آلاف...

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

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

1. الأتمتة

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

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

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

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

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

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

  • تثبيت المحلل.
  • تشغيل التحليل؛
  • نتائج التسليم.

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

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 والتكامل المستمر" (ويندوز) أو "كيفية إعداد PVS-Studio في Travis CI"(لينكس).

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

بشكل عام، لا يختلف إعداد تحليل طلب السحب كثيرًا عن الإطلاق المعتاد للتحليل على 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.

ثم سوف تحتاج إلى تثبيت المكونات الإضافية اللازمة، على سبيل المثال ل البصرية ستوديو, IDEA, راكب وما إلى ذلك.

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

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

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

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

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

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

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

بعد الدمج

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

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

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

التحليل الساكن - من التعارف إلى التكامل

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

المصدر: www.habr.com

إضافة تعليق