خطأ برمجي

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

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

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

الآثار 

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

قد يكون للأخطاء نتائج خطيرة للغاية. الأخطاء التي شابت برنامج مراقبة جهاز العلاج الإشعاعي Therac-25 كانت المسؤولة مباشرة عن وفاة بعض المرضى في ثمانينيات القرن العشرين. في عام 1996، فقدت وكالة الفضاء الأوروبية صاروخ اريان 5 (1ما يعادل مليار دولار أمريكي) بعد أقل من دقيقة من إطلاقه، وذلك بسبب خلل في برنامج التوجيه على متن الحاسوب. في يونيو 1994، تحطمت طائرة سلاح الجو الملكي البريطاني من طراز شينوك ما أسفر عن مقتل 29 شخص. في البداية ألصق خطأ بالطيار، ولكن تحقيق Computer Weekly كشف وبأدلة كافية لإقناع مجلس اللوردات أن خطأ برمجي في حاسوب الطائرة هو سبب الحادثة.

في عام 2002، خلصت دراسة من المعهد الوطني للمعايير والتكنولوجيا بتكليف من وزارة التجارة الأمريكية أن للعيوب أو الأخطاء البرمجية تأثيرا هاما لدرجة تكبيد الاقتصاد الأمريكي خسائر قدرت بـ 59 مليار دولار أمريكي سنويا أي نحو 0.6 في المئة من إجمالي الناتج المحلي.

الوقاية 

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

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

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

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

 تطوير منهجيات هناك عدة مخططات لإدارة نشاط مبرمج، بحيث يتم تقليل من عدد الأخطاء.

مراجع 

أخطاء البرمجة
حواسيب
خوارزميات
مصطلحات حوسبة