تخطي إلى المحتوى الرئيسي
شكرًا لزيارتك — تصفّح الموقع، أو أخبرنا برأيك.خدماتناالمدونةاتصل بناسجّل في Mostutor — أول 1000 مسجّل يحصلون على 3 أشهر مجانًا
علوم حاسوب GCSE والمستوى المتقدم

اصطياد الأخطاء: أخطاء برمجية شهيرة كلَّفت الملايين

Sudershan Soniبقلم Sudershan Soni 28 July 2026 7 دقائق قراءة

علامة ترقيم واحدة مفقودة دمَّرت صاروخاً بقيمة ملايين الدولارات، ثوانٍ بعد الإطلاق. خطأ تقريب كاد يُحطِّم افتتاح بورصة أوراق مالية. الأخطاء البرمجية الأغلى في تاريخ البرمجيات ليست تقريباً أبداً أخطاءً دراماتيكية ومعقدة — إنها صغيرة ويسهل تجاهلها، صادف وقوعها في المكان الخاطئ بالضبط.

أساسيات GCSE

مارينر 1: علامة الترقيم التي كلَّفت صاروخاً

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

DO 5 I = 1.10intended: DO 5 I = 1,10 (a loop) — one typo (. instead of ,)DO5I = 1.10read as: create a variable and assign it 1.10 — no loop at all

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

لماذا تُسبِّب الأخطاء الصغيرة أكبر الكوارث

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

سؤال بنمط الامتحان

يكتب مبرمج حلقة تكرارية يُقصد بها معالجة جميع العناصر العشرة في قائمة (مفهرسة من 0 إلى 9)، لكنه يكتب 'for i in range(1, 10)' بدلاً من 'for i in range(0, 10)'. اشرح نوع هذا الخطأ وما سيكون تأثيره. [3 درجات]

إظهار الإجابة النموذجية وتوزيع الدرجات
  1. هذا خطأ إزاحة بمقدار واحد (off-by-one) (درجة واحدة)
  2. بما أن الفهرسة تبدأ من 0، فإن الحلقة كما كُتبت تبدأ من 1 ولا تعالج أبدًا العنصر عند الفهرس 0 — يتم تخطي العنصر الأول في القائمة بصمت (درجة واحدة)
  3. لا يزال العنصر الأخير (الفهرس 9) يُعالج بشكل صحيح، لأن range(1, 10) يتضمن بالفعل 9 — يعمل البرنامج دون تعطل، وينتج فقط نتيجة غير مكتملة بصمت (درجة واحدة)

ما يركّز عليه الممتحن: حدد بدقة أي فهرس تم تفويته من خلال مقارنة النطاق المقصود بالنطاق المكتوب فعليًا، بدلاً من إعطاء تعريف عام فقط لـ«خطأ الإزاحة بمقدار واحد».

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

ما الذي غيَّرته هذه الإخفاقات فعلياً

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

أسئلة شائعة

هل كان خطأ الواصلة في مارينر 1 حرفاً واحداً فعلاً؟

النسخة الأكثر تكراراً من القصة هي واصلة مفقودة (أو خط علوي، في تدوين FORTRAN الأصلي) في معادلة توجيه، مما تسبب في إساءة تفسير برنامج الصاروخ لصيغة وإصدار أوامر توجيه خاطئة — دُمِّر الصاروخ عمداً بعد أقل من 5 دقائق من الإطلاق لمنعه من الاصطدام بمنطقة مأهولة. يتجادل بعض المؤرخين حول التفصيل التقني الدقيق، لكن الدرس الأساسي — خطأ صغير يسهل تفويته يُسبِّب فشلاً كارثياً — موثَّق جيداً.

لماذا تحدث أخطاء "الانزياح بواحد" كثيراً؟

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

ما الذي يمنع فعلياً أخطاء كهذه من الوصول إلى الإنتاج اليوم؟

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

تقييمات وآراء القراء

قيّم هذا المقال في عدة جوانب مختلفة — تقييمك يساعد القراء الآخرين، ويساعدنا على التحسّن.

المحتوى
الصور
العرض
وضوح اللغة
الفائدة

0/3000

هل كان هذا المقال مفيداً؟

أخبرنا برأيك — تصحيح، سؤال لم تتم الإجابة عنه، أو موضوع تودّ أن نغطيه لاحقاً.

تفضّل التحدث مباشرة؟ احجز مكالمة فيديو مجانية في الوقت الذي يناسبك: 15 دقيقة لسؤال سريع، و30 دقيقة لغير ذلك. تظهر المواعيد بتوقيتك المحلي.

Sudershan Soni

عن الكاتب

Sudershan Soni

المؤسس والمدرّس الرئيسي في موستاك — مدرّس رياضيات وعلوم وعلوم حاسوب و STEM حاصل على الماجستير بخبرة تتجاوز 20 عاماً، يدرّس الطلاب من اختبار +11 و GCSE حتى A-Level وما بعده، عبر الإنترنت حول العالم.

اقرأ الملف الكامل

هل تريد علوم حاسوب تبني فهماً حقيقياً؟

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