زومیت
دنیای نرم افزار
نقص نرمافزاری در دستگاه درمان سرطان، جان بیماران را گرفت
سالها پیش، حذف قفلهای سختافزاری و یک خطای برنامهنویسی در دستگاه پرتودرمانی، منجر به تابش بیشازحد پرتو به بیماران و مرگ سه نفر شد.
دستگاه پرتودرمانی Therac-25، ساخت شرکت کانادایی Atomic Energy of Canada Limited (AECL)، به یکی از نمونههای برجسته شکست نرمافزار در سیستمهای ایمنی-حیاتی تبدیل شده است. این دستگاه از اوایل دهه ۱۹۸۰ برای معالجه سرطان به کار گرفته میشد و قادر به تولید پرتوهای الکترونی و ایکس بود؛ اما ترکیبی از خطاهای نرمافزاری و کاستیهای طراحی، در نهایت به چندین مورد پرتودهی بسیار شدید انجامید.
بین سالهای ۱۹۸۵ تا ۱۹۸۷، حداقل شش حادثه مرتبط با Therac-25 گزارش شد. در برخی موارد، بیماران به جای دوز تجویز شده، مقادیر بسیار بالاتری از پرتو را دریافت کردند. در پی این حوادث، سه بیمار جان خود را از دست دادند و سه نفر دیگر دچار آسیبهای جدی شدند.
یکی از مشکلات اساسی Therac-25، حذف برخی قفلهای ایمنی سختافزاری بود که در مدلهای پیشین وجود داشتند. این امر باعث شد وظیفه جلوگیری از شرایط خطرناک تا حد زیادی به نرمافزار محول شود. یکی از خطاهای اصلی نیز یک «شرایط رقابتی» بود؛ به این معنی که ترتیب بسیار سریع رویدادهای مختلف میتوانست برنامه را به حالتی ببرد که سیستم تصور کند دستگاه در وضعیت ایمن قرار دارد، در حالی که آماده تولید پرتو اشتباه بود.
پیامهای خطای مبهم نیز به وخامت اوضاع افزود. به عنوان مثال، برخی اپراتورها با کدهایی مانند «Malfunction 54» مواجه میشدند و چون دستگاه ظاهراً درمان را متوقف کرده بود، تصور میکردند مشکل جدی نیست. بررسیهای بعدی همچنین نشان داد که برخی خطاها در ابتدا توسط سازنده به راحتی قابل بازتولید نبودند و گزارشهای کاربران نیز به اندازه کافی جدی گرفته نشدند.
اهمیت پرونده موبایل دوستان Therac-25 تنها به تعداد قربانیان آن محدود نمیشود؛ این مورد به یک مطالعه کلاسیک در مهندسی نرمافزار، ایمنی سیستمهای حساس و اخلاق حرفهای تبدیل شد. بررسی معروف نانسی لوسون و کلارک ترنر درباره این حوادث نشان داد که مشکل صرفاً یک باگ منفرد نبود، بلکه مجموعهای از ضعفها در طراحی، آزمایش، مستندسازی، رابط کاربری و فرآیند واکنش به گزارشهای کاربران در وقوع فاجعه نقش داشتند.
امروزه، Therac-25 یادآور یک اصل اساسی در مهندسی سیستمهای حساس است: نمیتوان ایمنی را صرفاً به نرمافزار سپرد و انتظار داشت یک خطای برنامهنویسی هیچ پیامدی نداشته باشد. در پزشکی، هوانوردی و سایر حوزههای حیاتی، نرمافزار باید در کنار لایههای مستقل سختافزاری، آزمونهای دقیق و سازوکارهای مطمئن نظارتی قرار گیرد.