ده باگ مشهور دنیای علوم کامپیوتر

ترجمه و تالیف : ابوالفضل باغشاهی
تاریخ انتشار : 12 مرداد 99
خواندن در 5 دقیقه
دسته بندی ها : برنامه نویسی

احتمالا نام‌هایی همچون deadlock (بن‌بست)،‌ race condition (شرایط مسابقه‌ای)، تقسیم بر صفر و حلقه‌ی بی‌نهایت به عنوان باگ‌های دنیای برنامه‌نویسی به گوشتان خورده است و ممکن است راجع به هر یک اطلاعاتی داشته باشید. چیزی که مشخص است این است که هر کدام از اتفاقات بالا، می‌توانند برنامه‌ی شما را به کلی دچار مشکل کنند و شما را نیز کلافه کنند؛ البته تا زمانی که آن‌ها را بتوانید پیدا کنید و برطرف‌شان کنید.

درست است که امروزه برنامه نویسی به یکی از مشاغل جذاب تبدیل شده است و به نظر کار دوست‌داشتنی‌ای می‌رسد، اما سختی‌های خود را نیز دارد که باگ‌ها یکی از کلافه‌کننده‌ترین‌ها در بین این سختی‌ها هستند که گاهی اوقات می‌توانند بسیار طاقت‌فرسا شوند. پس بهتر است شما به عنوان یک برنامه‌نویس، از ابتدا سعی در نوشتن برنامه‌ای بدون باگ داشته باشید تا در آینده به مشکلات بزرگ‌تری بر نخورید. به این نکته نیز توجه داشته باشید که گاهی اوقات باگ‌ها می‌توانند تاثیرات عظیمی مانند پولدار کردن یک نفر و فقیر کردن دیگری را داشته باشند یا حتی در در مواردی باعث مرگ افراد شوند!

در ادامه‌ی این مقاله قصد داریم که به چند مورد از معروف‌ترین باگ‌های نام آشنا در تاریخ دنیای برنامه نویسی اشاره کنیم و تاثیرات آن‌ها بر زندگی افراد و کسب‌وکارهای آن‌ها را، به طور خلاصه، مورد بررسی قرار دهیم.

۱. شکست  Ariane ۵ Rocket

(سال ۱۹۹۶)- انفجار Ariane ۵ یکی از پرهزینه‌ترین اشتباهات نرم‌افزاری تاریخ است. این راکت مشهور اروپایی برای پرتاب ماهواره مورد استفاده قرار می‌گرفته و با هزینه‌ی ۸ میلیاردی ساخته شده بود. این راکت تنها پس از ۴۰ ثانیه از پرتابش، منفجر شد. دلیل این اتفاق نیز زیر سر integer overflow (سرریز شدن عدد صحیح) بوده است که باگی شایع در دنیای برنامه نویسی است. این مورد به ما نشان می دهد که توجه به میزان حافظه‌ی مورد نیاز یک متغییر، در زمان تعریف (declare) آن، خیلی مهم است. در واقع اشتباه به وجود آمده در برنامه‌ی این راکت نیز، دقیقا مربوط به همین نکته بوده است. کد این برنامه با استفاده از Ada نوشته شده بود. بعد از تحقیقات تیم نیز مشخص شد که یک خط از کد، سعی در تبدیل کردن یک عدد ۶۴ بیتی به یک عدد ۱۶ بیتی دارد. هزینه‌ی این اشتباه به ظاهر کوچک، از دست دادن ۳۷۰ میلیون دلار بوده.

۲. باگ Y2k 

(سال ۱۹۹۹)- طی دهه‌ی ۱۹۶۰، مهندسین از رویکرد استفاده از کدهای دو رقمی برای نشان دادن عدد سال، پیروی می‌کردند؛ چرا که بیش‌تر آن‌ها تصور می‌کردند که استفاده از عدد ۱۹ در ابتدای متغییرهای مربوط به سال، کاری بیهوده است که باعث اتلاف حافظه می‌شود. برای مثال برای نشان دادن سال ۱۹۷۰ از ۷۰ استفاده می‌کردند. تمام کدهایی که به این نحو نوشته شده بودند، تا روز ۳۱ دسامبر ۱۹۹۹ بدون هیچ ایرادی کار‌ می‌کردند. اما بعد از آخرین روز قرن ۱۹ میلادی و در روز یک ژانویه‌ی سال ۲۰۰۰،‌ تمام این برنامه‌ها به مشکل خوردند و این مشکل نیز به دلیل استفاده از دو رقم آخر سال بوده. در واقع بسیاری از کامپیوترها، روز ۱ ژانویه‌ی ۲۰۰۰ را به عنوان روز ۱ ژانویه‌ی ۱۹۰۰ نمایش دادند. این باگ به نام Y2K یا باگ هزاره مشهور شد. (Y2k نیز معادل Year 2 Kilo به معنای سال دو هزار است) این باگ نیز مشکلات فراوان کوچک و بزرگی به‌‌وجود آورد؛ از تعجب کاربران کامپیوتر از تاریخ کامپوترشان تا مشکلات بزرگ‌تر مثل بروز اشکال در محاسبات نرخ سود بانکی که پایه‌ی روزشمار داشته‌اند و یا مشکلاتی در مراکز تکنولوژی مانند نیروگاه‌ها و حمل و نقل. به دنبال بروز این باگ، میلیاردها دلار برای آپگرید سیستم کامپیوترها در سرتاسر دنیا خرج شد.

3. شکست موشک Patriot 

(سال ۱۹۹۱)- وقتی یک اشتباه در عملیات ارتشی رخ دهد، ممکن است جان صدها انسان به خطر بیوفتد. در طول جنگ اول خلیج فارس، موشک Patriot آمریکایی برای تشخیص و ره‌گیری یک حمله‌ی موشکی Scud در نظر گرفته شده بود. این عملیات تکیه‌ی زیادی بر زمان‌بندی دقیق داشت. به دلیل یک ارور گرد کردن در سیستم، این موشک زمان اشتباهی را محاسبه کرد و در ره‌گیری موشک Scud عراقی که به سمت پادگان ارتشی واقع در عربستان سعودی در حال حرکت بود، ناموفق بود. نتیجتاً در این عملیات ناموفق از سوی آمریکا، ۲۸ سرباز آمریکایی جان خود را از دست دادند و صد نفر نیز مجروح شدند.

۴. AT&T

(سال ۱۹۹۰)- AT&T قصد آپگرید نرم‌افزاری پیچیده‌تر از نرم‌افزاری کنونی خود را به امید بهبود تماس ما بین فواصل دور، داشت؛ ولی یک اشتباه نتیجه‌ی معکوس داد و شبکه‌ی‌ آن‌ها از دسترس خارج شد. در پی این اتفاق، مشترکان این کمپانی طی ۹ ساعت قادر به برقراری تماس بین فواصل دور نبودند.۷۵ میلیون تماس تلفنی از دست رفت و ۲۰۰ هزار رزرو هوایپمایی دچار مشکل شد. باگی که در این مورد رخ داد، race condition در کد سوئیچ کردن بین مراکز بود. این باگ درون یک شرط switch که درون یک حلقه بود رخ داد. AT&T به دلیل این مشکل بزرگ، ۶۰ میلیون دلار از دست داد.

۵. Gangnam Style یوتیوب را شکست داد

وقتی این موزیک ساخته می‌شد، هیچ کس فکرش را هم نمی‌کرد که ممکن است میلیاردها بازدید به دست آورد و از محدوده‌ی اعداد ۳۲ بیتی علامت‌دار، خارج شود. بزرگ‌ترین عدد علامت‌داری را که می‌توان توسط 32 بیت به نمایش گذاشت، عدد ۲۱۴۷۴۸۳۶۴۷ است. همان‌طور که حدس می‌زنید،‌ این باگ از عبور کردن تعداد بازدیدهای این موزیک وید‌ئوی کره‌ای از مرز عدد ذکر شده، ناشی شده است. در نهایت کاربران با عدد زیر روبرو می‌شدند:

ده باگ مشهور دنیای علوم کامپیوتر

بعدها گوگل برای رفع این مشکل از اعداد ۶۴ بیتی برای نمایش تعداد بازدید ویدئوهای یوتیوب استفاده کرد.

۶. باگ نرم‌افزار Mariner 1

(سال ۱۹۹۶)- از فضاپیمای Mariner 1 به عنوان یکی از گران‌ترین شکست‌های تاریخ یاد می‌شود. این فضاپیما برای پرواز به سیاره‌ی زهره (ونوس) طراحی شده بود ولی پیش از پرواز این فضاپیما، آنتن راهنمای روی صفحه‌ی آن دچار مشکل شد و این فضاپیما از مسیر برنامه‌ریزی شده برای پرواز خود، منحرف شد. دلیل بروز این مشکل نیز missing overbar بوده است. این اتفاق تنها ناشی از حذف یک خط ربط بوده و در پی آن، فضاپیما سیگنال راهنمای اشتباهی را دریافت کرد. خسارت بر جای مانده از این اشتباه، ۱۸ میلیون دلار در سال ۱۹۶۲ بوده. Arthur C Clarke، نویسنده‌ی داستان‌ها علمی تخیلی، Mariner 1 را اینگونه توصیف کرده: نابود شده توسط گران‌ترین خط ربط تاریخ.

۷. orbiter اقلیمی مریخ NASA

(سال ۱۹۹۸)- به دلیل وجود واحدهای متفاوت برای اندازه‌گیری آب و هوای مریخ، این orbiter بعد از سفری ۲۸۶ روزه از زمین، نابود شد. این پروژه با هزینه‌ی ۱۲۵ میلیون دلاری برای مطالعه‌ی سیاره‌ي مریخ و اقلیم آن، طراحی شده بود. طی این عملیات، پس از قطع شدن ارتباط، این orbiter با زاویه‌ای نامناسب وارد جو مریخ شد. در صورتی که تنها باید وارد مدار این سیاره می‌شد. دلیل این اتفاق نیز نرم‌افزار کنترل‌کننده‌ی orbiter بوده که از واحد اندازه‌گیری امپراطوری (بریتانیایی) به جای استفاده از واحدهای متریک استاندارد (نیوتونی) استفاده می‌کرده و این دو واحد با یک‌دیگر تداخل کردند.

۸. باگ Pentium FDIV

 (سال ۱۹۹۳)- کامپیوترهای زیادی از تکنولوژی Intel استفاده می‌کنند و این شرکت همیشه به عنوان سازنده‌ی خوب پردازنده‌ها به شمار می‌رفته است؛ اما یک باگ در پردازنده‌ی Pentium x86 توسط استاد ریاضی، Thomas Nicly، در سال ۱۹۹۳ پیدا شد. این اشکال ریاضیاتی تقسیم اعداد اشاری در یک محدوده‌ی خاص بوده. برای مثال تقسیم 4195835.0/3145727.0 نتیجه‌ی 1.33374 را به همراه داشته. در صورتی که باید نتیجه‌ی 1.33382 را به‌دست می‌آورده. در واقع اشتباهی 0.006% در به‌دست آوردن جواب درست. البته تمام پرازنده‌ها این مشکل را نداشتند و ۵ میلیون مورد از آن‌ها که این مشکل را داشتند، شناخته شدند. Intel نیز قبول کرد که این چیپ‌ها را درصورتی که مشتری بتواند وجود این ایراد درپردازنده‌اش را ثابت کند، جایگزین کند. بعدتر نیز این کمپانی بزرگ، تمامی چیپ‌های افراد شکایت کننده، را تعویض کرد و این اتفاق ضرر ۴۷۵ میلیون دلاری به آن‌ها وارد کرد.

۹. ارور Paypal

(۲۰۰۷) بزرگ‌ترین پردازشگر پرداخت‌ها در دنیا نیز با خطای برنامه نویسی مواجه شده است. Paypal تصادفا آقای Chris Teynolds را تبدیل به پولدارترین فرد دنیا کرد. آن هم با دارایی ۹۲ quadrillion دلار. Paypal به اشتباه این مقدار را به اعتبارات این آقا اختصاص داده بود که با توجه به آن، دارایی‌های این فرد چندین هزار برابر ثروت حاصل از تولید ناخالص کل سیاره‌ی زمین بود. این ارور عجیب به سرعت شناسایی شد و اعتبار Paypall این فرد نیز بلافاصله به صفر که مقدار درست آن بود، تبدیل شد.

۱۰. باگ ماشین‌حساب ویندوز

ماشین حساب ویندوز نیز یک باگ دارد. این باگ تقریبا در تمامی ویندوزهای XP, Vista, 8 قابل لمس است و همین الان می‌توانید آن‌ را امتحان کنید. ماشین حساب ویندوز را باز کنید، سپس عدد ۴ را نوشته و ریشه‌ی آن را حساب کنید. عدد دو به شما نشان داده می‌شود. حال آن را منهای ۲ کنید؛ به جای عدد صفر عدد دیگری را در خروجی ماشین حساب خواهید دید. این عدد بسته به ورژن‌های مختلف ویندوز، متفاوت است. نهایتا نیز مایکروسافت این باگ را تشخیص داد و در ویندوز ۱۰، آن را اصلاح کرد.

گردآوری و تالیف ابوالفضل باغشاهی
آفلاین
user-avatar

Front-End

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
آفلاین
user-avatar
شهریار
1 روز پیش

سلام خسته نباشید
ممنون از ترجمه خوب و رون ولی لطفا کلمه خلیج و اصلاح کنید ب خلیج فارس

آنلاین
user-avatar
حسام موسوی
24 ساعت پیش

درود بر شما
سپاس از اینکه به این داستان اشاره کردید
در مقاله اصلی خلیج ذکر شده که نمیدونیم خلیج فارس هست یا نه
اما خوب الان قرار دادیم خلیج فارس