مهندسی و تحلیل نیازمندی ها، حلقه گمشده تولید محصولات با کیفیت

تحقیقات کاربر | مهندسی و تحلیل نیازمندی ها
تحقیقات کاربر | مهندسی و تحلیل نیازمندی ها


آیدین ضیاپور، مشاور مدیریت محصول و دیزاین اسپرینت
پروفایل لینکدین: https://www.linkedin.com/in/aidinziapour

مقدمه

چارلز کترینگ، مخترع آمریکایی [1958-1856]
چارلز کترینگ، مخترع آمریکایی [1958-1856]


مشکلی که به خوبی تشریح شود، مشکلی است که نیمی از آن حل شده است. برای مدیران محصول این نه تنها یک جمله زیبا بلکه یک پند همیشگی است که باید در ذهن داشته باشند. در طول سال ها فعالیت در صنعت تولید محصولات نرم افزاری، تحلیل و مهندسی ضعیف نیازمندی ها و مشکلات کاربران را دلیل اصلی عدم موفقیت محصولاتی می دانم که در ابتدا پتانسیل بی نظیری برای موفقیت در بازار و کسب رضایت کاربران خود داشتند. دوست دارم از این مشکل به عنوان یک همه گیری یا (Pandemic) نام ببرم. تعداد بسیار محدودی از شرکت ها و تیم های بالغ نرم افزاری در دنیا هستند که به درستی اصول تحلیل و مهندسی نیازمندی های کاربران و جامعه هدف خود را به اجرا در می آورند و فضای مشکل فعلی (As-is Problem Space) و تجربه های قبلی آن ها را تا حد امکان شناسایی می کنند.

در سال 2002 گزارشی از میزان استفاده فیچرهای یک سیستم توسط جیم جانسون مدیر گروه تحقیقاتی Standish Group در سومین کنفرانس بین المللی Extreme Programming در ایتالیا ارائه شد. بر طبق این گزارش 45 درصد از فیچرها و قابلیت های یک سیستم هرگز توسط کاربران نهایی استفاده نمی شوند و تنها از 7 درصد فیچرها به صورت همیشگی استفاده می شود. اما دلیل این اتفاق چیست؟ " مهندسی و تحلیل اشتباه نیازمندی های کاربران. "

میزان استفاده از فیچرهای سیستم های مختلف توسط کاربران | ارائه شده توسط Standish Group
میزان استفاده از فیچرهای سیستم های مختلف توسط کاربران | ارائه شده توسط Standish Group



مهندسی نیازمندی ها چیست؟

قبل از تعریف مهندسی نیازمندی ها ابتدا باید تعریفی از مفهوم نیازمندی ها ارائه کرد. طبق تعریف بورد بین المللی مهندسی نیازمندی ها (International Requirements Engineering Board - IREB)، نیازمندی عبارت است از:

" شرایط یا توانایی مورد نیاز یک مشتری برای حل مسئله یا دستیابی به یک هدف "
- برگرفته شده از واژه نامه مهندسی نیازمندی ها - IREB-CPRE Glossary

نیازمندی های مرتبط با کاربران نهایی و مشتریان اغلب در قالب دردها (Pains) و خواسته ها (Desires/Gains) بیان می شود. در واقع این نیازمندی ها شامل شرایط و قابلیت هایی است که کاربران و مشتریان برای حل مسئله ای خاص و یا رسیدن به هدف مورد نظر به دنبال راهکاری برای پاسخگویی به آن ها هستند.

از طرف دیگر، مفهوم دیگری در توسعه محصولات نرم افزاری وجود دارد که به مهندسی نیازمندی ها مشهور است. طبق تعریف بورد بین المللی، مهندسی نیازمندی ها عبارت است از:

رویکردی منظم در رابطه با مشخصات و مدیریت نیازمندی ها با اهداف زیر:
(1) دانستن نیازمندی های مربوطه، دستیابی به اجماع بین ذینفعان در مورد نیازمندی ها، مستندسازی آن ها مطابق با استانداردهای معین و مدیریت سیستماتیک آن ها،
(2) درک و مستند سازی خواسته ها و نیازهای ذینفعان،

(3) تعیین و مدیریت نیازمندی ها برای به حداقل رساندن ریسک تحویل سیستمی که پاسخگوی خواسته ها و نیازهای ذینفعان نباشد.

- برگرفته شده از واژه نامه مهندسی نیازمندی ها - IREB-CPRE Glossary

مفهوم مهندسی نیازمندی‌ها (Requirements Engineering) به فرآیند تعریف، مستندسازی و مدیریت نیازمندی های محصولات نرم افزاری اشاره دارد. مهندسی نیازمندی ها یک مفهوم رایج در مهندسی سیستم (System Engineering) و مهندسی نرم افزار (Software Engineering) است که بعدها در مفهوم مدیریت محصول مورد بحث و پیاده سازی قرار گرفته است. به طور کلی مهندسی نیازمندی ها شامل موارد زیر می شود:

  1. استخراج نیازمندی ها: اولین گام از مهندسی نیازمندی های محصولات نرم افزاری، بررسی فضای مشکل و استخراج نیازمندی های درست و واقعی (نه مواردی که فرض می کنیم احتمالا مورد نیاز کاربران و مشتریان است) جامعه هدف محصول است. بدون اغراق، مهم ترین فاز از توسعه محصولات نرم افزاری و مهندسی نیازمندی ها، استخراج درست نیازمندی های واقعی کسانی است که در آینده قرار است از محصول (یا خدمت) شما استفاده کنند.
  2. مستندسازی نیازمندی ها: این فاز از مهندسی نیازمندی ها اغلب پس از استخراج و تحلیل نیازمندی ها انجام می گیرد. مستندسازی نیازمندی ها در راستای تشریح یا مدلسازی نیازمندی های نرم افزاری مورد استفاده قرار می گیرد. از جمله موارد مورد استفاده در مستندسازی نیازمندی ها می توان از بک لاگ محصول، نقشه راه محصول، بورد چشم انداز محصول، مستند الزامات محصول و نمودار مورد کاربرد (Use case diagram) نام برد.
  3. اعتبارسنجی نیازمندی ها: پاشنه آشیل بسیاری از محصولات نرم افزاری که در ابتدا پتانسیل بی نظیر برای موفقیت در بازار داشته اند اما به جایی نرسیدند. بسیاری از تیم های نرم افزاری فراموش می کنند که باید قبل از تولید محصول، به اعتبارسنجی نیازمندی های شناسایی و تحلیل شده پرداخت. عدم اجرای این کار شانس توسعه محصولی که مورد استفاده کاربران قرار نگیرد را افزایش داده و هزینه های تولید را به شدت افزایش می دهد.
  4. مدیریت نیازمندی ها: در رویکرد سنتی توسعه محصولات نرم افزاری اغلب مدیریت نیازمندی ها عبارت بود از هر گونه فعالیتی که به تشریح و نگهداری نیازمندی ها در طول زمان مرتبط می شود. این امر شامل مواردی نظیر مدیریت نسخه، مدیریت تغییر، مدیریت پیکربندی، قابلیت ردیابی و همچنین اضافه کردن ویژگی هایی نظیر وضعیت نیازمندی ها، تخمین ها، اولویت ها، پیوند نیازمندی ها به موارد متناقض با آن ها، تعیین افراد درگیر در پاسخ به نیازمندی ها، بررسی، اجرا و اعتبارسنجی آن می شد. با این حال پس از معرفی توسعه محصول چابک، بیشتر تمرکز بخش مدیریت نیازمندی ها بر روی اولویت بندی نیازمندی ها و تخمین زدن آن ها اختصاص دارد.
نقشه سفر کاربر به همراه نقاط درد و خواسته ها (Pain Points / Desires)
نقشه سفر کاربر به همراه نقاط درد و خواسته ها (Pain Points / Desires)


نکته مهمی که باید در این بخش یادآور شد این مورد است که اکثریت جامعه نرم افزاری دنیا بر این باور هستند که مهندسی نیازمندی ها صرفا یک فعالیت مقدماتی (upfront) است که در محیط های توسعه چابک نمی تواند مورد استفاده قرار بگیرد. " این یک باور اشتباه است. "

مهندسی نیازمندی ها یک فعالیت پویا (dynamic) و مستمر (continuous) است. مدیر محصول و تیم توسعه باید به صورت مداوم در حال استخراج نیازمندی ها، تحلیل آن ها، مستندسازی و مدیریت پویای نیازمندی ها باشند تا بتوانند محصول مورد علاقه مشتریان و کاربران خود را عرضه و نگهداری کنند. فراموش نکنید که صنعت نرم افزار همواره با تغییرات شدید (Extreme Change) همراه است. این امر بر لزوم مستمر و پویا بودن فرآیند مهندسی نیازمندی ها تاکید می کند.

تکنیک های مهندسی نیازمندی های محصولات نرم افزاری

همانگونه که در بالا ذکر شد، مهندسی نیازمندی ها از چهار بخش اصلی تشکیل شده است که اجرای درست هر یک از این بخش ها نیازمند استفاده از روش ها و تکنیک های متفاوتی است. در ادامه تلاش شده است تا به معرفی کلی برخی از این تکنیک ها در هر یک از بخش های مهندسی نیازمندی ها پرداخته شود:

  1. استخراج نیازمندی ها: برخی از مهم ترین تکنیک های مورد استفاده در این بخش عبارت است از مصاحبه کیفی/کمی، پرسش نامه، مشاهده تجربه فعلی کاربران، تحقیقات تجربه کاربر، تفکر دیزاین و تکنیک قالب بندی مشکل (Problem Framing) دیزاین اسپرینت.
  2. مستندسازی نیازمندی ها: برخی از پر استفاده ترین تکنیک های مستندسازی نیازمندی ها عبارت است از بورد چشم انداز محصول، بورد نقشه راه محصول، دیاگرام مورد کاربرد، نقشه داستان کاربر، بک لاگ محصول، مدلسازی مفهومی.
  3. اعتبارسنجی نیازمندی ها: برخی از مهم ترین تکنیک های اعتبارسنجی نیازمندی ها عبارت است از انتشار اینکریمنت، آزمون تحقیقات کاربر، دیزاین اسپرینت و تست رگرسیون.
  4. مدیریت نیازمندی ها: برخی از پرکاربردترین تکنیک های مدیریت نیازمندی ها (در محیط های چابک) برای اولویت بندی نیازمندی ها شامل تکنیک MoSCoW و Impact-Effort Matrix می شوند. علاوه بر این تکنیک های مختلفی برای تخمین زدن یک نیازمندی نظیر تکنیک T-shirt Sizes، تکنیک Affinity Mapping، تکنیک Planning Poker و تکنیک The Bucket System مورد استفاده قرار می گیرند.

سخن پایانی

" مردم دریل نمی خرند، آن ها حفره ای که توسط آن حفر می شود را می خرند"
- زیگ زیگلار
زیگ زیگلار - نویسنده و تاجر معروف آمریکایی
زیگ زیگلار - نویسنده و تاجر معروف آمریکایی


دوستان من! مهندسی نیازمندی ها بخشی غیر قابل انکار در توسعه محصولات موفق نرم افزاری است. فهم کامل و پیاده سازی درست آن به توسعه محصولات ارزش محور (Value-based products) منتهی خواهد شد. همیشه به خاطر داشته باشید که برای مشتریان و کاربران خود محصول به خودی خود ارزش چندانی ندارد اگر Outcome ارائه شده توسط آن تفاوتی اساسی در تجربه های پیشین آن ها ایجاد نکند.

- پیروز باشید - آیدین