نیاز های کارکردی و غیر کارکردی در نرم افزار (Functional,Non Functional)
من امیر معصوم بیگی هستم ، علاقه مند به به طراحی ، توسعه و پیاده سازی سیستم های نرم افزاری
نیاز های کارکردی و غیر کارکردی در نرم افزار (Functional,Non Functional)
مقدمه: نیازهای کارکردی(عملکردی) و غیرکارکردی(غیر عملکرد) چیست؟
وقتی میخواهیم یک سیستم طراحی کنیم، باید هم به چیستی کارکردها و هم به کیفیت اجرای آنهاتوجه کنیم. این دو جنبه با نیازهای کارکردی(Functional Requirements) و غیرکارکردی(Non-Functional Requirements) تعریف میشوند.
مثالهای متنوع و روزمره:
سیستم مدیریت مدرسه:
نیاز کارکردی: امکان ثبتنام دانشآموزان، ثبت نمرات و ارسال گزارش به والدین.
نیاز غیرکارکردی: سیستم باید از همزمانی کاربران پشتیبانی کند و دادهها محرمانه باشند.
اپلیکیشن تاکسی آنلاین:
نیاز کارکردی: یافتن راننده، محاسبه کرایه، پرداخت آنلاین.
نیاز غیرکارکردی: اپ باید در کمتر از 5 ثانیه راننده نزدیک را پیدا کند.
سامانه بانکی آنلاین:
نیاز کارکردی: انتقال وجه، مشاهده موجودی، پرداخت قبض.
نیاز غیرکارکردی: امنیت بالا برای جلوگیری از هک و نمایش درست در موبایل و کامپیوتر.
بازی موبایل:
نیاز کارکردی: قابلیت انجام مراحل بازی، ذخیره امتیاز، و بازی چندنفره.
نیاز غیرکارکردی: بازی نباید هنگ کند و باید روی دستگاههای قدیمی هم اجرا شود.
رستوران دیجیتال:
نیاز کارکردی: نمایش منو، سفارش آنلاین، و رزرو میز.
نیاز غیرکارکردی: اپ باید حتی در ساعتهای اوج شلوغی به خوبی کار کند.
سیستم خزنده وب:
نیاز کارکردی: پیدا کردن لینکها، دانلود صفحات، و ذخیره اطلاعات.
نیاز غیرکارکردی: باید با سرعت بالا و بدون نقض قوانین سایتها عمل کند.
این مقدمه نشان میدهد که نیازهای کارکردی به وظایف سیستم و نیازهای غیرکارکردی به کیفیت اجرامربوط هستند.
نیازهای کارکردی (Functional Requirements):
این نیازها به وظایفو عملکردهای اصلی یک سیستم اشاره دارند. به زبان ساده، اینها چیزهایی هستند که سیستم باید حتماً انجام بده تا هدف اصلی خودش رو برآورده کنه.
مثالهای متنوع:
اپلیکیشن فروشگاه آنلاین:
امکان جستجوی محصولات.
افزودن کالا به سبد خرید.
ثبت سفارش و پرداخت آنلاین.
سیستم دانشگاهی:
ثبتنام دانشجویان در کلاسها.
نمایش برنامه درسی.
ثبت نمرات پایان ترم.
نرمافزار حسابداری:
ثبت تراکنشها (درآمد و هزینه).
تولید گزارش مالی.
محاسبه مالیات به صورت خودکار.
سامانه خبررسانی:
نمایش اخبار جدید به ترتیب زمانی.
دستهبندی اخبار بر اساس موضوع.
جستجوی خبرهای خاص.
اپلیکیشن پیامرسان:
ارسال پیام متنی.
برقراری تماس صوتی و تصویری.
ایجاد گروههای چت.
سیستم مدیریت پروژه:
تعریف پروژهها و وظایف.
تعیین مهلتها و تخصیص افراد به وظایف.
نمایش وضعیت پیشرفت پروژه.
نیازهای کارکردی، پایه و اساس سیستم هستند. اگر این نیازها درست تعریف و اجرا نشن، سیستم عملاً ناقص یا بیفایده خواهد بود!
نیازهای غیرکارکردی (Non-Functional Requirements):
این نیازها به کیفیت اجرای عملکردها اشاره دارن، نه به وظایف اصلی. این موارد تعیین میکنن سیستم چطورکار کنه و تجربه کاربران رو بهبود میبخشن.
مثالهای متنوع:
اپلیکیشن فروشگاه آنلاین:
سرعت: سفارش باید در کمتر از 2 ثانیه ثبت بشه.
در دسترس بودن: سایت باید 99.9٪ مواقع در دسترس باشه.
مقیاسپذیری: باید همزمان از 10,000 کاربر پشتیبانی کنه.
سیستم دانشگاهی:
امنیت: نمرات و اطلاعات دانشجوها باید رمزنگاری بشه.
پایداری: در زمان انتخاب واحد، سیستم نباید دچار اختلال بشه.
نرمافزار حسابداری:
قابلیت اطمینان: گزارشهای مالی نباید هیچ خطای محاسباتی داشته باشن.
کاربرپسندی: حتی کاربران مبتدی باید بتونن به راحتی از سیستم استفاده کنن.
اپلیکیشن پیامرسان:
تاخیر کم: پیامها باید در کمتر از 1 ثانیه ارسال بشن.
امنیت: پیامها باید رمزنگاری شده باشن و فقط برای گیرنده قابل مشاهده باشن.
بازی موبایل:
پایداری: بازی نباید هنگام انجام مراحل هنگ کنه.
سازگاری: باید روی دستگاههای قدیمی و جدید به خوبی اجرا بشه.
نیازهای غیرکارکردی، تضمین میکنن که سیستم علاوه بر انجام وظایفش، با کیفیت و قابل اعتماد باشه.
حالا برای اینکه بتونیم درک درستی از این نیاز ها داشته باشیم ، مثال های دیگه ای میزنیم که چالشی تر هستن ، سعی کنین قبل دیدن پاسخ این سوالات ، ببینید به نظرتون جزوه کدوم دسته محسوب میشن . بزنید بریم 😊
در دنیای واقعی و در حوزه نرمافزار، بعضی از نیازها ممکن است به راحتی قابل تفکیک به نیازهای عملیاتی (Functional) و غیرعملیاتی(Non-Functional) نباشند. این نوع نیازها بهویژه زمانی پیش میآیند که مشخصات سیستم با پیچیدگیهای خاص خود روبرو میشود. در ادامه چند مثال آوردهام که تشخیص اینکه آیا نیاز به دستهبندی عملیاتییا غیرعملیاتی تعلق دارند، میتواند سخت باشد:
. 1 عملکرد بالا و قابل مقیاس بودن
توضیح: سیستم باید بتواند در شرایط بار سنگین، به تعداد زیاد درخواستها پاسخ دهد و همچنان سریع عمل کند.
چالش: آیا این نیاز یک ویژگی عملیاتی است که مربوط به نحوهی پردازش دادهها و انجام عملیات است یا یک ویژگی غیرعملیاتی که به مقیاسپذیری و عملکرد سیستم در سطح بزرگتری اشاره دارد؟
کجا تشخیص سخت است: این نیاز ممکن است ابتدا به نظر بیاید که مربوط به عملکرد سیستم (Functional) است اما بهطور کلی جزء نیازهای غیرعملیاتی به شمار میرود چون بیشتر به مقیاسپذیری و نحوه مدیریت منابع اشاره دارد.
.2 امنیت دادهها
توضیح: سیستم باید قابلیت رمزنگاری دادهها را داشته باشد.
چالش: آیا این مورد یک نیاز عملیاتی است چون در پیادهسازی ویژگیهای امنیتی و پردازش دادهها اثر میگذارد، یا یک نیاز غیرعملیاتی که به حفاظت از دادهها در سطح سیستم اشاره دارد؟
کجا تشخیص سخت است: رمزنگاری در عمل عملیاتی و امنیتی است، اما مفهوم امنیت در اصل بیشتر به غیرعملیاتی تعلق دارد.
پس وقتی داریم از یک عمل عملیاتی که سیستم به اون وابسته هست صحبت میکنیم ، مثل اینکه داده ها هنگام انتقال باید رمزگذاری بشن و سپس ارسال بشن و اگر اینکار اتفاق نیفته سیستم ما عمکرد خودش رو درست انجام نداده ، اینجا یک نیاز کارکردی هست ، اما وقتی داریم میگیم برنامه باید امن باشه یک نیاز غیرکاربردی یا غیر عملکردی هست
.3 در دسترس بودن (Availability)
توضیح: سیستم باید در 99.99% مواقع در دسترس باشد و downtime به حداقل برسد.
چالش: این نیاز ممکن است به نظر برسد که یک نیاز عملیاتی است چون به نحوه عملکرد سیستم و دسترسی به آن اشاره دارد، اما از آنجایی که بیشتر به عملکرد سیستم در مقیاس بزرگ و پایداری سیستم اشاره دارد، این نیاز غیرعملیاتی است.
.4 رابط کاربری (UI) و تجربه کاربری (UX)
توضیح: سیستم باید رابط کاربری ساده، جذاب و کاربردی داشته باشد.
چالش: طراحی رابط کاربری و تجربه کاربری به طور مستقیم بر نحوه استفاده و تعامل کاربران با سیستم تأثیر میگذارد، اما ممکن است نیازهای عملکردی (برای مثال در مورد قابلیتهای خاص سیستم) و غیرعملیاتی (مثلاً در مورد راحتی و رضایت کاربر) را در بر بگیرد.
کجا تشخیص سخت است: این نیاز ممکن است بهطور همزمان هم به ویژگیهای عملیاتی (عملکردها و قابلیتها) و هم به ویژگیهای غیرعملیاتی (کیفیت تجربه کاربر) تعلق داشته باشد.
.5 پایداری و انعطافپذیری در برابر تغییرات
توضیح: سیستم باید به راحتی قابل نگهداری و گسترش باشد.
چالش: این نیاز ممکن است در ابتدا به نظر برسد که به قابلیتهای عملیاتی نرمافزار برای تطبیق با تغییرات یا گسترش نیاز دارد، اما بیشتر به نگهداری و گسترش پذیری سیستم که جنبهای از نیازهای غیرعملیاتی دارد، اشاره دارد.
.6 دقت در پردازش دادهها
توضیح: سیستم باید دادهها را با دقت بالا پردازش کند و اشتباهات را کاهش دهد.
چالش: این ویژگی ممکن است به نظر برسد که یک نیاز عملیاتی است چون بر نحوه پردازش دادهها تأثیر میگذارد، اما در عین حال به کیفیت خروجی سیستم و اعتمادپذیری آن مربوط میشود، که میتواند به نیاز غیرعملیاتی تعلق داشته باشد.
.7 زمان پاسخگویی (Response Time)
توضیح: سیستم باید در پاسخ به درخواستها کمتر از 2 ثانیه زمان بگیرد.
چالش: این نیاز میتواند یک ویژگی عملیاتی باشد چون به عملکرد سیستم در زمان اجرای عملیات مربوط میشود، اما از آنجایی که بیشتر به تجربه کاربر و کارآیی سیستم در سطح کلان اشاره دارد، جزو نیازهای غیرعملیاتی محسوب میشود ، در عین حال اگر در یک سیستم بانکی تراکنش باید حداکثر در طی یک مدت زمان خاص پاسخ داده شود ، این به عنوان یک نیاز عملکردی تلقی میشود
در ادامه مثال های دیگه ای برای درک بهتر موضوع میارم که تفاوت ها بهتر مشخص بشه ، این مثال ها در بعضی اوقات میتونند نیاز عملکردی و در بعضی موارد نیاز غیرعملکردی باشند.
.1 ورود به سیستم (Login)
عملکردی: ورود به سیستم به طور مستقیم با انجام وظیفهی شناسایی و احراز هویت کاربر مرتبط است. برای مثال، وقتی یک کاربر میخواهد وارد حساب کاربری خود شود و سیستم باید نام کاربری و رمز عبور را بررسی کرده و دسترسی را فراهم کند، این نیاز یک ویژگی عملکردی است.
غیرعملکردی: اگر نیاز به امنیت بالاتر در فرآیند ورود (مثل نیاز به استفاده از روشهای احراز هویت چند عاملی) وجود داشته باشد، این ویژگی تبدیل به یک نیاز غیرعملکردی میشود زیرا بهطور کلی به کیفیت امنیت سیستم مربوط است، نه به انجام فرآیند ورود.
.2 ذخیره دادهها در پایگاه داده
عملکردی: ذخیرهسازی دادهها در پایگاه داده زمانی که هدف آن انجام وظیفهای خاص مانند ثبت اطلاعات کاربر یا تراکنشها باشد، یک نیاز عملکردی است زیرا به طور مستقیم با پردازش و ذخیرهسازی اطلاعات مرتبط است.
غیرعملکردی: اگر نیاز به مقیاسپذیری برای ذخیرهسازی دادهها در حجمهای بسیار بالا (مثلاً در یک سیستم بزرگ با دادههای زیاد) وجود داشته باشد، این نیاز تبدیل به یک ویژگی غیرعملکردی میشود زیرا بیشتر به چگونگی طراحی و گسترش سیستم در مقیاس کلان مربوط است.
.3 جستجو در اطلاعات
عملکردی: زمانی که سیستم باید قادر به جستجو در پایگاه داده برای پیدا کردن اطلاعات خاص باشد (مثل جستجوی محصولات در یک فروشگاه آنلاین)، این یک نیاز عملکردی است چون بهطور مستقیم با انجام عملیات جستجو و برگرداندن نتایج مرتبط است.
غیرعملکردی: اگر سیستم نیاز به انجام جستجوهای سریع در دادههای حجیم داشته باشد، و انتظار میرود که زمان جستجو در زیر 2 ثانیه باشد، این ویژگی به یک نیاز غیرعملکردی تبدیل میشود چون بیشتر به عملکرد کلی و تجربه کاربر در سطح سیستم مرتبط است.
.4 ارسال ایمیل تأیید
عملکردی: ارسال یک ایمیل تأیید پس از ثبت نام یا انجام یک عملیات خاص (مثل خرید) نیاز به عملکرد خاصی دارد که بهطور مستقیم به انجام وظایف سیستم مرتبط است. برای مثال، ارسال ایمیل تأیید پس از ثبتنام یک کاربر، یک نیاز عملکردی است.
غیرعملکردی: اگر سیستم نیاز به ضمانت ارسال ایمیلها در بازه زمانی خاص (مثلاً در کمتر از 5 ثانیه) داشته باشد تا تجربه کاربر حفظ شود، این نیاز بهعنوان یک ویژگی غیرعملکردی در نظر گرفته میشود.
.5 گزارشگیری
عملکردی: ایجاد و نمایش گزارشها (مثل گزارشهای مالی، تحلیل دادهها)نیازهای عملکردی هستند زیرا بهطور مستقیم با توانایی سیستم در پردازش و نمایش اطلاعات مشخص و انجام وظایف مرتبط با تحلیل دادهها مرتبطاند.
غیرعملکردی: اگر سیستم نیاز به قابلیت سفارشیسازی گزارشها داشته باشد، بهگونهای که کاربران بتوانند گزارشها را بر اساس نیاز خود فیلتر و تنظیم کنند، این ویژگی به یک نیاز غیرعملکردی تبدیل میشود زیرا به ویژگیهای قابل تنظیم سیستم و نحوه تعامل کاربر با آن مربوط است.
.6 امنیت
عملکردی: برای مثال، کنترل دسترسی به اطلاعات خاص (مانند محدود کردن دسترسی کاربران به دادههای حساس) یک نیاز عملکردی است زیرا بهطور مستقیم به انجام وظیفهای مشخص در سیستم (یعنی مدیریت دسترسی و اطلاعات حساس) مربوط میشود.
غیرعملکردی: اما اگر سیستم نیاز به پروتکلهای امنیتی پیشرفته (مثل احراز هویت دو مرحلهای، رمزنگاری دادهها و غیره) داشته باشد، این ویژگی تبدیل به یک نیاز غیرعملکردی میشود زیرا بیشتر به نحوه حفاظت و امنیت کلی سیستم مرتبط است.
.7 مقیاسپذیری
عملکردی: مقیاسپذیری زمانی که بهطور خاص با افزایش تعداد کاربران و درخواستها برای انجام وظایف خاص (مانند افزایش تراکنشها در یک سیستم فروش آنلاین) در ارتباط باشد، میتواند به عنوان یک نیاز عملکردی در نظر گرفته شود.
غیرعملکردی: در اکثر مواقع، مقیاسپذیری به ویژگیهای طراحی کلی سیستم اشاره دارد که مربوط به توانایی آن در مدیریت بارهای بیشتر در آینده است. این ویژگی معمولاً بهعنوان یک نیاز غیرعملکردی در نظر گرفته میشود.
.8 پشتیبانگیری و بازیابی(Backup and Recovery)
عملکردی: در برخی سیستمها، نیاز به پشتیبانگیری دادهها بهطور مستقیم به عملیات اجرایی مانند جلوگیری از دست رفتن دادهها در صورت وقوع خطا در سیستم مربوط میشود. این یک نیاز عملکردی است چون مستقیماً بر عملیات حفاظت از دادهها تأثیر میگذارد.
غیرعملکردی: در شرایطی که نیاز به زمان بازیابی مشخص (مثلاً بازیابی دادهها در کمتر از یک ساعت بعد از خرابی) وجود داشته باشد، این نیاز بهطور کلی به نحوه عملکرد سیستم در مواقع بحران و مدیریت وضعیتهای اضطراری مرتبط است و بهعنوان یک نیاز غیرعملکردی شناخته میشود.
.9 پشتیبانی از چند زبان(Multilingual Support)
عملکردی: در صورتی که سیستم بهطور خاص نیاز به پشتیبانی از زبانهای مختلف برای نمایش اطلاعات به کاربران داشته باشد (مثلاً در یک سایت فروشگاهی که برای بازارهای مختلف طراحی شده باشد)، این نیاز بهطور مستقیم با عملیات سیستم ارتباط دارد و یک نیاز عملکردی است.
غیرعملکردی: اگر نیاز به قابلیت تغییر زبان بهصورت پویا در هر نقطه از سیستم وجود داشته باشد تا تجربه کاربری بهبود یابد، این ویژگی تبدیل به یک نیاز غیرعملکردی میشود چون بیشتر به تجربه کاربر و طراحی سیستم در سطح کلان مربوط است.
جمعبندی:
در این مثالها، ویژگیهایی که بهطور مستقیم با انجام عملیات خاص در سیستم ارتباط دارند (مانند ورود به سیستم، ذخیره دادهها، یا ارسال ایمیل تأیید) بهعنوان نیازهای عملکردی در نظر گرفته میشوند. اما ویژگیهایی که بیشتر به کیفیت کلی سیستم، کارایی، یا تجربه کاربر مربوط میشوند (مانند امنیت، مقیاسپذیری، یا پشتیبانی از چند زبان) بهطور معمول نیازهای غیرعملکردی هستند، مگر اینکه مستقیماً بر روی فرآیندهای خاص سیستم اثر بگذارند.
سخن پایانی
با توجه به اینکه این موضوع یکی از موضوعات پایه ای طراحی نرم افزار هست ، سعی کردم در این مقاله با جمع بندی مطالب و به صورت خیلی ساده این مطلب رو برای شما جا بندازم ، دلیل تنوع مثال ها به این علت بود که تفکیک این که یک نیاز عملکردی یا غیرعملکردی هست بعضی اوقات دشوار هست اما تا حدودی زیادی فکر میکنم با خوندن این مقاله بتونید تفاوت های زیادی رو براش عنوان کنید.