پرش به محتویات

نیاز سنجی و تحلیل سیستم

مقدمه

  • مهندسی نرم‌افزار:
  • مهندس نرم‌افزار لزوماً برنامه‌نویس نیست، بلکه با تجزیه و تحلیل و استفاده از ابزارها و تکنیک‌ها، بهترین راه‌حل را برای پروژه انتخاب و پیاده‌سازی می‌کند.
  • مهندسی نرم‌افزار شامل طراحی، پیاده‌سازی، ویرایش و بهبود کیفیت نرم‌افزار است.
  • انواع برنامه‌نویسی:
  • برنامه‌نویسی ساخت‌یافته: رویکرد خطی و مرحله‌ای، شامل تجزیه سیستم به زیرسیستم‌ها و تحلیل آنها.
  • برنامه‌نویسی شی‌گرا: ساختار نرم‌افزار مبتنی بر اشیاء و ارتباطات بین آنها از طریق تبادل پیام.

مزایا و معایب شی‌گرایی

  • مزایا:
  • استفاده مجدد (Reusability)
  • امنیت (Security)
  • انعطاف‌پذیری (Flexibility)
  • مقیاس‌پذیری (Scalability)
  • معایب:
  • روند یادگیری سخت
  • زمان کامپایل طولانی‌تر
  • پیچیدگی بالا

مفاهیم پایه شی‌گرایی

  • چرخه حیات نرم‌افزار (SDLC):
  • شامل مراحل نیازسنجی، تحلیل، طراحی، پیاده‌سازی، آزمون، پشتیبانی و تجدید طراحی نرم‌افزار.
  • سیستم (System):
  • مجموعه‌ای از اجزای بهم وابسته که یک هدف خاص را دنبال می‌کنند.
  • شی (Object):
  • هر چیزی در دنیای واقعی که در سیستم اطلاعاتی از آن نگهداری می‌شود. شامل صفات (Attributes) و متدها (Methods).
  • کلاس (Class):
  • توصیف یک یا چند موجودیت.
  • صفت (Attribute):
  • خصوصیات شی.
  • متد (Method):
  • عملیاتی که توسط کلاس انجام می‌شود.
  • سلسله مراتب کلاس‌ها:
  • شامل سوپرکلاس (Superclass)، زیرکلاس (Subclass) و روابط بین آنها.

ویژگی‌های اساسی شی‌گرایی

  • انتزاع (Abstraction):
  • نادیده گرفتن جنبه‌های غیرضروری مسئله.
  • وراثت (Inheritance):
  • استفاده از خصوصیات مشترک کلاس‌ها برای جلوگیری از تکرار کد.
  • چندریختی (Polymorphism):
  • توانایی یک شی برای نشان دادن رفتارهای مختلف در شرایط متفاوت.
  • قابلیت استفاده مجدد (Reusability):
  • استفاده مجدد از کد در پروژه‌های مختلف.
  • کپسوله‌سازی (Encapsulation):
  • پنهان‌سازی جزئیات و اطلاعات شی از دید دیگران.
  • همروندی (Concurrency):
  • اجرای موازی دو یا چند فعالیت در سطح یک شی یا سیستم.
  • ارتباط پیامی (Message Communication):
  • تنها راه ارتباط بین اشیاء، مانند ارسال یک مقدار یا پارامتر از یک شی به شی دیگر.

فازهای تولید نرم‌افزار

  1. تعریف:
  2. امکان‌سنجی (Feasibility Study): بررسی اقتصادی، قانونی و زمان‌بندی پروژه.
  3. تحلیل (Analysis): شناخت جنبه‌های مختلف سیستم و جمع‌آوری اطلاعات.
  4. طراحی (Designing): طراحی منطقی و فیزیکی سیستم.
  5. توسعه:
  6. کدنویسی (Coding): ترجمه طراحی به کد.
  7. آزمون (Testing): ارزیابی کارایی برنامه.
  8. استقرار (Deployment):
  9. جایگزینی سیستم قدیم با سیستم جدید.
  10. نگهداری:
  11. آموزش (Learning): آموزش سیستم جدید به کاربران.
  12. پشتیبانی (Supporting): بروزرسانی و اشکال‌زدایی.

تعریف نیازمندی و انواع آن

  • نیازمندی (Requirement):
  • شرایط یا قابلیت‌های مورد نیاز کاربر برای حل مسئله یا رسیدن به یک هدف.
  • انواع نیازمندی:
  • عملکردی (Functional): کارکردهای سیستم مانند جستجو، ثبت نام و غیره.
  • غیرعملکردی (Non-functional): کیفیت، قابلیت اطمینان، سرعت و زمان پاسخ.
  • مستندسازی نیازمندی‌ها:
  • استفاده از زبان استاندارد مدل‌سازی مانند UML.

تکنیک‌های استخراج نیازمندی‌ها

  • مشاهده:
  • مستقیم (تحلیلگر شخصاً مشاهده می‌کند).
  • غیرمستقیم (ضبط ویدئو یا صوت بدون اطلاع کاربر).
  • پرسشنامه:
  • ثبت عقاید گروهی از افراد به شکل یکنواخت.
  • مصاحبه:
  • آزاد (بدون محدودیت در سوالات).
  • منظم (طبق روال مشخص).
  • استفاده از کتابخانه و اسناد:
  • جمع‌آوری اطلاعات از کتب، مقالات، و بایگانی‌ها.

تحلیل شی‌گرا

  • گام‌های تحلیل شی‌گرا:
  • استخراج نیازهای مشتری.
  • شناسایی موارد کاربرد (Use Cases).
  • انتخاب کلاس‌ها و اشیاء.
  • شناسایی صفات و اعمال هر شی.
  • تعریف ساختار و سلسله مراتب کلاس‌ها.
  • ساخت مدل شی-رابطه و شی-رفتار.
  • بازنگری مدل تحلیل برای مطابقت با موارد کاربرد.

طراحی شی‌گرا

  • رویکرد طراحی شی‌گرا:
  • تبدیل مدل تحلیل به مدل طراحی.
  • طراحی معماری نرم‌افزار و تعریف زیرسیستم‌ها.
  • توسعه واسط کاربر.
  • طراحی الگوریتم‌ها و ساختمان داده‌ها.
  • توصیف شی:
  • توصیف درونی (Internal)، بیرونی (External) و پیاده‌سازی (Implementation).

آزمون شی‌گرا

  • استراتژی‌های آزمون:
  • آزمون واحد (Unit Test): بررسی کد و پیمانه‌ها.
  • آزمون یکپارچگی (Integration Test): بررسی ارتباط بین پیمانه‌ها.
  • آزمون سیستم (System Test): بررسی عملکرد سیستم.
  • آزمون اعتبارسنجی (Validation Test): بررسی سازگاری سیستم با محیط کاربر.

استقرار

  • استراتژی‌های استقرار:
  • نصب آزمایشی سیستم جدید در بخشی از سازمان.
  • نصب سیستم جدید و قطع سیستم قدیم.
  • نصب تدریجی سیستم جدید و قطع تدریجی سیستم قدیم.

تمرین

  • تعریف سیستم:
  • عنوان سیستم، شرح کلی، اشیاء داخلی و خارجی، فعالیت‌ها، ارتباطات بین اشیاء و فعالیت‌ها، روند اجرا، قوانین سیستم.

سوالات و پاسخ‌ها به فارسی


۱. تفاوت‌های اصلی بین برنامه‌نویسی ساخت‌یافته و برنامه‌نویسی شی‌گرا چیست؟

  • برنامه‌نویسی ساخت‌یافته:
  • رویکرد خطی و مرحله‌ای دارد.
  • سیستم به زیرسیستم‌ها تجزیه می‌شود و هر بخش به‌صورت جداگانه تحلیل و پیاده‌سازی می‌شود.
  • مدیریت خطا و اشکال‌زدایی ساده‌تر است.
  • برنامه‌نویسی شی‌گرا:
  • مبتنی بر اشیاء و ارتباطات بین آنهاست.
  • از مفاهیمی مانند وراثت، چندریختی و کپسوله‌سازی استفاده می‌کند.
  • قابلیت استفاده مجدد کد و انعطاف‌پذیری بیشتری دارد.

۲. مفهوم وراثت در برنامه‌نویسی شی‌گرا را با یک مثال توضیح دهید.

  • وراثت:
  • امکان استفاده از خصوصیات و متدهای یک کلاس (سوپرکلاس) در کلاس دیگر (زیرکلاس) را فراهم می‌کند.
  • مثال:
    • کلاس حیوان (سوپرکلاس) دارای خصوصیاتی مانند نام و متدی مانند حرکت() است.
    • کلاس سگ (زیرکلاس) از کلاس حیوان ارث‌بری می‌کند و می‌تواند از متد حرکت() استفاده کند یا آن را تغییر دهد.

۳. مراحل کلیدی چرخه حیات توسعه نرم‌افزار (SDLC) چیست؟

  1. نیازسنجی: جمع‌آوری و تحلیل نیازهای کاربر.
  2. تحلیل: شناخت سیستم و طراحی راه‌حل.
  3. طراحی: طراحی منطقی و فیزیکی سیستم.
  4. پیاده‌سازی: کدنویسی و ساخت نرم‌افزار.
  5. آزمون: ارزیابی کارایی و رفع اشکالات.
  6. استقرار: نصب و راه‌اندازی سیستم.
  7. نگهداری: پشتیبانی، بروزرسانی و بهبود سیستم.

۴. چندریختی چگونه انعطاف‌پذیری سیستم‌های شی‌گرا را افزایش می‌دهد؟

  • چندریختی:
  • به اشیاء اجازه می‌دهد رفتارهای مختلفی را در شرایط متفاوت نشان دهند.
  • مثال: متد حرکت() می‌تواند در کلاس ماشین به معنای رانندگی و در کلاس پرنده به معنای پرواز باشد.
  • این ویژگی باعث می‌شود کد انعطاف‌پذیرتر و قابل استفاده در شرایط مختلف باشد.

۵. هدف کپسوله‌سازی چیست و چگونه امنیت را بهبود می‌بخشد؟

  • کپسوله‌سازی:
  • پنهان‌سازی جزئیات و اطلاعات داخلی شی از دید دیگران.
  • دسترسی به داده‌ها فقط از طریق متدهای تعریف‌شده امکان‌پذیر است.
  • این کار امنیت را افزایش می‌دهد، زیرا داده‌ها به‌طور مستقیم قابل تغییر نیستند و فقط از طریق متدهای کنترل‌شده قابل دسترسی هستند.

۶. فرآیند تحلیل شی‌گرا و مراحل کلیدی آن را توضیح دهید.

  1. استخراج نیازهای مشتری: جمع‌آوری نیازهای سیستم.
  2. شناسایی موارد کاربرد: تعیین سناریوهای استفاده از سیستم.
  3. انتخاب کلاس‌ها و اشیاء: شناسایی اشیاء و کلاس‌های اصلی.
  4. شناسایی صفات و اعمال هر شی: تعیین خصوصیات و رفتارهای هر شی.
  5. تعریف ساختار و سلسله مراتب کلاس‌ها: سازماندهی کلاس‌ها و روابط بین آنها.
  6. ساخت مدل شی-رابطه و شی-رفتار: نمایش ارتباطات و رفتارهای اشیاء.
  7. بازنگری مدل تحلیل: اطمینان از مطابقت مدل با نیازهای مشتری.

۷. تفاوت‌های بین نیازمندی‌های عملکردی و غیرعملکردی چیست؟

  • نیازمندی‌های عملکردی:
  • کارکردهای سیستم مانند جستجو، ثبت نام و پرداخت.
  • نیازمندی‌های غیرعملکردی:
  • کیفیت سیستم مانند سرعت، قابلیت اطمینان، و زمان پاسخ.

۸. چه تکنیک‌هایی برای جمع‌آوری نیازمندی‌های نرم‌افزاری استفاده می‌شود و کدام یک موثرتر است؟

  • تکنیک‌ها:
  • مشاهده مستقیم و غیرمستقیم.
  • پرسشنامه.
  • مصاحبه (آزاد و منظم).
  • استفاده از کتابخانه و اسناد.
  • موثرترین تکنیک:
  • مصاحبه مستقیم، زیرا امکان جمع‌آوری اطلاعات دقیق و عمیق را فراهم می‌کند.

۹. نقش آزمون در توسعه نرم‌افزار شی‌گرا چیست و انواع آزمون‌ها کدامند؟

  • نقش آزمون:
  • شناسایی خطاها و اطمینان از عملکرد صحیح نرم‌افزار.
  • انواع آزمون:
  • آزمون واحد (Unit Test): بررسی کد و پیمانه‌ها.
  • آزمون یکپارچگی (Integration Test): بررسی ارتباط بین پیمانه‌ها.
  • آزمون سیستم (System Test): بررسی عملکرد کلی سیستم.
  • آزمون اعتبارسنجی (Validation Test): بررسی سازگاری سیستم با محیط کاربر.

۱۰. چالش‌های اصلی در استقرار یک سیستم نرم‌افزاری جدید در سازمان چیست؟

  • چالش‌ها:
  • مقاومت کاربران در برابر تغییر.
  • هماهنگی بین سیستم قدیم و جدید.
  • افزایش هزینه‌ها و زمان‌بندی.
  • نیاز به آموزش کاربران و کارمندان.

۱۱. انتزاع چگونه به ساده‌سازی سیستم‌های پیچیده کمک می‌کند؟

  • انتزاع:
  • نادیده گرفتن جزئیات غیرضروری و تمرکز بر جنبه‌های مهم سیستم.
  • این کار باعث می‌شود سیستم قابل درک‌تر و مدیریت‌پذیرتر شود.

۱۲. اهمیت موارد کاربرد (Use Cases) در تحلیل شی‌گرا چیست؟

  • موارد کاربرد:
  • سناریوهای استفاده از سیستم را توصیف می‌کنند.
  • به شناسایی نیازهای سیستم و تعیین رفتارهای اشیاء کمک می‌کنند.

۱۳. همروندی چگونه در سیستم‌های شی‌گرا پیاده‌سازی می‌شود؟

  • همروندی:
  • اجرای موازی دو یا چند فعالیت در سطح یک شی یا سیستم.
  • با استفاده از تکنیک‌هایی مانند نخ‌ها (Threads) و فرآیندها (Processes) پیاده‌سازی می‌شود.

۱۴. اجزای کلیدی یک کلاس در برنامه‌نویسی شی‌گرا چیست؟

  • اجزای کلاس:
  • صفات (Attributes): خصوصیات شی.
  • متدها (Methods): رفتارها و عملیات شی.
  • سازنده (Constructor): برای ایجاد شی.
  • مخرب (Destructor): برای از بین بردن شی.

۱۵. نمودار استخوان ماهی (Ishikawa) چیست و چگونه در تحلیل مشکل استفاده می‌شود؟

  • نمودار استخوان ماهی:
  • ابزاری برای شناسایی علل ریشه‌ای مشکلات.
  • مشکل در سر ماهی و علل احتمالی در استخوان‌ها نمایش داده می‌شوند.
  • به سازمان‌دهی و تحلیل دلایل مشکلات کمک می‌کند.