بزرگترین باگهای نرم افزاری تاریخ
همانند زندگی انسانها، در محاسبات کامپیوتری هم با اشکالات و باگهای زیادی مواجه میشویم. از مشکلات کوچک مثل باگ در بازیهای ویدئویی تا باگها و ایرادات بزرگ سیستم عاملی.
در طول تاریخ به علت مشکلات به وجود آمده در نرمافزارها، هزینههای مالی و جانی زیادی به وجود آمده است. در این مقاله به بررسی این باگهای نرمافزاری عجیب و بزرگ خواهیم پرداخت.
۱٫ سال ۱۹۸۰ – اشتباه آمریکا در تشخیص موشکهای روسیه
شرح ماجرا: از ژانویه سال ۱۹۷۹ تا ژوئن سال ۱۹۸۰ حدود ۳۷۰۰ بار احتمال حمله موشکی شوروی سابق به آمریکا توسط رادارها و ماهوارههای نیروهای امنیتی آمریکا گزارش میشود. ۵ بار احتمال حمله زیاد دانسته شده و جلسه سران ارشد نظامی برگزار میشود ولی تمامی موارد فقط یک باگ و خطا بوده است و نیروهای امریکایی حدودا یک سال و نیم سرکار بودهاند!
خطا چه بود؟ فرستادن پیام خطا توسط سیستم ارتباطی با سه بیت انجام میشد. به این صورت که پیام پایه ۰۰۰ بوده و برای هر پیغام یک ۲ به جای هر ۰ جایگزین میشد. برای حصول اطمینان از مشغول به کار بودن سیستمهای ارتباطی، پیغام ۲۰۰ ارسال و برای اعلام حمله پیغام ۰۰۲ ارسال میشد، که یه علت وجود مشکل در تراشههای سیستم ارتباطی به جای پیغام ۲۰۰، هر بار ۰۰۲ نشان داده میشد.
۲٫ سال ۱۹۸۳ – افسر شوروی که از جنگ جهانی سوم جلوگیری کرد
شرح ماجرا: در ۲۳ سپتامبر ۱۹۸۳، افسر روسی استانیسلاو پتروف در مقر کنترل سیستمهای رادار ماهوارهای بود. او متوجه حمله موشکی آمریکا با موشک بالستیک قارهپیما روی صفحه نمایش میشود. سپس شلیک موشک دوم و سوم و چهارم و پنجم هم گزارش میشود. او روی صفحه نمایش فقط پنج موشک میبیند، در حالی که برای حمله به دشمن باید چند صد موشک ارسال کرد. او با تسلط بر اعصاب خود، دکمه قرمز اعلام خطر را فشار نمیدهد و از بروز جنگی جهانی جلوگیری میکند.
خطاچه بود؟ نرمافزار ماهوارههای روس بازتاب نور خورشید پس از برخورد با ابرها را ، به نور دریافتی پس از برخاستن موشکها تعبیر کرده و حمله موشکی گزارش میکنند.
۳٫ سال ۱۹۹۱ – ناتوانی سامانه موشکی پاتریوت در مقابل سامانهSCUD
شرح ماجرا: در طول جنگ خلیج در دهه ۹۰ میلادی، ارتش عراق از سامانه پرتاب موشک SCUD که توسط روسیه ساخته شده بود، استفاده میکرد و آمریکا هم از سامانه ضد موشک پاتریوت بهره میبرد. شب ۲۵ فوریه سال ۱۹۹۱، سامانه موشکی پاتریوت در ظهران عربستان از ردگیری موشک عراقی عاجز میماند و موشک به سنگر نیروهای آمریکایی برخورد کرده و ۲۸ سرباز آمریکایی کشته و ۹۸ سرباز مجروح میشوند.
خطا چه بود؟ محاسبه زمان رسیدن موشک به هدف، بر اساس سرعت موشک و زمان رویت توسط آخرین رادار صورت میگیرد. مقدار سرعت به صورت یک عدد طبیعی و یک عدد اعشاری و مقدار زمان به صورت یک عدد طبیعی یا یک عدد صحیح پیوسته در سیستم قرار میگیرد.
الگوریتم محاسبه زمان رسیدن موشک به هدف، نیاز به بررسی مقدار زمان و سرعت به طور همزمان دارد. در حالی که رجیسترهای کامپیوترهای پاتریوت ۲۴ بیتی هستند. بنابراین و با توجه به این که زمان بر حسب دهم ثانیه مطرح میشد، هنگامی که دقت محاسبه زمان خیلی بالا میرفت، سیستمهای پاتریوت دچار مشکل میشد و راهحلی که برای این مشکل در نظر گرفته شده بود، ریستارت شدن و راهاندازی مجدد سیستم بود که SCUD از همین مشکل استفاده کرد.
۴٫ سال ۱۹۹۷ – مشکل کشتی Yorktown
شرح ماجرا: در دهه ۹۰ میلادی، نیروی دریایی آمریکا شروع به ساخت کشتی هوشمند کرد. برای نیل به این هدف، کشتی YorktownUSS را با شبکهای از کامپیوترهای Pentium Pro 200MHZ همراه با سیستم عامل ویندوز NT تجهیز کرد. در ۲۱ سپتامبر ۱۹۹۷، این کشتی در نزدیکی دماغه Charles دچار مشکل شد و به بندر برگشت.
خطا چه بود؟ همیشه تقسیم بر صفر کاری سخت بوده و جواب آن همیشه مبهم کننده بوده، حتی برای مایکروسافت!
یکی از خدمه کشتی YorktownUSS ، عدد صفر را وارد دیتابیس ویندوز NT میکند و هنگامی که دیتابیس میخواهد تقسیم بر صفر انجام دهد،Overflow اتفاق میافتد و سیستم کشتی دچار مشکل میشود. جالب این است که مایکروسافت برای این مشکل راهحلی نگذاشته بود.
۵٫ سال۱۹۶۲ – انهدام سفینه کاوشگر Mariner1
شرح ماجرا: ۲۲ جولای ۱۹۶۲، سفینه کاوشگر Mariner1 برای سفری اکتشافی عازم مریخ میشود ولی پنج دقیقه بعد، از مسیر خود منحرف میشود و ناسا برای جلوگیری از سقوط این کاوشگر روی زمین و بروز فاجعه انسانی، با موشک آن را نابود میکند. هزینه این شکست ۱۸٫۵ میلیون دلار بوده که در زمان حاضر حدود ۱۵۰ میلیون دلار میشود، پس شکست گرانی بود!
خطا چه بود؟ مشکل از اشتباهی در علامتگذاری در قسمتی از نرمافزار بود، اشتباه در حذف یک علامت بالانویس که در متن به یک تابع اشاره میکرد. بدون این تابع، برنامه به شدت به تغییرات جزئی سرعت و ارسال موشک واکنش نشان داد. در واقع مشکل از دانش موشک سازی نبود.
۶٫ سال۱۹۹۸– سقوط Mars Climate Orbiter در مریخ
شرح ماجرا: در سال ۹۸، دو کاوشگر ناسا، Mars Polar Lander و Mars Climate Orbiter ، با ماموریت تحقیق بر روی آب و هوا و تعیین مقدار دی اکسید موجود در جو به مریخ و همچنین بررسی وجود آب در این سیاره فرستاده شدند. قرار بود Mars Climate Orbiter در مدار مریخ بچرخد و Mars Polar Lander در یکی از قطبهای مریخ بنشیند. مشکل زمانی بوجود آمد که Mars Climate Orbiter وقتی میخواست در مدار خود قرار بگیرد، در اتمسفر مریخ بسیار پایین آمد و سقوط کرد.
خطا چه بود؟ یکی از پیمانکاران ناسا از سیستم اندازهگیری بریتانیایی(Imperial) استفاده میکرد ولی ناسا از سیستم اتدازهگیری متریک بهره میبرد و همین باعث میشود کاوشگر در تشخیص فشار هوا اشتباه کند. کارها به صورت جداگانه درست بود اما در کنار هم خیر.
هزینه اشتباه؟ ۳۳۰ میلیون دلار!
۷٫ سال ۱۹۸۵ – ۱۹۸۷– نقص در نرم افزار دستگاه پرتودرمانى Therac-25
شرح ماجرا: دستگاه پرتودرمانى Therac-25 توسط آژانس انرژى اتمى کانادا (AECL) به کمک CGR فرانسه ساخته شد. این دستگاه برای بیماران مبتلا به سرطان استفاده میشد. این دستگاه با دو حالت عمل میکرد: حالت اول، که باید از یک پرتوی الکترونی با قدرت کم(ذرات بتا) را استفاده میشد و حالت دوم که برای درمان بیماریهای شدیدتر بود و در آن اشعه X با قدرت بسیار بالا کاربرد داشت. در طی دو سال، تعدادی از افرادی که با این دستگاه تحت درمان قرار گرفته بودند، دچار مسمومیت پرتویی شدند و تعدادی هم جان خود را از دست دادند.
خطا چه بود؟ نرمافزار تامین انرژی آن از مدل قبلی این دستگاه که تک حالته بود، اقتباس شده بود و نتیجهای که بر اساس تغییر سریع دو حالت به وجود میآمد مشخص نبود. وقتی این اتفاق میافتاد، نرمافزار دستورالعمل هر دو حالت را ارسال میکرد و هر کدام که زودتر میرسید اجرا میشد. این مشکل باعث برخورد اشعه X به بیمارانی شد که به طور کامل محافظت نشده بودند. حاصل این اتفاق مسمومیت پرتویی شش نفر بود که پنج نفرشان جان خود را از دست دادند.
۸٫ سال ۱۹۹۰– از کار افتادن شبکه AT & T
شرح ماجرا: در سال ۱۹۹۰ میلادی، حدود ۷۵ میلیون تماس در سراسر امریکا بدون جواب ماند چرا که یکی از ۱۱۴ مرکز سوئیچ شرکت مخابراتی AT & T دچار مشکل و خاموش شده بود. وقتی مشکل مرکز رفع شد، پیغامی به۱۱۳ مرکز دیگر فرستاد و آنها را نیز به همین مشکل گرفتار کرد.
خطا چه بود؟ مقصر مشکل، یک خط از کدهای نرم افزار اعلام شد که به باور خیلیها در آن سال، پس از ارتقای نرم افزار بوجود آمده بود.
۹٫ سال ۲۰۰۶– هواپیمای Airbus A380
شرح ماجرا: پروژه Airbus A380 ، یکی از بزرگترین معاهدات تجاری اروپا بود و در آن بنا میشود نصف هواپیما را شرکت فرانسوی French Dassault Aviation و نصف دیگر آن را کارخانه هامبورگ انجام دهد. وقتی خواستند دو نیمه هواپیما را به هم متصل کنند، متوجه شدنداتصالات داخلی دو نیمه با هم متفاوت است.
خطا چه بود؟ شرکت فرانسوی برای طراحی این هواپیما از نسخه به روز شده نرم افزار CATIA استفاده میکرد ولی کارخانه آلمانی از نسخه قدیمیتر این نرمافزار بهره میبرد. این مشکل نهایتا شناسایی و حل شد ولی ایرباس را بیشتر از یک سال عقب انداخت. ضرر و زیان مالی این شرکت در این پروژه را نمیتوان تخمین زد.
۱۰٫ سال ۱۹۹۸ – انفجار موشک Ariane 5
شرح ماجرا: سال ۱۹۹۶، در نخستین پرواز جدیدترین موشک حامل ماهواره بدون سرنشین اروپا(آریان ۵)، این موشک در گویان فرانسه منفجر شد. در آن زمان، سازمان فضایی اروپا هزینه ساخت موشک را هشت میلیارد دلار برآورد کرده بود. به علاوه این موشک، یک ماهواره ۵۰۰ میلیون دلاری را حمل میکرد که دانشمندان قصد داشتند به کمک آن تأثیر بادهای خورشیدی را بر میدان مغناطیسی زمین بررسی کنند.
خطا چه بود؟ موشک آریان ۵ از نرمافزار آریان ۴ استفاده میکرد و موتورهای سریعتر آریان ۵ به مشکلی برخوردند که در مدل پیشین، شناسایی نشده بود .۷/۳۶ ثانیه پس از پرتاب، هنگامی که سیستم هدایت قصد داشت اطلاعات سرعت جانبی موشک را از فرمت ۶۴ بیتی به ۱۶ بیتی تبدیل کند، با توجه به اینکه عدد بسیار بزرگ بوده، خطای سرریز(overflow error) اتفاق میافتد. موشک یک کامپیوتر پشتیبان هم داشت. اما این کامپیوتر هم چند میلیثانیه بعد دچار مشکلی مشابه شد، چون کامپیوتر دوم دقیقا از همان نرمافزار کامپیوتر اول استفاده میکرد.
۱۱٫ سال ۲۰۰۰ – باگ Millennium ، مشکل هزاره
شرح ماجرا: سابقا طراحان نرمافزار عادت داشتند تا از یک عدد دو رقمی برای نمایش تاریخ در نرمافزارهای خود استفاده کنند، مثلا برای نمایش ۱۹۹۸ از ۹۸ استفاده میکردند. به همین علت کامپیوترها در آغاز سال ۲۰۰۰ نمیدانستند که ۰۰ ، ۱۹۰۰ است یا ۲۰۰۰٫ بر اساس گزارشها هزینه برطرف کردن این مشکل و اصلاح آن (چهار رقمی کردن عدد نمایشدهنده تاریخ) بالغ بر ۴۰۰ میلیارد یورو بوده است. این یعنی فاجعه!