مهندسی نیازمندیهای نرمافزار
نیازمندیها
مهندسی نیازمندیها
بر اساس استاندارد ایزو 29148[2] «مهندسی نیازمندیها[3]» کارکردی است میان رشتهای که بین حوزههای کارفرما و تأمینکنندگان واسط میشود تا نیازمندیهایی که باید توسط سیستم، نرمافزار یا سرویسِ مورد نظر برآورده شوند را ایجاد و نگهداری کند. مهندسی نیازمندیها، کشف، استخراج، توسعه، تحلیل و تعیین روشهای تصدیق، صحهگذاری، اطلاعرسانی، مستندسازی و مدیریت نیازمندیها را مدنظر قرار میدهد. نتیجهی مهندسی نیازمندیها، سلسلهمراتبی از نیازمندیها است که:
- درک توافقشدهای را میان ذینفعان (مانند: کارفرمایان، کاربران، مشتریان، بهرهبردارها و تأمینکنندگان) ممکن میسازد؛
- در برابر نیازهای دنیای واقعی، صحهگذاری شده و میتوان آن را پیادهسازی کرد؛
- مبنایی را برای تصدیق طرحها و پذیرش راهکارها ارائه میدهد.
سلسلهمراتب نیازمندیها ممکن است در قالب یک یا چند توصیف (مشخصات) نیازمندیها بازنمایی شود.
مهندسی نیازمندیها و تحلیل کسبوکار
نقطهی شروع فعالیتهای مهندسی نیازمندیها، تحلیل کسبوکار[4] است. برای ارائهی پیشنهاد بهترین راهکار برای یک مسألهی کسبوکار، مهم است که پیش از هر کاری، مسأله را به درستی تعریف کنیم.
تحلیلِ کسبوکار دیسیپلینی است که تمرکز آن شناسایی نیازهای کسبوکار یک سازمان و تعیین راهکارهایی است که این نیازها و سایر مسائل و مشکلات کسبوکار را برآورده میکند. این راهکارها ممکن است دربرگیرندهی توسعهی سیستمهای نرمافزاری و یا سختافزاری، طراحی مجدد فرایندهای کسبوکار، تغییرات سازمانی و مانند آن باشد. اهداف و نیازهای کسبوکار که در حین تحلیل کسبوکار شناسایی شدهاند، به نیازمندیهای راهکار منجر میشوند. از این رو، مهندسی نیازمندیها را میتواند در امتداد و یا به عنوان بخشی از فرایند تحلیل کسبوکار قلمداد کرد. خروجی مهندسی نیازمندیها، طراحی و راهکار است که پس از آن، پیادهسازی و تست انجامشده و نهایتاً راهکار در اختیار مشتری قرار میگیرد.
راهکار پیادهسازیشده در طول زمانْ دستخوش تغییر و دگرگونی میشود. بازار و کسبوکار دگرگون میشوند، فناوری همواره در حال تغییر و تحول است و ممکن است مدلهای ارتباطی جدیدی درون کسبوکار آشکار شود. به همین دلیل است که تحلیل کسبوکار – و مهندسی نیازمندیها – در سرتاسر چرخهی عمر راهکار تداوم مییابد. بعد از عرضهی راهکار، تحلیل کسبوکار در جستجوی بهبودهایی است که منجر به افزایش سهم بازار، بهبود کارایی عملیاتی یا بهدست آوردن مزیت رقابتی میشود. ممکن است نیازهای جدیدی در حوزهی کسبوکار ظاهر شود. این نیازهای جدید بهوسیلهی مهندسی نیازمندیها توسعهیافته و راهکارهای جدید و بهبودیافتهای پیشنهاد میشود یا یک راهکار موجود با ویژگیهای جدید و بهتر، گسترش مییابد. برای هر یک از نیازهای شناساییشده در کسبوکار این چرخه از ابتدا، مجدداً آغاز میشود.
مفاهیم کلیدی در مهندسی نیازمندیها
برای درک بهتر مهندسی نیازمندیها و ورودیها و خروجیهای اصلی آن باید یکسری اصطلاحات و مفاهیم دیگر را نیز تعریف کنیم.
ورودی اصلی مهندسی نیازمندیها، مسألهی کسبوکار[5] است. یک مسألهی کسبوکار، شرحی است از آنچه که مشتری میخواهد به منظور تحقق یا بهبود فرایندهای کسبوکارش، انجام دهد.
هدف فرایندهای مهندسی نیازمندیها، تعریف یک راهکار[6] برای یک مسألهی کسبوکارِ تعریفشده است. «راهکار» پاسخی است به نیازهای یک مشتری. این نیازها عموماً در قالب نیازمندیهای کسبوکار بیان میشوند و ورودیهای مهندسی نیازمندیها محسوب میگردند. یک راهکار ممکن است یک سیستم نرمافزاری، سرویس، یک فرایند کسبوکار جدید یا بهبود یافته و مانند آن باشد. به طور کلی، یک راهکار در واقع، پیادهسازیِ نیازمندیها است.
خروجی یک فرایند توسعه (تولید)، محصول[7] نامیده میشود. محصول ترکیبی است از نرمافزار، سختافزار و سایر خروجیهای فرایند تولید مانند مستندات.
یک نیازمندی[1] را میتوان به صورت بیانِ مستندشدهی نیازِ یک کاربر یا سایر ذینفعان تعریف کرد؛ نیازی که با حل یک مسألهی کسبوکار و یا دستیابی به یک هدف مشخص، برآورده میشود.
معمولاً، نیازمندیها با هم و به همراه اطلاعات پشتیبان – یعنی، خصیصههای نیازمندیها[8]، مستندسازی میشوند. مهمترین خصیصههای یک نیازمندی، عبارت است از: تعهد[9]، که بیانگر درجهی التزام برای تحقق و برآوردهشدن نیازمندی است و اولویت[10]، که بیانگر ضرورت و فوریت نیازمندی از منظر کسبوکار است.
تعریف و مستندسازی شفاف[11] و بدون ابهامِ[12] نیازمندیها بسیار مهم است. نیازمندیها بیانگر انتظارات مشتریاند و بنیان توسعه، تولید و تست راهکار را فراهم میکنند. نیازمندیها مرزهای راهکار و محدودهی عرضه[13] را تعریفکرده و ممکن است به عنوان مبنایی برای ارائهی خدمات قراردادی بهکار گرفته شوند.
نیازمندیها ممکن است نه تنها به محصول که به فرایند کسبوکار یا یک ساختار سازمانی نیز مرتبط باشند. برای نمونه، هدف یک پروژه ممکن است نه تنها پیادهسازی مؤلفههای نرمافزاری، بلکه همچنین بهبود خودِ فرایندهای کسبوکار سازمان نیز باشد. بنابراین، با درنظر گرفتن این موضوع، میتوان نیازمندیها را به دو گونهی نیازمندیهای محصول[14] و نیازمندیهای فرایند[15] طبقهبندی کرد.
نیازمندیهای فرایند، یا قیودی[16] هستند بر فرایند توسعهی راهکار (بیانگر اینکه چگونه باید توسعهی محصول را انجام دهیم) یا نیازمندیهایی هستند مرتبط با فرایندهای کسبوکار، در حالی که، نیازمندیهای محصول، به خودِ محصول مرتبط هستند و «چیزی که باید انجام شود» را بیان میکنند. انواع خاص نیازمندیهای محصول عبارتست از: نیازمندیهای کارکردی و نیازمندیهای غیرکارکردی. نیازمندیهای کارکردی محصول[17] آنچه را که محصول باید انجام دهد، توصیف میکنند؛ در واقع، بیانگر کارکردهای[18] محصولاند. نیازمندیهای غیرکارکردی محصول[19]، این که محصول چگونه باید کارکردهایش را انجام دهد، توصیف میکنند (به عبارتی، خصیصههای کیفیت محصول[20].)
در حین کار با نیازمندیها در سطوح مختلف، بسیار مهم است که قابلیت ردگیری[21] را تعریف و حفظ[22] کنیم. قابلیت ردگیری ارتباطی[23] است که میان دستاوردها[24] در سطوح مختلف انتزاع[25] وجود دارد. برای مثال، میان نیازمندیهای کسبوکار و نیازمندیهای راهکار. قابلیت ردگیری همچنین ممکن است بین نیازمندیها و سایر دستاوردها مانند موارد آزمون[26] نیز سودمند باشد.
به عنوان یکی از مقصودهای اصلی نیازمندیها که بیان انتظارات و نیازهای ذینفعان در ارتباط با راهکار برنامهریزیشده است، نیازمندیها باید ارزش واقعی را در قالب مزایایی که برای ذینفعان دربرخواهند داشت، بیان کنند. برای کاستن از ریسکِ داشتن مشکلاتی با نیازمندیها و به منظور اطمینان از بهترین کیفیت ممکن راهکار آینده، باید مجموعهای از معیارهای کیفی برای نیازمندیها[27] بهکار گرفته شود. معیارهای کیفیت نیازمندیها بیان میکنند که هر نیازمندی باید صحیح[28]، امکانپذیر برای پیادهسازی[29]، غیرمبهم[30] و قابل صحتسنجی[31] (امکانپذیری برای صحتسنجی اینکه آیا به درستی پیادهسازی شده است) باشد.
یک راهکار عمومی برای چککردن و نظارت[32] بر کیفیتِ نیازمندیها، اعتبارسنجی[33] و صحتسنجی است. اعتبارسنجی معمولاً با پشتیبانی یک مشتری انجام میشود و هدف آن تأیید[34] این موضوع است که نیازمندیها یا توصیف نیازمندیها، بهدرستی بیانگر نیازهای مشتری هستند. صحتسنجی مقایسهای است میان یک محصول میانی با توصیف[35] آن به منظور تعیین اینکه آیا محصول در تطابق با توصیفهای آن، تولید شده است یا خیر. تکنیک عمومی برای اعتبارسنجی و صحتسنجی، انجام انواع بازبینی[36] است که در آن چکلیستهای عمومی که معیارهای کیفی عمده و آزمونها را دربرمیگیرد، مورد استفاده قرار میگیرد.
کلّ فرایند توسعه و مدیریت نیازمندیها برای ایجاد یک راهکار، مهندسی نیازمندیها نامیده میشود. مهندسی نیازمندیها دیسیپلینی است که به کشف، گردآوری[37] و مدیریت نیازمندیهای محصول آینده میپردازد.
برای آشنایی بیشتر با مفهوم نیازمندی و آنچه در قالب نیازمندیهای نرمافزار باید کشف و تعریف شود میتوانید کتاب «اکتشاف نیازمندیهای نرمافزار» را مرور کنید.
برای آشنایی با تجربههای موفق در مهندسی نیازمندیها میتوانید کتاب «مهندسی نیازمندیهای نرمافزار در عمل» را مرور کنید.
[28] Correct
[29] Feasible
[30] Unambiguous
[31] Verifiable
[32] Monitoring
[33] Validation
[34] Verification
[35] Specification
[36] Reviews
[37] Collecting
[14] Product requirements
[15] Process requirements
[16] Constraints
[17] Product functional requirements
[18] Functions
[19] Product non-functional requirements
[20] Quality attributes
[21] Traceability
[22] Maintain
[23] Connection
[24] Artifacts
[25] Abstraction level
[26] Test Cases
[1] Requirements
[2] ISO/IEC/IEEE 29148:2011
[3] Requirements engineering
[4] Business Analysis
[5] Business problem
[6] Solution
[7] Product
[8] Requirements attributes
[9] Commitment
[10] Priority
[11] Clearly
[12] Unambiguously
[13] Scope of delivery