یکی از جذابترین و پیچیدهترین خصوصیات کیفی در توسعه نرمافزار ایمنی (Safety) است. این خصوصیت از آن لحاظ جذاب است که توسعه نرمافزار و خصوصاً معماری نرمافزار را دچار چالش میکند و این برای افرادی چون من، بسیار جذاب است. روشهای متداول با توجه به ماهیت ایمنی، توان پاسخگویی به چنین مسئلهای را بسادگی ندارند و از طرفی ایمنی جزء معدود خصوصیات کیفی است که تاثیر دوگانه در توسعه نرمافزار دارد، هم بر محصول تاثیر میگذارد و هم بر فرآیند توسعه محصول. ایمنی بهعنوان یک اصل وارد چرخه توسعه نرمافزار میشود و بسادگی نمیتوان از سد آن گذشت، گاهی چرخه توسعه نرمافزار را تا حد بسیار زیادی دستخوش تغییرات میکند تا تضمینی بر ایمنی باشد، از طرفی معماری ایمن را بر نرمافزار اجبار مینماید تا محصولی ایمن توسعه داده شود.
در برخورد با نرمافزارهای ایمن (Safety-critical Software) اولین و مهمترین موضوع ایجاد چرخه ایمن توسعه نرمافزار است. استانداردهایی در این زمینه ارائه شده است که از آن جمله میتوان به IEC 61508 اشاره نمود. این استاندارد، به چند بخش تقسیم میشود که یک بخش آن مربوط به خصوصیاتی است که میبایست در توسعه نرمافزار ایمن به آن توجه نمود. طبیعتاً این استانداردها تنها در حوزه ایمنی متمرکز هستند و بالاجبار باید با متدولوژیهای متداول توسعه نرمافزار ترکیب شوند یا به طریقی دیگر سفارشی شوند. تاکیدی که اغلب این استانداردها دارند به دو بخش اصلی تقسیم میشوند:
- چگونه مخاطرات را شناسایی و رفع کنید
- چگونه نرمافزار یا سختافزار ایمن تولید کنید
در بخش اول، روشهایی برای شناسایی مخاطرات و تبدیل آنها به نیازمندیهای ایمنی ارائه میشود و در بخش دوم قواعد، اصول، رویهها یا ویژگیهایی برای مراحل مختلف تولید توصیه میشود که بستگی به سطح ایمنی (Safety Integrity Level) مورد نیاز باید رعایت شود. بدین ترتیب شما با روشهایی باید مخاطرات را شناسایی نموده که این میتواند یک نظم یا فرآیند در توسعه نرمافزار باشد و آنها را تبدیل به نیازمندی نمایید در چرخه توسعه محصول دیده شود و در کنار آن باید قواعد ایمنی در تولید را رعایت نمایید. بهعنوان مثال استفاده از زبان C با رعایت نکات ایمنی همچون قواعد MISRA C یا استفاده از مدلسازی مبتنی بر ریاضی همانند روشهای صوری یا پترینت.
پس از توسعه چرخه ایمن، مفهوم دیگر ظاهر میشود و پیش روی شماست و آن معماری ایمن است. حال شما یک خصوصیت کیفی بهنام ایمنی دارید که باید همانند سایر خصوصیات کیفی با آن برخورد نمایید. برای در نظر گرفتن این خصوصیت کیفی میبایست الگوها و تاکتیکهای خاص آن را در نظر بگیرید. یکی از افرادی که در این زمینه، تحقیقات خوبی داشته است Tim Kelly استاد دانشگاه یورک میباشد که مجموعهای از الگوها و تاکتیکهای ایمنی را شناسایی و بهصورت مستقل دستهبندی نمود. در واقع، وابستگی این خصوصیت کیفی به خصوصیاتی نظر Availability، Reliability و Fault Tolerance سبب شده است که اغلب ایمنی بهعنوان خصوصیت کیفی مجزا دیده نشود و این تفکر که یک معماری ایمن میتواند متمرکز بر خصوصیت کیفی ایمنی باشد، اغلب نادیده گرفته میشود.
در کاری که اخیراً برای توسعه چرخه نرمافزار ایمن و سفارشیسازی RUP انجام دادم، سعی کردم قواعد و بندهای استاندارد را به فعالیتهای اجرایی در متدولوژی تبدیل نمایم. این کار با استفاده از EPF (رجوع شود به اینجا) انجام شده است. طبیعتاً چون حق استفاده و نشر در اختیار شرکت میباشد، تنها نمونهای از آن در اینجا قرار داده میشود.
برای مطالعه بیشتر در این زمینه میتوانید استاندارد 61508 را از اینجا دانلودکنید. همچنین میتوانید از ابزاری و کیتهای آماده همچون Rational DOORS kit for ISO 26262 and IEC 61508 نیز استفاده نمایید، البته اگر بودجه شما کافی است.
مهدی جان، جالب بود.