etree logo

الخطأ البرمجي الذي أسقط صاروخ!

في 4 يونيو لعام 1996م أطلقت وكالة الفضاء الأوروبية صاروخ “اريان 5” بتكلفة 7 مليار دولار، الصاروخ الذي فشل في الصمود لمدة 45 ثانية بعدما انحرف عن مسار رحلته وانفجر.

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

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

ولكي أسهّل التفاصيل على غير المبرمجين سأقوم بتبسيط الفكرة بشكل أكبر.

في الحواسيب يتم تخزين المعلومات ومعالجتها على شكل بايتات (Bytes)، حيث يحتوي البايت الواحد على 8 بتّات (Bits) لا تقبل سوى قيمة واحدة إما 0 أو 1، وتقوم لغات البرمجة بحجز قيم في الذاكرة لتخزين المتغيرات في الذاكرة كالصناديق، حيث لكل صندوق حجم معيّن يتم تخزين القيم المناسبة لحجمه، فعلى سبيل المثال المتغيّر integer 16 bit يحجز 4 بايت في الذاكرة ، أي يستطيع حفظ:  n16-1 أي إلى القيمة  32,767± ، وهكذا مع جميع أنواع الصناديق الأخرى، فعندما تريد حفظ قيمة صغيرة يمكنك استخدام صندوق صغير، والعكس صحيح.. فاستخدامك صندوق كبير لقيمة صغيرة يهدر من ذاكرة جهازك.

الكارثة

حوّل المبرمجون قيمة أحد الصناديق من نوع float 64 bit والتي تتسع حتى الرقم 9,223,372,036,854,775,806± إلى صندوق من نوع integer 16 bit لا يتسع لأكثر من قيمة 32,767±، فتم تقريب الرقم ذو التسع عشرة خانة إلى خمسة خانات فقط، فاختلفت الحسابات الدقيقة جداً وأدّت إلى انحراف الصاروخ وانفجاره.

فيديو لانفجار الصاروخ https://www.youtube.com/watch?v=gp_D8r-2hwk

خاتمة

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

سليمان الناصر

Contact us

Based in Riyadh, Saudi Arabia
Tel: +966 11 2161065

Address: Grand Center Riyadh 13314 - 3rd Floor, Office 4

Working Hours: 9:00 A.M. – 5:00 P.M Sunday till Thursday