دليل:قائمة تحقق ما قبل الالتزام

This page is a translated version of the page Manual:Pre-commit checklist and the translation is 100% complete.
Other languages:

هذه محاولة لصياغة قائمة تحقق بغرض الاستخدام قبل التزام نسخة من برامج. يكرر بعض مما هو مذكور هنا ما ذكر في أعراف البرمجة إلا أنه في صيغة قائمة تحقق سريعة. قائمة التحقق هذه مشابهة لقائمة The Checklist Manifesto. قد يبدو بعض مما ذكر هنا سخيفا (مثل أن تطرح على طبيب سؤال «هل غسلت يديك؟») إلا أن الغرض منها تجنب المشاكل التي قد تغيب عن البعض.


Back-end (PHP)

  • هل جرى كودك البرمجي دون أي مشاكل بموجب ‎E_STRICT؟[1]
  • هل تسبب كودك البرمجي في تعطيل أي من اختبارات الوحدات؟ انظر Manual:PHP unit testing .
  • هل اختبرت كافة نقاط الخروج من كودك البرمجي؟
  • هل استخدمت علامات الجدولة بدلا من المسافات في محاذاة النص؟
  • هل أزلت كود تصويب الأخطاء الإضافي الذي يحتوي على تعليقات؟ (e.g. #var_dump( $array ); and/or #die();)
  • لو أنتجت سمة جديدة، هل وثّقت متغيرات السمة وما ينتج عنها مستخدما Doxygen؟
  • هل أنشأت معرفّات لا تستخدم camelCase (أي استخدام الشرطة التحتية)؟
  • هل اختبرت كل حالة استثناء؟
  • لو كانت لديك نقاط عودة متعددة، هل اختبرتها جميعًا؟
  • هل كل رسالة أنشأتها موجودة في languages/i18n/en.json، ويوجد لتلك الرسائل توثيق في languages/i18n/qqq.json؟
  • Is each use of fopen(), fread(), etc. checked for errors or problems?
  • Did you use t or b flags for fopen() to ensure Windows compatibility?
  • Have you used the proper output functions? echo should almost never be used.
  • Have you used the proper termination functions? exit should almost never be used.
  • حيثما كان ذلك مطلوبًا، هل استخدمت دوال حزم ميديايويكي بدلا من مكافئاتها المستخدمة في بي إتش بي؟
  • If you added a new test to parserTests.txt, did you give it a new name?
  • If you added a new hook, did you document it?

الاختبار

When adding features, it's vital to verify you didn't break existing functionality. We have three kinds of tests you can be required to write for backend code:

  • Parser tests: Test the parser output for wikitext (see tests/parser/parserTests.php). Try running php tests/parser/parserTests.php --quick --quiet to see how those work. Everything should pass, in theory. You can add new tests or fix existing ones by editing tests/parser/parserTests.txt.
  • Unit tests (PHPUnit): Located in the tests/phpunit directory. They are typically run through the phpunit.php script invoked from the aforementioned directory. These tests also include ordinary parser tests, though parserTests.php probably works faster. Read Manual:PHP unit testing for more information about how to setup PHPUnit and further details on how it is used inside MediaWiki.
  • Selenium: tests are in directory tests/selenium.

Anyway, if you can't write an automatic test, do manual testing. If you cause breakage too often, people will get annoyed at you.

Front-end

  • هل اختبرته في متصفح فعلي؟ قد ينتج عن أتفه التغييرات تعطيل أمور ليست بادية للعيان. افتح هذا المتصفح وتنقل بين الصفحات وعدّل شيء ما أو سجل الدخول أو أضف صفحة إلى قائمة مراقبتك.
  • Did your code break any of the unit tests? See Manual:JavaScript unit testing
  • Will it work at least in the browsers we support for A-grade functionality (check Compatibility#Browsers)?
  • Are there any implied globals other than jQuery or mediaWiki? There should not be, (not $ either)

الاختبار الآلي

Jenkins runs some tests on most repositories when changes are submitted to gerrit and approved. يجب عليك أن تشغّل هذه الاختبارات محليًا قبل التزام رقعة تصويب برمجية. Many extensions implement the standard Continuous integration/Entry points and so you can run npm test and grunt test before committing.

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

  • Does it validate (or did you at least run it through) JSHint or JSLint ? (check recommended settings)
  • Unit tests (QUnit): Located in the tests/qunit directory. They are typically run from the browser via Special:JavaScriptTest/qunit. Read Manual:JavaScript unit testing for more information on how to enable it, how it works and the various options that are available.


مراجع

  1. ضع ‎error_reporting(-1);‎ في ملف الإدخال. طالع أيضا Manual:How to debug .