Code review

Software Engineers (a.k.a. programmers) reviewing a program

Code review (sometimes referred to as peer review) is a software quality assurance activity in which one or more people examine the source code of a computer program, either after implementation or during the development process. The persons performing the checking, excluding the author, are called "reviewers". At least one reviewer must not be the code's author.[1][2]

Code review differs from related software quality assurance techniques like static code analysis, self-checks, testing, and pair programming. Static analysis relies primarily on automated tools, self-checks involve only the author, testing requires code execution, and pair programming is performed continuously during development rather than as a separate step.[1]

Goal

Although direct discovery of quality problems is often the main goal,[3] code reviews are usually performed to reach a combination of goals:[4][5]

  • Improving code quality Improve internal code quality and maintainability through better readability, uniformity, and understandability
  • Detecting defects Improve quality regarding external aspects, especially correctness, but also find issues such as performance problems, security vulnerabilities, and injected malware
  • Learning/Knowledge transfer Sharing codebase knowledge, solution approaches, and quality expectations, both to the reviewers and the author
  • Increase sense of mutual responsibility Increase a sense of collective code ownership and solidarity
  • Finding better solutions Generate ideas for new and better solutions and ideas beyond the specific code at hand
  • Complying with QA guidelines, ISO/IEC standards Code reviews are mandatory in some contexts, such as air traffic software and safety-critical software

Review types

Several variations of code review processes exist, with additional types specified in IEEE 1028.[6]

  • Management reviews
  • Technical reviews
  • Inspections
  • Walk-throughs
  • Audits

Inspection (formal)

أُطلق على أول عملية مراجعة للبرمجيات دُرست ووُصفت بالتفصيل اسم "التفتيش" من قِبل مُخترعها، مايكل فاجان . [ 7 ] يُعد تفتيش فاجان عملية رسمية تتضمن تنفيذًا دقيقًا ومفصلًا بمشاركة عدة أطراف وعلى مراحل متعددة. في مراجعات البرمجيات الرسمية، يحضر مطورو البرمجيات سلسلة من الاجتماعات لفحص الكود سطرًا بسطر، وغالبًا ما يستخدمون نسخًا مطبوعة. [ 8 ] وقد أظهرت الأبحاث أن عمليات التفتيش الرسمية دقيقة للغاية وفعالة جدًا في تحديد العيوب. [ 7 ]

مراجعة منتظمة للتعليمات البرمجية بناءً على التغييرات (جولات استعراضية)

تعتمد فرق تطوير البرمجيات عادةً عملية مراجعة أبسط، حيث يرتبط نطاق كل مراجعة بالتغييرات التي تطرأ على قاعدة التعليمات البرمجية والمرتبطة بتذكرة أو قصة مستخدم أو عملية دمج أو أي وحدة عمل أخرى. [ 9 ] [ 3 ] علاوة على ذلك، توجد قواعد أو أعراف تُدمج مهمة المراجعة في سير عمل التطوير من خلال أعراف مثل المراجعة الإلزامية لجميع التذاكر، عادةً كجزء من طلب الدمج ، بدلاً من التخطيط لكل مراجعة على حدة. تُسمى هذه العملية "مراجعة التعليمات البرمجية المنتظمة القائمة على التغييرات". [ 1 ] وتوجد العديد من الاختلافات لهذه العملية الأساسية.

أظهر استطلاع رأي أُجري عام ٢٠١٧ وشمل ٢٤٠ فريق تطوير أن ٩٠٪ من الفرق التي تستخدم مراجعة التعليمات البرمجية تتبع عملية قائمة على التغييرات، وأن ٦٠٪ منها تستخدم مراجعة منتظمة قائمة على التغييرات. [ ٣ ] ومن بين كبرى شركات البرمجيات المعروفة باستخدامها لمراجعة التعليمات البرمجية القائمة على التغييرات: مايكروسوفت، [ ١٠ ] وجوجل، [ ١١ ] وفيسبوك. [ ١٢ ]

الكفاءة والفعالية

أظهرت دراسةٌ جاريةٌ أجراها كابرز جونز، حلّل فيها أكثر من 12000 مشروع لتطوير البرمجيات، أن عمليات الفحص الرسمية تكتشف عيوبًا كامنة بنسبة 60-65%، بينما تكتشف عمليات الفحص غير الرسمية أقل من 50% من العيوب. ويبلغ معدل اكتشاف العيوب الكامنة لمعظم أنواع الاختبارات حوالي 30%. [ 13 ] [ 14 ] في المقابل، تناقضت دراسة حالة لمراجعة الشفرة نُشرت في كتاب " أفضل الأسرار المحفوظة لمراجعة الشفرة من قِبل النظراء" مع دراسة كابرز جونز، [ 13 ] حيث وجدت أن المراجعات المُبسّطة قادرة على كشف عددٍ مماثلٍ من الأخطاء البرمجية التي تكشفها المراجعات الرسمية، مع كونها أسرع وأقل تكلفة. [ 15 ]

تشير الدراسات إلى أن ما يصل إلى 75% من تعليقات مراجعة التعليمات البرمجية تؤثر على قابلية تطوير البرمجيات وصيانتها أكثر من تأثيرها على وظائفها، [ 16 ] [ 17 ] [ 4 ] [ 18 ] مما يوحي بأن مراجعات التعليمات البرمجية أداة ممتازة لشركات البرمجيات ذات دورات حياة المنتجات أو الأنظمة الطويلة. [ 19 ] ولذلك، فإن أقل من 15% من المشكلات التي تُناقش في مراجعات التعليمات البرمجية ترتبط مباشرةً بالأخطاء البرمجية. [ 20 ]

إرشادات

تشير الأبحاث إلى أن فعالية مراجعة التعليمات البرمجية ترتبط بسرعة المراجعة. تتراوح معدلات مراجعة التعليمات البرمجية المثلى بين 200 و400 سطر من التعليمات البرمجية في الساعة. [ 21 ] [ 22 ] [ 23 ] [ 24 ] قد تكون عملية فحص ومراجعة أكثر من بضع مئات من أسطر التعليمات البرمجية في الساعة للبرامج الحساسة (مثل البرامج المدمجة ذات الأهمية البالغة للسلامة ) سريعة جدًا بحيث لا يمكن اكتشاف الأخطاء. [ 21 ] [ 25 ]

أدوات الدعم

تساعد أدوات تحليل الشفرة الثابتة المراجعين من خلال فحص شفرة المصدر تلقائيًا بحثًا عن الثغرات الأمنية المعروفة وأنماط العيوب، لا سيما في أجزاء الشفرة الكبيرة. [ 26 ] وتشير دراسة أجرتها شركة VDC Research عام 2012 إلى أن 17.6% من مهندسي البرمجيات المدمجة الذين شملهم الاستطلاع يستخدمون حاليًا أدوات مؤتمتة لدعم مراجعة الشفرة من قبل النظراء، وأن 23.7% منهم يخططون لاستخدامها في غضون عامين. [ 27 ]

انظر أيضاً

مراجع

  1. 1 2 3 باوم، توبياس؛ ليسكين، أولغا؛ نيكلاس، كاي؛ شنايدر، كورت (2016). "مخطط تصنيف متعدد الأوجه لعمليات مراجعة التعليمات البرمجية الصناعية القائمة على التغيير". المؤتمر الدولي لهندسة الكهرباء والإلكترونيات (IEEE) لعام 2016 حول جودة البرمجيات وموثوقيتها وأمنها (QRS) . الصفحات 74-85 . doi : 10.1109/QRS.2016.19 . ISBN  978-1-5090-4127-5. S2CID 9569007 . 
  2. كولاوا، آدم؛ هويزينغا، دوروتا (2007). الوقاية الآلية من العيوب: أفضل الممارسات في إدارة البرمجيات . مطبعة وايلي-IEEE لجمعية الحاسبات. ص 260. ISBN  978-0-470-04212-0.
  3. 1 2 3 باوم، توبياس؛ ليسمان، هندريك؛ شنايدر، كورت (2017). "اختيار عملية مراجعة الكود: دراسة استقصائية حول حالة الممارسة". تحسين عملية البرمجيات الموجهة نحو المنتج . سلسلة محاضرات في علوم الحاسوب. المجلد 10611. الصفحات 111-127 . doi : 10.1007/978-3-319-69926-4_9 . ISBN   978-3-319-69925-7.
  4. 1 2 باتشيلي، أ؛ بيرد، س (مايو 2013). "توقعات ونتائج وتحديات مراجعة الشفرة الحديثة" (ملف PDF) . وقائع المؤتمر الدولي الخامس والثلاثين لهندسة البرمجيات IEEE/ACM (ICSE 2013) . تم الاطلاع عليه بتاريخ 2015-09-02 .
  5. باوم، توبياس؛ ليسكين، أولغا؛ نيكلاس، كاي؛ شنايدر، كورت (2016). "العوامل المؤثرة على عمليات مراجعة التعليمات البرمجية في الصناعة". وقائع الندوة الدولية الرابعة والعشرين لجمعية ACM SIGSOFT حول أسس هندسة البرمجيات - FSE 2016. الصفحات 85-96 . doi : 10.1145/2950290.2950323 . ISBN  9781450342186. S2CID 15467294 . 
  6. معيار IEEE لمراجعات وتدقيقات البرمجيات . IEEE STD 1028-2008. أغسطس 2008. الصفحات 1-53. doi : 10.1109 / ieeestd.2008.4601584 . ISBN  978-0-7381-5768-9.
  7. 1 2 فاجان، مايكل (1976). "فحص التصميم والبرمجة لتقليل الأخطاء في تطوير البرامج". مجلة أنظمة آي بي إم . 15 (3): 182-211 . doi : 10.1147/sj.153.0182 .
  8. فاجان، مايكل إي. (1986). "تطورات في عمليات فحص البرمجيات" . معاملات IEEE في هندسة البرمجيات . SE-12 (7): 744–751 . doi : 10.1109/TSE.1986.6312976 . ISSN 2326-3881 . تاريخ الاسترجاع: 2026-07-03 . 
  9. ريغبي، بيتر؛ بيرد، كريستيان (2013). "ممارسات مراجعة النظراء المعاصرة المتقاربة للبرمجيات". وقائع الاجتماع المشترك التاسع لعام 2013 حول أسس هندسة البرمجيات . الصفحات 202-212 . CiteSeerX 10.1.1.641.1046 . doi : 10.1145/2491411.2491444 . ISBN   9781450322379. S2CID 11163811 . 
  10. ماكلويد، لورا؛ غريلر، ميكايلا؛ ستوري، مارغريت-آن ؛ بيرد، كريستيان؛ تشيرفونكا، جاك (2017). "مراجعة الشفرة في الميدان: التحديات وأفضل الممارسات" (ملف PDF) . مجلة IEEE للبرمجيات . 35 (4): 34. doi : 10.1109/MS.2017.265100500 . S2CID 49651487. تاريخ الاسترجاع: 28 نوفمبر 2020 . 
  11. سادوفسكي، كايتلين؛ سودربيرغ، إيما؛ تشيرش، لوك؛ سيبكو، ميخال؛ باتشيلي، ألبرتو (2018). "مراجعة الكود الحديثة: دراسة حالة في جوجل". وقائع المؤتمر الدولي الأربعين لهندسة البرمجيات: هندسة البرمجيات في الممارسة . ص 181-190 . doi : 10.1145/3183519.3183525 . ISBN  9781450356596. S2CID 49217999 . 
  12. سافور، توني؛ دوغلاس، ميتشل؛ جنتيلي، مايكل؛ ويليامز، لوري؛ بيك، كينت؛ ستوم، مايكل (2016). "النشر المستمر في فيسبوك وOANDA" . وقائع المؤتمر الدولي الثامن والثلاثين لهندسة البرمجيات (ICSE-C) لعام 2016، الصادر عن IEEE/ACM . تاريخ الاسترجاع: 1 يونيو 2026 .
  13. 1 2 جونز، كابرز (يونيو 2008). "قياس احتمالات العيوب وكفاءة إزالتها" (ملف PDF) . كروس توك، مجلة هندسة برمجيات الدفاع. مؤرشف من الأصل (ملف PDF) بتاريخ 6 أغسطس 2012. تم الاطلاع عليه بتاريخ 5 أكتوبر 2010 .
  14. جونز، كابرز؛ إيبرت، كريستوف (أبريل 2009). "البرمجيات المدمجة: حقائق وأرقام ومستقبل". مجلة الكمبيوتر . 42 (4): 42-52 . رمز Bibcode : 2009Compr..42d..42E . doi : 10.1109/MC.2009.118 . S2CID 14008049 . 
  15. جيسون كوهين (2006). أفضل الأسرار المحفوظة لمراجعة أكواد الأقران (نهج حديث. نصائح عملية) . سمارت بير إنك. ISBN 978-1-59916-067-2.
  16. تشيرفونكا، جاك؛ غريلر، ميكايلا؛ تيلفورد، جاك (2015). "مراجعات الكود لا تكتشف الأخطاء. كيف تُبطئنا أفضل ممارسات مراجعة الكود الحالية". المؤتمر الدولي السابع والثلاثون لهندسة البرمجيات IEEE/ACM لعام 2015 (ملف PDF) . المجلد 2. الصفحات 27-28 . doi : 10.1109/ICSE.2015.131 . ISBN   978-1-4799-1934-5. S2CID 29074469 . تم الاسترجاع بتاريخ 28-11-2020 . 
  17. مانتيلا، إم في؛ لاسينيوس، سي. (2009). "ما أنواع العيوب التي يتم اكتشافها بالفعل في مراجعات الكود؟" (ملف PDF) . معاملات IEEE في هندسة البرمجيات . 35 (3): 430-448 . Bibcode : 2009ITSEn..35..430M . CiteSeerX 10.1.1.188.5757 . doi : 10.1109/TSE.2008.71 . S2CID 17570489. تاريخ الاسترجاع : 21 مارس 2012 .  
  18. بيلر، م؛ باتشيلي، أ؛ زايدمان، أ؛ يورغنز، إ (مايو 2014). "مراجعات الكود الحديثة في مشاريع المصادر المفتوحة: ما المشاكل التي تحلها؟" (ملف PDF) . وقائع المؤتمر الحادي عشر حول استخراج البيانات من مستودعات البرمجيات (MSR 2014) . تاريخ الاسترجاع: 2015-09-02 .
  19. سي، هارفي؛ فوتا، لورانس (1 ديسمبر 2004). "هل لفحص الكود الحديث قيمة؟" (ملف PDF) . unomaha.edu . مؤرشف من الأصل (ملف PDF) بتاريخ 28 أبريل 2015. تم الاطلاع عليه بتاريخ 17 فبراير 2015 .
  20. بوسو، أميانغشو؛ غريلر، ميكايلا؛ بيرد، كريس (مايو 2015). "خصائص مراجعات الشفرة المفيدة: دراسة تجريبية في مايكروسوفت" (ملف PDF) . المؤتمر الثاني عشر لعام 2015 IEEE/ACM حول استخراج البيانات من مستودعات البرمجيات . تاريخ الاسترجاع: 28 نوفمبر 2020 .
  21. 1 2 كيميرر، سي إف؛ بولك، إم سي (17-04-2009). "أثر مراجعات التصميم والبرمجيات على جودة البرمجيات: دراسة تجريبية قائمة على بيانات PSP". معاملات IEEE في هندسة البرمجيات . 35 (4): 534-550 . Bibcode : 2009ITSEn..35..534K . doi : 10.1109/TSE.2009.27 . hdl : 11059/14085 . S2CID 14432409 . 
  22. "مقاييس مراجعة التعليمات البرمجية" . مشروع أمان تطبيقات الويب المفتوحة . مؤرشف من الأصل بتاريخ 9 أكتوبر 2015. تم الاطلاع عليه بتاريخ 9 أكتوبر 2015 .
  23. "أفضل الممارسات لمراجعة أكواد النظراء" . سمارت بير . برمجيات سمارت بير. مؤرشف من الأصل بتاريخ 9 أكتوبر 2015. تم الاطلاع عليه بتاريخ 9 أكتوبر 2015 .
  24. بيسانت، ديفيد ب. (أكتوبر 1989). "طريقة فحص ثنائية لتحسين إنتاجية البرمجة" . معاملات IEEE في هندسة البرمجيات . 15 (10): 1294-1304 . doi : 10.1109/TSE.1989.559782 . S2CID 14921429. تاريخ الاسترجاع: 9 أكتوبر 2015 . 
  25. جانسل، جاك (فبراير 2010). "دليل عمليات التفتيش على الكود" (ملف PDF) . مجموعة جانسل . تم الاطلاع عليه بتاريخ 5 أكتوبر 2010 .
  26. بالاشاندران، فيبين (2013). "تقليل الجهد البشري وتحسين الجودة في مراجعات أكواد النظراء باستخدام التحليل الثابت التلقائي وتوصيات المراجعين". المؤتمر الدولي الخامس والثلاثون لهندسة البرمجيات (ICSE) لعام 2013. الصفحات 931-940 . doi : 10.1109/ICSE.2013.6606642 . ISBN  978-1-4673-3076-3. S2CID 15823436 . 
  27. VDC Research (2012-02-01). "الوقاية الآلية من العيوب لجودة البرمجيات المدمجة" . VDC Research . تم الاطلاع عليه بتاريخ 2012-04-10 .