نیاز سنجی و تحلیل سیستم
مقدمه
- مهندسی نرمافزار:
- مهندس نرمافزار لزوماً برنامهنویس نیست، بلکه با تجزیه و تحلیل و استفاده از ابزارها و تکنیکها، بهترین راهحل را برای پروژه انتخاب و پیادهسازی میکند.
- مهندسی نرمافزار شامل طراحی، پیادهسازی، ویرایش و بهبود کیفیت نرمافزار است.
- انواع برنامهنویسی:
- برنامهنویسی ساختیافته: رویکرد خطی و مرحلهای، شامل تجزیه سیستم به زیرسیستمها و تحلیل آنها.
- برنامهنویسی شیگرا: ساختار نرمافزار مبتنی بر اشیاء و ارتباطات بین آنها از طریق تبادل پیام.
مزایا و معایب شیگرایی
- مزایا:
- استفاده مجدد (Reusability)
- امنیت (Security)
- انعطافپذیری (Flexibility)
- مقیاسپذیری (Scalability)
- معایب:
- روند یادگیری سخت
- زمان کامپایل طولانیتر
- پیچیدگی بالا
مفاهیم پایه شیگرایی
- چرخه حیات نرمافزار (SDLC):
- شامل مراحل نیازسنجی، تحلیل، طراحی، پیادهسازی، آزمون، پشتیبانی و تجدید طراحی نرمافزار.
- سیستم (System):
- مجموعهای از اجزای بهم وابسته که یک هدف خاص را دنبال میکنند.
- شی (Object):
- هر چیزی در دنیای واقعی که در سیستم اطلاعاتی از آن نگهداری میشود. شامل صفات (Attributes) و متدها (Methods).
- کلاس (Class):
- توصیف یک یا چند موجودیت.
- صفت (Attribute):
- خصوصیات شی.
- متد (Method):
- عملیاتی که توسط کلاس انجام میشود.
- سلسله مراتب کلاسها:
- شامل سوپرکلاس (Superclass)، زیرکلاس (Subclass) و روابط بین آنها.
ویژگیهای اساسی شیگرایی
- انتزاع (Abstraction):
- نادیده گرفتن جنبههای غیرضروری مسئله.
- وراثت (Inheritance):
- استفاده از خصوصیات مشترک کلاسها برای جلوگیری از تکرار کد.
- چندریختی (Polymorphism):
- توانایی یک شی برای نشان دادن رفتارهای مختلف در شرایط متفاوت.
- قابلیت استفاده مجدد (Reusability):
- استفاده مجدد از کد در پروژههای مختلف.
- کپسولهسازی (Encapsulation):
- پنهانسازی جزئیات و اطلاعات شی از دید دیگران.
- همروندی (Concurrency):
- اجرای موازی دو یا چند فعالیت در سطح یک شی یا سیستم.
- ارتباط پیامی (Message Communication):
- تنها راه ارتباط بین اشیاء، مانند ارسال یک مقدار یا پارامتر از یک شی به شی دیگر.
فازهای تولید نرمافزار
- تعریف:
- امکانسنجی (Feasibility Study): بررسی اقتصادی، قانونی و زمانبندی پروژه.
- تحلیل (Analysis): شناخت جنبههای مختلف سیستم و جمعآوری اطلاعات.
- طراحی (Designing): طراحی منطقی و فیزیکی سیستم.
- توسعه:
- کدنویسی (Coding): ترجمه طراحی به کد.
- آزمون (Testing): ارزیابی کارایی برنامه.
- استقرار (Deployment):
- جایگزینی سیستم قدیم با سیستم جدید.
- نگهداری:
- آموزش (Learning): آموزش سیستم جدید به کاربران.
- پشتیبانی (Supporting): بروزرسانی و اشکالزدایی.
تعریف نیازمندی و انواع آن
- نیازمندی (Requirement):
- شرایط یا قابلیتهای مورد نیاز کاربر برای حل مسئله یا رسیدن به یک هدف.
- انواع نیازمندی:
- عملکردی (Functional): کارکردهای سیستم مانند جستجو، ثبت نام و غیره.
- غیرعملکردی (Non-functional): کیفیت، قابلیت اطمینان، سرعت و زمان پاسخ.
- مستندسازی نیازمندیها:
- استفاده از زبان استاندارد مدلسازی مانند UML.
تکنیکهای استخراج نیازمندیها
- مشاهده:
- مستقیم (تحلیلگر شخصاً مشاهده میکند).
- غیرمستقیم (ضبط ویدئو یا صوت بدون اطلاع کاربر).
- پرسشنامه:
- ثبت عقاید گروهی از افراد به شکل یکنواخت.
- مصاحبه:
- آزاد (بدون محدودیت در سوالات).
- منظم (طبق روال مشخص).
- استفاده از کتابخانه و اسناد:
- جمعآوری اطلاعات از کتب، مقالات، و بایگانیها.
تحلیل شیگرا
- گامهای تحلیل شیگرا:
- استخراج نیازهای مشتری.
- شناسایی موارد کاربرد (Use Cases).
- انتخاب کلاسها و اشیاء.
- شناسایی صفات و اعمال هر شی.
- تعریف ساختار و سلسله مراتب کلاسها.
- ساخت مدل شی-رابطه و شی-رفتار.
- بازنگری مدل تحلیل برای مطابقت با موارد کاربرد.
طراحی شیگرا
- رویکرد طراحی شیگرا:
- تبدیل مدل تحلیل به مدل طراحی.
- طراحی معماری نرمافزار و تعریف زیرسیستمها.
- توسعه واسط کاربر.
- طراحی الگوریتمها و ساختمان دادهها.
- توصیف شی:
- توصیف درونی (Internal)، بیرونی (External) و پیادهسازی (Implementation).
آزمون شیگرا
- استراتژیهای آزمون:
- آزمون واحد (Unit Test): بررسی کد و پیمانهها.
- آزمون یکپارچگی (Integration Test): بررسی ارتباط بین پیمانهها.
- آزمون سیستم (System Test): بررسی عملکرد سیستم.
- آزمون اعتبارسنجی (Validation Test): بررسی سازگاری سیستم با محیط کاربر.
استقرار
- استراتژیهای استقرار:
- نصب آزمایشی سیستم جدید در بخشی از سازمان.
- نصب سیستم جدید و قطع سیستم قدیم.
- نصب تدریجی سیستم جدید و قطع تدریجی سیستم قدیم.
تمرین
- تعریف سیستم:
- عنوان سیستم، شرح کلی، اشیاء داخلی و خارجی، فعالیتها، ارتباطات بین اشیاء و فعالیتها، روند اجرا، قوانین سیستم.
سوالات و پاسخها به فارسی
۱. تفاوتهای اصلی بین برنامهنویسی ساختیافته و برنامهنویسی شیگرا چیست؟
- برنامهنویسی ساختیافته:
- رویکرد خطی و مرحلهای دارد.
- سیستم به زیرسیستمها تجزیه میشود و هر بخش بهصورت جداگانه تحلیل و پیادهسازی میشود.
- مدیریت خطا و اشکالزدایی سادهتر است.
- برنامهنویسی شیگرا:
- مبتنی بر اشیاء و ارتباطات بین آنهاست.
- از مفاهیمی مانند وراثت، چندریختی و کپسولهسازی استفاده میکند.
- قابلیت استفاده مجدد کد و انعطافپذیری بیشتری دارد.
۲. مفهوم وراثت در برنامهنویسی شیگرا را با یک مثال توضیح دهید.
- وراثت:
- امکان استفاده از خصوصیات و متدهای یک کلاس (سوپرکلاس) در کلاس دیگر (زیرکلاس) را فراهم میکند.
- مثال:
- کلاس
حیوان
(سوپرکلاس) دارای خصوصیاتی مانندنام
و متدی مانندحرکت()
است. - کلاس
سگ
(زیرکلاس) از کلاسحیوان
ارثبری میکند و میتواند از متدحرکت()
استفاده کند یا آن را تغییر دهد.
- کلاس
۳. مراحل کلیدی چرخه حیات توسعه نرمافزار (SDLC) چیست؟
- نیازسنجی: جمعآوری و تحلیل نیازهای کاربر.
- تحلیل: شناخت سیستم و طراحی راهحل.
- طراحی: طراحی منطقی و فیزیکی سیستم.
- پیادهسازی: کدنویسی و ساخت نرمافزار.
- آزمون: ارزیابی کارایی و رفع اشکالات.
- استقرار: نصب و راهاندازی سیستم.
- نگهداری: پشتیبانی، بروزرسانی و بهبود سیستم.
۴. چندریختی چگونه انعطافپذیری سیستمهای شیگرا را افزایش میدهد؟
- چندریختی:
- به اشیاء اجازه میدهد رفتارهای مختلفی را در شرایط متفاوت نشان دهند.
- مثال: متد
حرکت()
میتواند در کلاسماشین
به معنای رانندگی و در کلاسپرنده
به معنای پرواز باشد. - این ویژگی باعث میشود کد انعطافپذیرتر و قابل استفاده در شرایط مختلف باشد.
۵. هدف کپسولهسازی چیست و چگونه امنیت را بهبود میبخشد؟
- کپسولهسازی:
- پنهانسازی جزئیات و اطلاعات داخلی شی از دید دیگران.
- دسترسی به دادهها فقط از طریق متدهای تعریفشده امکانپذیر است.
- این کار امنیت را افزایش میدهد، زیرا دادهها بهطور مستقیم قابل تغییر نیستند و فقط از طریق متدهای کنترلشده قابل دسترسی هستند.
۶. فرآیند تحلیل شیگرا و مراحل کلیدی آن را توضیح دهید.
- استخراج نیازهای مشتری: جمعآوری نیازهای سیستم.
- شناسایی موارد کاربرد: تعیین سناریوهای استفاده از سیستم.
- انتخاب کلاسها و اشیاء: شناسایی اشیاء و کلاسهای اصلی.
- شناسایی صفات و اعمال هر شی: تعیین خصوصیات و رفتارهای هر شی.
- تعریف ساختار و سلسله مراتب کلاسها: سازماندهی کلاسها و روابط بین آنها.
- ساخت مدل شی-رابطه و شی-رفتار: نمایش ارتباطات و رفتارهای اشیاء.
- بازنگری مدل تحلیل: اطمینان از مطابقت مدل با نیازهای مشتری.
۷. تفاوتهای بین نیازمندیهای عملکردی و غیرعملکردی چیست؟
- نیازمندیهای عملکردی:
- کارکردهای سیستم مانند جستجو، ثبت نام و پرداخت.
- نیازمندیهای غیرعملکردی:
- کیفیت سیستم مانند سرعت، قابلیت اطمینان، و زمان پاسخ.
۸. چه تکنیکهایی برای جمعآوری نیازمندیهای نرمافزاری استفاده میشود و کدام یک موثرتر است؟
- تکنیکها:
- مشاهده مستقیم و غیرمستقیم.
- پرسشنامه.
- مصاحبه (آزاد و منظم).
- استفاده از کتابخانه و اسناد.
- موثرترین تکنیک:
- مصاحبه مستقیم، زیرا امکان جمعآوری اطلاعات دقیق و عمیق را فراهم میکند.
۹. نقش آزمون در توسعه نرمافزار شیگرا چیست و انواع آزمونها کدامند؟
- نقش آزمون:
- شناسایی خطاها و اطمینان از عملکرد صحیح نرمافزار.
- انواع آزمون:
- آزمون واحد (Unit Test): بررسی کد و پیمانهها.
- آزمون یکپارچگی (Integration Test): بررسی ارتباط بین پیمانهها.
- آزمون سیستم (System Test): بررسی عملکرد کلی سیستم.
- آزمون اعتبارسنجی (Validation Test): بررسی سازگاری سیستم با محیط کاربر.
۱۰. چالشهای اصلی در استقرار یک سیستم نرمافزاری جدید در سازمان چیست؟
- چالشها:
- مقاومت کاربران در برابر تغییر.
- هماهنگی بین سیستم قدیم و جدید.
- افزایش هزینهها و زمانبندی.
- نیاز به آموزش کاربران و کارمندان.
۱۱. انتزاع چگونه به سادهسازی سیستمهای پیچیده کمک میکند؟
- انتزاع:
- نادیده گرفتن جزئیات غیرضروری و تمرکز بر جنبههای مهم سیستم.
- این کار باعث میشود سیستم قابل درکتر و مدیریتپذیرتر شود.
۱۲. اهمیت موارد کاربرد (Use Cases) در تحلیل شیگرا چیست؟
- موارد کاربرد:
- سناریوهای استفاده از سیستم را توصیف میکنند.
- به شناسایی نیازهای سیستم و تعیین رفتارهای اشیاء کمک میکنند.
۱۳. همروندی چگونه در سیستمهای شیگرا پیادهسازی میشود؟
- همروندی:
- اجرای موازی دو یا چند فعالیت در سطح یک شی یا سیستم.
- با استفاده از تکنیکهایی مانند نخها (Threads) و فرآیندها (Processes) پیادهسازی میشود.
۱۴. اجزای کلیدی یک کلاس در برنامهنویسی شیگرا چیست؟
- اجزای کلاس:
- صفات (Attributes): خصوصیات شی.
- متدها (Methods): رفتارها و عملیات شی.
- سازنده (Constructor): برای ایجاد شی.
- مخرب (Destructor): برای از بین بردن شی.
۱۵. نمودار استخوان ماهی (Ishikawa) چیست و چگونه در تحلیل مشکل استفاده میشود؟
- نمودار استخوان ماهی:
- ابزاری برای شناسایی علل ریشهای مشکلات.
- مشکل در سر ماهی و علل احتمالی در استخوانها نمایش داده میشوند.
- به سازماندهی و تحلیل دلایل مشکلات کمک میکند.