استخراج نیازمندی‌ها
استخراج نیازمندی‌ها به عنوان اولین گام از مهندسی نیازمندی‌ها به فرایند دریافت نیازمندی‌های یک سیستم نرم‌افزاری از ذینفعان سیستم بدون توجه به لزوم و امکان اجرای آن‌ها اطلاق می‌شود. استخراج نیازمندی‌ها در میان جامعه پژوهشگران و صنعتگران به عنوان یکی از فعالیت‌های حیاتی از فرایند مهندسی نیازمندی‌ها شناخته شده است. بعبارتی بدست آوردن نیازمندی‌های صحیح و کامل یکی از مراحل حیاتی اما سخت از توسعه یک پروژه نرم‌افزاری به شمار می‌رود. این موضوع در تحقیق انجام شده توسط هافمن و لِنر بر روی 15 تیم مهندسی نیازمندی که با هدف شناسایی مهمترین و موثرترین تجربیات موجود که منجر به موفقیت یک پروژه می‌‌شود، انجام شد، به خوبی قابل لمس است. نتایج تحقیق حاکی از آن است که استخراج کارای نیازمندی‌ها در میان مهمترین تجربیات مفید شناسایی شده در حوزه مهندسی نیازمندی می‌باشد.
استخراج نیازمندی‌ها به تنهایی یک فرایند پیچیده می‌باشد که خود شامل زیر فعالیت‌هایی است که برای انجام هر یک تکنیک‌های مختلفی وجود دارد. این پیچیدگی سبب شده تا بروز خطا در حین انجام آن به دلیل تاثیر پذیری از معضلات ارتباطی (نظیر ابهام) بیشتر شود. در واقعیت استخراج نیازمندی‌ها یک فرایند چند جنبه‌ای و تکراری است که تا حد زیادی وابسته به مهارت‌های ارتباطی مهندس نیازمندی و میزان همکاری ذینفعان سیستم است. یکی دیگر از مشکلاتی که پیشروی تیم توسعه سیستم است، موضوع توافق بر روی نیازمندی‌های استخراج شده است. بعبارتی ممکن است موضوعی که کاملا برای یک گروه از ذینفعان واضح است، برای گروهی دیگر مبهم و ناپذیرفتنی باشد .
از یک دیدگاه گام‌های زیر را میتوان در این فرایند در نظر گرفت :گام‌های فوق را می‌توان به عنوان یک راه‌حل در استخراج نیازمندی‌ها در نظر گرفت. این درحالی است که دستور العملی با جزئیات بیشتر توسط سامرویل و همکارانش ارائه شده که شامل گام‌های زیر است:فرایند استخراج نیازمندی بسیار وابسته به دامنه‌ای که سیستم در آن مستقر خواهد شد، ویژگی‌های اصلی پروژه، سازمان و محیط می‌باشد. در واقعیت میزان بودجه و برنامه زمانی پروژه بر روی فرایند و نحوه انجام آن تاثیر بسزایی دارد. ساختار و بلوغ سازمان در نحوه استخراج نیازمندی‌ها تاثیر گذار است. اصولا این فرایند در سطوح انتزاع بالا و با مشخص کردن اهداف، قابلیت‌ها و محدودیت‌های اصلی سیستم هدف و یا یک تعریف سطح بالا از مساله‌ای که باید حل شود، شروع می‌شود. به منظور توسعه این تعریف اولیه از سیستم، ذینفعان و دیگر منابع نیازمندی‌‌‌ شناسایی شده و در انجام فرایند استخراج استفاده می‌شوند. این نیازمندی‌های استخراج شده اولیه به عنوان پایه‌ای برای استخراج نیازمندی‌های بیشتر در رویکردی تکراری یا افزایشی مورد استفاده قرار خواهند گرفت . در بیشتر موارد فرایند استخراج نیازمندی‌ها به صورت افزایشی در جلسه‌های مختلف، به صورت تکراری برای افزایش سطوح بیان جزئیات یا حداقل به صورت موازی با سایر فرایندهای توسعه، صورت می‌گیرد. در دنیای واقعی اتمام فرایند معمولا با توجه به محدودیت‌های بودجه‌ای و زمانی مشخص می‌شود. خروجی این فرایند یک مجموعه از نیازمندی‌های جزئی شده که در قالب مدل‌های تشریحی و یا تجویزی تهیه شده‌اند، می‌باشد .
استخراج نیازمندی‌ها یک فعالیت جهت شناسایی نیازهای ذینفعان سیستم می‌باشد که لازم است طی یک فرایند مهندسی پالایش و در نتیجه‌ آن ساخت نیازمندی صورت پذیرد. بدین ترتیب شکل زیر نقشه راه این فعالیت را نشان می‌دهد. برای پردازش نقشه راه ارائه شده با استفاده از مهندسی نیازمندی طی مدل شکل ذیل نیازمندی‌های مستخرجه تحت عنوان آرزو (wish) به نیازمندی قابل اندازه‌گیری در سیستم‌های محاسباتی تبدیل می‌گردند.
این فرایند با یک مجموعه‌ از نیازمندی‌های مورد تقاضای کاربران که در واقع مجموعه‌ای از آرزوهای کاربران در خصوص سیستم تحت توسعه‌ می‌‎باشد، شروع می‌شود. نکته مهم در خصوص همه آروزها این است که قابلیت اجرایی ندارند. بعبارتی تکنولوژی لازم برای اجرای آن‌ها وجود ندارد. در واقع وقتی این لیست آرزوها تحت فرایند مهندسی قرار می‌گیرد و هر یک از آرزوها معیارهای صلاحیت و عدم صلاحیت را برآورده می‌کند به فرم "نیاز" تبدیل می‌شوند. نیازها آن دسته از آرزوهای کاربران هستند که تحت فرایندهای مهندسی نیازمندی در قالب نیاز تهیه شده‌اند. اصولا نیازها در اولویت اجرای نیازمندی‌های سیستم کاربردی (+URPS) قرار نمی‌گیرند. بعبارتی نیازها به خودی خود به صرفه نیستند. برای تبدیل نیازها به نیازمندی‌های کاربر، بایستی تغییراتی بر روی این لیست نیازها در فرایند مهندسی نیازمندی‌ها صورت گیرد تا ساختار نیاز به ساختار نیازمندی تبدیل شود. کلیه موارد فوق در فاز دامنه مساله از فرایند مهندسی نیازمندی‌ها قرار می‌گیرد. سپس در فاز دامنه راه‌حل، ابتدا چگونگی برآورده شدن نیازمند‌ی‌های کاربر توسط سیستم مورد نظر و سپس چگونگی برآورده شدن نیازمندی‌های سیستم توسط یک طراحی خاص مورد توجه قرار می‌گیرد. بدین ترتیب کلیه نیازمندی‌های استخراج شده در طی این فاز به عنوان نیازمندی‌های سیستم در نظر گرفته می‌شوند .