مهندسی نیازمندیها فرآیندی است که شناسایی، استخراج، تجزیه و تحلیل، مشخص کردن، اعتبارسنجی و مدیریت نیازها و انتظارات نهادهای مختلف برای یک سیستم نرمافزاری را شامل میشود. فرآیند مهندسی نیازمندیها فرآیندی تکراری است که شامل چندین مرحله از جمله زیر میباشد:
- شناسایی نیازمندیها
- القا کردن نیازمندیها
- تجزیه و تحلیل نیازمندیها
- مشخص کردن نیازمندیها
- اعتبارسنجی نیازمندیها
- مدیریت نیازمندیها
- شناسایی نیازمندیها
- القا نیازمندیها
- تجزیه و تحلیل نیازمندیها
- مشخصکردن نیازمندیها
- اعتبارسنجی نیازمندیها
- مدیریت نیازمندیها
- ابزار مورد استفاده در مهندسی نیازمندی ها
- مزایا و معایب فرایند مهندسی نیازمندیها
- نیازمندیهای عملکردی (Functional Requirements)
- نیازمندیهای غیرعملکردی (Non-Functional Requirements)
شناسایی نیازمندیها
شناسایی نیازمندیها یکی از مراحل اصلی در فرآیند مهندسی نیازمندیها است. در این مرحله، تمام نیازمندیهایی که برای سیستم نرمافزاری مورد نظر لازم است شناسایی و جمعآوری شوند. این مرحله شامل جمعآوری نیازمندیهای کاربران، نیازمندیهای تجاری، نیازمندیهای قانونی و مقرراتی، نیازمندیهای فنی و دیگر نیازمندیهایی که برای اجرای سیستم نرمافزاری مورد نیاز است میباشد. این مرحله اولین گام در فرآیند توسعه نرمافزار است و در صورت عدم جمعآوری کامل و دقیق نیازمندیها، ممکن است با مشکلات و تأخیرهایی در مراحل بعدی فرآیند روبرو شوید.
القا نیازمندیها
این فرآیند شامل جمع آوری اطلاعات درباره نیازها و انتظارات نهادهای مختلف برای سیستم نرمافزاری است. در این مرحله، مصاحبه، نظرسنجی، گروه های تمرینی و دیگر تکنیک هایی مانند اینها برای جمع آوری اطلاعات از نهادهای مختلف استفاده می شوند.
تجزیه و تحلیل نیازمندیها
در این مرحله، با تحلیل اطلاعاتی که در مرحله القای نیازمندیها جمع آوری شدهاند، اهداف و هدف کلی سیستم نرمافزاری مشخص میشوند. همچنین، هر محدودیت یا محدودیتی که ممکن است بر روی توسعه سیستم نرمافزاری تأثیر بگذارد، شناسایی میشود.
مشخصکردن نیازمندیها
در این مرحله، نیازمندیهای شناسایی شده در مرحله تحلیل به صورت واضح، پایدار و بدون ابهام مستند سازی میشوند. همچنین، نیازمندیها به گروههای مدیریتپذیر تقسیم و اولویت بندی میشوند. در این مرحله، باید از ابزارها و فرمتهای معینی برای مستندسازی استفاده شود تا نیازمندیها به صورت یکپارچه و قابل فهم باشند. هدف این مرحله اطمینان حاصل کردن از آن است که تمامی نیازمندیهایی که برای سیستم نرمافزاری مورد نظر لازم است در یک سند واحد، شفاف و قابل فهم مستند شوند.
اعتبارسنجی نیازمندیها
در این مرحله، اعتبارسنجی نیازمندیها با هدف اطمینان از کامل و صحیح بودن آنها انجام میشود. در این مرحله، نیازمندیها برای اطمینان از آنکه کامل، سازگار و دقیق هستند، بررسی میشوند. همچنین، اطمینان حاصل میشود که نیازمندیها قابل آزمون هستند و به نیازها و انتظارات صاحبنظران پاسخ میدهند. در این مرحله، از روشهای مختلفی مانند بررسیهای فنی، جلسات با صاحبنظران و تستهای مستقیم استفاده میشود تا از صحت و سلامت نیازمندیها اطمینان حاصل شود. هدف این مرحله، جلوگیری از وجود نیازمندیهای نادرست و اشکال در فرآیند توسعه نرمافزار است.
مدیریت نیازمندیها
در این مرحله، مدیریت نیازمندیها در طول دوره عمر توسعه نرمافزار انجام میشود، از جمله ردیابی و کنترل تغییرات و اطمینان از اینکه نیازمندیها هنوز معتبر و مربوط به پروژه هستند. در این مرحله، تمامی تغییراتی که در نیازمندیها ایجاد میشوند، پیگیری و کنترل میشوند و اطمینان حاصل میشود که همه تغییرات مورد نیاز با توجه به نیازهای پروژه اعمال شدهاند. همچنین، بررسی میشود که نیازمندیها هنوز هم در مسیر موفقیت پروژه هستند و مربوط به نیازهای کنونی صاحبنظران هستند یا نیاز به تغییر دارند. هدف این مرحله، ایجاد و نگهداری یک روند مدیریت نیازمندیهای موثر و کارآمد است که در پیشبرد موفقیت پروژه نرمافزاری کمک کند.
مرحله مهمی که در چرخه عمر توسعه نرمافزار ایفا میکند، فرآیند مهندسی نیازمندیها است. این فرآیند به کمک شناسایی، استخراج، تحلیل، مشخصسازی، اعتبارسنجی و مدیریت نیازمندیهای مختلفی که برای یک سیستم نرمافزاری لازم است، به تأمین نیازها و انتظارات صاحبنظران و همچنین توسعه سیستم نرمافزاری به موقع، در چارچوب بودجه و با کیفیت مطلوب کمک میکند. این فرآیند، به کمک تعامل با صاحبنظران و تحلیل نیازمندیهایشان، به طور دقیق میتواند نیازمندیهایی را که لازم است در سیستم نرمافزاری پیادهسازی شود، شناسایی و مشخص کند. بدون فرآیند مهندسی نیازمندیها، ساخت یک سیستم نرمافزاری میتواند به مشکل برخورد کند و نتیجه نهایی نمیتواند تأمین نیازها و انتظارات صاحبنظران باشد. در نتیجه، مرحله مهندسی نیازمندیها یکی از مهمترین مراحل در چرخه عمر توسعه نرمافزار است که به واقع تأمین اهداف پروژه نرمافزاری کمک میکند.
فرآیند مهندسی نیازمندیها، شامل تعریف، مستندسازی و حفظ نیازمندیها است. این فرآیند شامل جمعآوری و تعریف خدماتی است که توسط سیستم ارائه میشود. مهندسی نیازمندیها، به کارگیری دقیق و اصول شناختهشده، روشها، ابزارها و نمادهایی است که برای توصیف رفتار پیشنهادی یک سیستم و محدودیتهای مرتبط با آن استفاده میشوند.
این فرآیند مسئولیت تعریف و توصیف نیازمندیهای مربوط به یک سیستم را بر عهده دارد و با استفاده از روشها و ابزارهای مربوط، این نیازمندیها را به طور دقیق و مستند شده تعریف میکند و به مرور زمان، آنها را حفظ میکند.
بدون فرآیند مهندسی نیازمندیها، پروژههای نرمافزاری ممکن است با مشکلاتی مواجه شوند و نتیجهای که به دنبال آن خواهد بود، نمیتواند با انتظارات و نیازمندیهای صاحبنظران سازگار باشد. در نتیجه، مهندسی نیازمندیها فرآیندی مهم و ضروری در توسعه نرمافزار است که با استفاده از روشهای مستندسازی و تعریف نیازمندیهای دقیق، به توسعه سیستم نرمافزاری کمک میکند.
ابزار مورد استفاده در مهندسی نیازمندی ها
- observation report
- Questionnaire ( survey , poll )
- Use cases
- User stories
- Requirement workshop
- Mind mapping
- Role playing
- Prototyping
مزایا و معایب فرایند مهندسی نیازمندیها
مزایا و معایب فرایند مهندسی نیازمندیها در مهندسی نرمافزار عبارتند از:
مزایا:
- بهبود کیفیت: فرایند مهندسی نیازمندیها اطمینان میدهد که سیستم نرمافزاری برای برآورده کردن نیازها و انتظارات سهامداران توسعه یافته است که باعث بهبود کیفیت نرمافزار میشود.
- کاهش هزینهها و زمان توسعه: فرایند مهندسی نیازمندیها کمک میکند تا هزینهها و زمان توسعه کاهش یابد زیرا سیستم نرمافزاری بر اساس نیازها و انتظارات سهامداران طراحی و توسعه میشود.
- بهبود ارتباط با سهامداران: فرایند مهندسی نیازمندیها به تیم توسعه کمک میکند تا درک بهتری از نیازها و انتظارات سهامداران پیدا کند و ارتباط بهتری با آنها برقرار کند.
معایب:
- هزینه و زمان: فرایند مهندسی نیازمندیها زمان و هزینه زیادی را میطلبد و در صورتی که به درستی انجام نشود، میتواند به تأخیر در توسعه سیستم و هزینههای اضافی منجر شود.
- محدودیتها: در فرایند مهندسی نیازمندیها، محدودیتهای مختلفی مانند محدودیتهای زمانی، بودجه و منابع وجود دارند که باید رعایت شوند.
- تغییرات: تغییرات در نیازها و انتظارات سهامداران ممکن است در طول فرایند توسعه به وجود آید و باعث ایجاد مشکلات برای تیم توسعه شود.
در کل، نیازمندیهای نرمافزار باید در دو دسته بزرگ دستهبندی شوند:
نیازمندیهای عملکردی (Functional Requirements)
این نوع نیازمندیها به جنبههای عملکردی نرمافزار مربوط میشوند.
آنها عملکردها و قابلیتهای موجود در سیستم نرمافزار را تعریف میکنند.
برخی مثالهای این نوع نیازمندیها:
- ارائه گزینه جستجو به کاربر برای جستجوی صورتحسابهای مختلف.
- ارسال گزارشات به مدیریت توسط کاربر.
- امکان تقسیم کاربران به گروههای مختلف و اختصاص دادن حقوق دسترسی به هر گروه.
- پیروی از قوانین کسب و کار و عملکردهای مدیریتی.
- توسعه نرمافزار با حفظ سازگاری با نسخههای پایینتر.
نیازمندیهای غیرعملکردی (Non-Functional Requirements)
در این دسته از نیازمندیها، نیازمندیهایی که به جنبههای غیرعملیاتی نرمافزار مرتبط هستند قرار میگیرند. این نیازمندیها ویژگیها و خصوصیاتی را بیان میکنند که انتظار میرود نرمافزار آنها را داشته باشد. به عنوان مثال:
- امنیت
- ثبت ورودیها در فایل
- ظرفیت حافظه مصرفی
- قابلیت پیکربندی
- عملکرد سیستم در بار زیاد
- هزینه نصب و استفاده
- قابلیت همکاری با سیستمهای دیگر
- انعطافپذیری
- بازیابی پس از بروز حوادث ناگوار
- دسترسی به نرمافزار توسط افراد با معلولیت