سوالات مصاحبه مهندس نرم افزار
مهندسی نرمافزار یکی از مهمترین شاخههای علوم کامپیوتر است که با بهرهگیری از اصول مهندسی، به طراحی، توسعه، آزمون و نگهداری سیستمهای نرمافزاری میپردازد. برای موفقیت در مصاحبههای شغلی مهندس نرم افزار، آشنایی با موضوعاتی مانند چرخه توسعه نرمافزار (SDLC)، طراحی نرمافزار، کیفیت کد، تست و نگهداری اهمیت بسیار زیادی دارد.
در ادامه، مجموعهای از مهمترین سوالات مصاحبه مهندس نرم افزار به همراه پاسخ را بررسی میکنیم.
آخرین بروزرسانی: ۱۴۰۴/۰۹/۱۳
1. ویژگیهای اصلی یک نرمافزار چیست؟
مهمترین ویژگیهای یک نرمافزار کارآمد عبارتاند از:
- Functionality – کارکرد نشان میدهد نرمافزار تا چه حد وظایف و اهدافی را که برای آن طراحی شده، بهدرستی انجام میدهد.
- Reliability – قابلیت اعتماد بیانگر توان نرمافزار در اجرای صحیح و پایدار عملکردهایش در طول زمان است.
- Usability – قابلیت استفاده (کاربرپسندی) میزان سهولت استفاده، زمان یادگیری و تجربه کاربر هنگام کار با نرمافزار را شرح میدهد.
- Efficiency – کارایی به نحوه استفاده بهینه نرمافزار از منابع سیستم (پردازنده، حافظه، ذخیرهسازی و…) اشاره دارد.
- Flexibility – انعطافپذیری نشان میدهد اعمال تغییرات، افزودن قابلیت جدید یا اصلاح بخشهای مختلف نرمافزار تا چه حد ساده است.
- Maintainability – نگهداریپذیری معیاری از سهولت رفع اشکال، بهبود عملکرد یا افزودن ویژگیهای جدید در نرمافزار.
- Portability – قابلانتقال بودن میزان سازگاری نرمافزار با پلتفرمها، سیستمعاملها یا محیطهای مختلف بدون تغییرات عمده.
- Integrity – یکپارچگی توان نرمافزار در حفظ دقت و سازگاری دادهها در تمام مراحل اجرا و ذخیرهسازی.
2. انواع دستهبندی نرمافزارها چیست؟
نرمافزارها در حوزههای گوناگونی مانند بانکها، بیمارستانها، مدارس، بازارهای مالی، صنایع دفاعی و… مورد استفاده قرار میگیرند. این نرمافزارها را میتوان به روشهای مختلف دستهبندی کرد:
- دستهبندی بر اساس نوع کاربرد
- System Software – نرمافزار سیستمی
- نرمافزاری که سختافزار را مدیریت میکند؛ مانند سیستمعاملها.
- Application Software – نرمافزار کاربردی
- برنامههایی که برای انجام وظایف خاص توسط کاربر استفاده میشوند، مانند ویرایشگر متنی یا پخشکننده موسیقی.
- Web Application Software – نرمافزارهای تحت وب
- برنامههایی که از طریق مرورگر قابل استفادهاند؛ مانند ایمیل یا بانکداری آنلاین.
- Embedded Software – نرمافزارهای توکار
- نرمافزارهای تعبیهشده در دستگاههایی مانند خودروها، لوازمخانگی یا تجهیزات صنعتی.
- Reservation Software – نرمافزارهای رزرو
- برای مدیریت رزرو هتل، پرواز، رستوران و… به کار میروند.
- Business Software – نرمافزارهای تجاری
- برای مدیریت کسبوکارها مانند سیستمهای CRM و ERP به کار میروند.
- Artificial Intelligence Software – نرمافزارهای هوش مصنوعی
- برنامههایی که با یادگیری ماشین رفتارهای هوشمند نشان میدهند؛ مانند سیستمهای توصیهگر یا چتباتها.
- Scientific Software – نرمافزارهای علمی
- برای شبیهسازی، تحلیل داده و مدلسازی در تحقیقات علمی مورد استفاده قرار میگیرند.
- System Software – نرمافزار سیستمی
- دستهبندی بر اساس حق نشر (Copyright)
- Commercial Software – نرمافزار تجاری
- نرمافزاری که با پرداخت هزینه و محدودیتهای لایسنس قابل استفاده است.
- برای مدت محدود یا با امکانات محدود رایگان است؛ کاربر در صورت رضایت نسخه کامل را خریداری میکند.
- Freeware – نرمافزار رایگان
- کاملاً رایگان است، اما معمولاً کد منبع آن در دسترس نیست.
- Public Domain Software – نرمافزار عمومی
- بدون هیچ محدودیت کپیرایت، کاملاً آزاد برای استفاده، تغییر و انتشار است.
- Shareware – نرمافزار اشتراکی
- Commercial Software – نرمافزار تجاری
SDLC مخفف Software Development Life Cycle یا «چرخه عمر توسعه نرمافزار» است.
این چرخه مجموعهای از مراحل دقیق و ساختارمند است که برای توسعه، نگهداری، ارتقا و جایگزینی نرمافزار در سازمانها مورد استفاده قرار میگیرد.
هدف SDLC ارتقای کیفیت نرمافزار و استانداردسازی روند توسعه است.
۳. فازهای چرخه عمر توسعه نرمافزار (SDLC)
چرخه عمر توسعه نرمافزار یا SDLC از چند مرحله مهم تشکیل شده است که هر یک نقش کلیدی در تولید یک نرمافزار پایدار، قابلاعتماد و کارآمد دارند. در ادامه، این مراحل را بهصورت دقیق و قابلفهم مرور میکنیم.

1) برنامهریزی و تحلیل نیازمندیها (Planning and Requirement Analysis)
در این مرحله، اهداف پروژه مشخص میشود، نیازهای کاربران بررسی میگردد و تصویری روشن از اینکه نرمافزار باید چه کاری انجام دهد، ترسیم میشود. این فاز پایهگذار تمام مراحل بعدی است.
2) تعریف نیازمندیها (Defining Requirements)
در این بخش، نیازمندیها به دو بخش تفکیک میشوند:
- نیازمندیهای عملکردی (Functional Requirements): نرمافزار دقیقاً چه کاری باید انجام دهد.
- نیازمندیهای غیرعملکردی (Non-Functional Requirements): کیفیت انجام آن کار مثل سرعت، امنیت، مقیاسپذیری و تجربه کاربری.
3) طراحی معماری نرمافزار(Designing Architecture)
در این مرحله یک طرح جامع یا «نقشه راه معماری» برای نرمافزار آماده میشود. ساختار کلی، اجزای اصلی، فناوریهای مورد استفاده و نحوه تعامل اجزا مشخص میگردد تا توسعه طبق یک چارچوب صحیح انجام شود.
4) توسعه و پیادهسازی (Developing Product)
این بخش مرحله کدنویسی است؛ جایی که نرمافزار مطابق با طراحی انجام شده ساخته میشود. مهندسان نرمافزار ماژولها را توسعه میدهند و محصول بهتدریج شکل واقعی پیدا میکند.
5) تست محصول و یکپارچهسازی (Product Testing and Integration)
در این مرحله، نرمافزار تست میشود تا خطاها شناسایی و رفع شوند. همچنین بخشهای مختلف نرمافزار با یکدیگر ادغام میشوند تا عملکرد یکپارچه و بدون مشکل تضمین شود.
6) استقرار و نگهداری (Deployment and Maintenance)
در نهایت، نرمافزار منتشر و در محیط واقعی استفاده میشود. پس از استقرار، فرآیند نگهداری آغاز میشود تا مشکلات احتمالی حل شوند و آپدیتهای لازم برای بهبود عملکرد ارائه گردد.
4. مدلهای مختلف SDLC کداماند؟
در توسعه نرمافزار، مدلهای مختلفی برای اجرای SDLC به کار میرود. مهمترین آنها عبارتاند از:
Waterfall Model – مدل آبشاری
یک مدل خطی و مرحلهبهمرحله که هر فاز باید قبل از ورود به مرحله بعد کامل شود. مناسب پروژههایی با نیازمندیهای مشخص و بدون تغییر.
V-Model – مدل V (اعتبارسنجی و راستیآزمایی)
این مدل برای هر مرحله توسعه، یک مرحله تست متناظر دارد. تمرکز آن روی اطمینان از کیفیت در تمام مراحل است.
Incremental Model – مدل تکاملی
نرمافزار به بخشهای کوچک تقسیم و هر بخش بهصورت جداگانه توسعه و ارائه میشود. کاربران نسخههای اولیه را خیلی زود دریافت میکنند.
RAD Model – توسعه سریع نرمافزار
تمرکز این مدل بر ساخت سریع نسخههای اولیه، دریافت مداوم بازخورد و تکمیل سریع پروژه است. مناسب بازههای زمانی کوتاه و نیازهای مشخص.
Iterative Model – مدل تکرارشونده
توسعه در چند چرخه انجام میشود. هر چرخه شامل توسعه، تست، ارزیابی و اصلاح است.
Spiral Model – مدل مارپیچی
ترکیبی از طراحی و نمونهسازی با تمرکز جدی بر مدیریت ریسک. هر چرخه شامل برنامهریزی، تحلیل، طراحی، توسعه و تست است.
Prototype Model – مدل نمونهسازی
نسخه اولیه محصول (Prototype) سریع ساخته میشود تا کاربران با آن تعامل کنند و بازخورد بدهند. نسخه نهایی بعداً بر اساس این بازخورد تکمیل میشود.
Agile Model – مدل اجایل (چابک)
محبوبترین مدل امروزی. توسعه نرمافزار در اسپرینتهای کوتاه انجام میشود و کاربران در تمامی مراحل بازخورد میدهند. این مدل بسیار انعطافپذیر است و امکان تغییرات مستمر را فراهم میکند.
۵. مدل آبشاری (Waterfall) چیست و چه کاربردهایی دارد؟
مدل آبشاری یکی از قدیمیترین و سادهترین مدلهای توسعه نرمافزار است که بیشتر در پروژههای بزرگ و ساختاریافته به کار میرود. این مدل کاملاً خطی است و هر مرحله پس از تکمیل مرحله قبل آغاز میشود. به همین دلیل، برای پروژههایی مناسب است که نیازمندیها از ابتدا روشن و ثابت باشند.
مراحل مدل آبشاری
۱. جمعآوری و تحلیل نیازمندیها
تمام نیازهای مشتری جمعآوری و تحلیل میشود تا دقیقا مشخص شود نرمافزار باید چه کاری انجام دهد.
۲. طراحی (Design)
پس از شناخت کامل نیازمندیها، معماری و طراحی سیستم انجام میشود؛ از ساختار پایگاه داده تا طراحی ماژولها.
۳. پیادهسازی و تست واحد (Implementation & Unit Testing)
کدنویسی آغاز میشود و هر ماژول پس از توسعه، بهصورت جداگانه تست میشود.
۴. یکپارچهسازی و تست سیستم (Integration & System Testing)
پس از تکمیل ماژولها، آنها با یکدیگر ترکیب و کل سیستم تست میشود تا مشکلات احتمالی رفع گردد.
۵. استقرار (Deployment)
نرمافزار در محیط واقعی منتشر میشود و کاربران به آن دسترسی پیدا میکنند.
۶. نگهداری (Maintenance)
در این مرحله مشکلات واقعی کاربران رفع شده و بهروزرسانیها برای بهبود عملکرد منتشر میشود.
موارد استفاده مدل آبشاری
این مدل زمانی استفاده میشود که:
- نیازمندیها کاملاً مشخص و ثابت باشند.
- هیچ ابهامی در اجرای پروژه وجود نداشته باشد.
- فناوری مورد استفاده بهخوبی شناخته شده باشد.
- پروژه کوچک و کمهزینه باشد.
- ریسک پروژه بسیار کم یا صفر باشد.
مدل آبشاری (Waterfall Model)
مدل آبشاری یکی از کلاسیکترین مدلهای توسعه نرمافزار است که در آن مراحل توسعه بهصورت خطی و پشتسرهم انجام میشود. خروجی هر مرحله ورودی مرحله بعدی است و هیچ بازگشتی در آن وجود ندارد؛ به همین دلیل برای پروژههایی مناسب است که نیازمندیها از ابتدا کاملاً مشخص و بدون تغییر باشند.
۶. آزمون جعبه سیاه (Black Box Testing) چیست؟
تست جعبه سیاه یکی از مهمترین روشهای تست نرمافزار است که در آن تستکننده هیچ اطلاعی از ساختار داخلی، کد منبع و منطق پیادهسازی ندارد.
در این روش تنها ورودیها، خروجیها و رفتار قابل مشاهده نرمافزار بررسی میشود.
به همین دلیل این روش را با نامهای دیگری مانند:
- تست جعبه بسته
- تست جعبه مات
- Conducted Test
نیز میشناسند.
این روش برای بررسی عملکرد واقعی نرمافزار بر اساس نیازمندیهای تعریفشده بسیار کاربردی است.
۷. آزمون جعبه سفید (White Box Testing) چیست؟
تست جعبه سفید روشی است که در آن ساختار داخلی نرمافزار، منطق برنامهنویسی، مسیرهای کد، ساختار دادهها و طراحی داخلی بهصورت دقیق بررسی میشود.
به علت شفاف بودن همه چیز برای تستکننده، به آن تست شیشهای (Glass Box) یا تست ساختاری (Structural Test) نیز گفته میشود.
در این روش، هدف اطمینان از صحت منطق برنامه و پوششدهی کامل مسیرهای کدی است.
۸. تفاوت تست آلفا و بتا چیست؟
جدول زیر تفاوتهای اصلی تست آلفا و بتا را بهصورت ساده و کاربردی نشان میدهد:
| تست آلفا | تست بتا |
| شامل ترکیبی از تست جعبه سفید و سیاه است. | معمولاً مبتنی بر تست جعبه سیاه است. |
| توسط کارکنان داخلی شرکت انجام میشود. | توسط کاربران واقعی و خارج از سازمان انجام میشود. |
| در محل توسعهدهنده انجام میشود. | در محیط واقعی کاربر اجرا میشود. |
| آزمایش امنیت و قابلیت اعتماد معمولاً محدود است. | امنیت، پایداری و قابلیت اعتماد بهطور کامل بررسی میشود. |
| کیفیت محصول پیش از ورود به فاز بتا تضمین میشود. | بازخورد بلندمدت کاربر برای نسخه نهایی جمعآوری میشود. |
| نیازمند محیط کنترلشده یا آزمایشگاهی است. | به محیط آزمایشگاهی نیاز ندارد. |
| ممکن است مدت طولانی اجرا شود. | معمولاً چند هفته طول میکشد. |
| مشکلات سریعاً توسط توسعهدهندگان رفع میشود. | بسیاری از مشکلات در نسخههای بعدی اصلاح میشود. |
۹. Debugging یا اشکالزدایی چیست؟
اشکالزدایی (Debugging) فرآیند شناسایی، تحلیل و رفع خطاهای نرمافزاری است.
این مرحله از مهمترین بخشهای توسعه است زیرا حتی یک باگ کوچک میتواند باعث:
- اختلال در عملکرد نرمافزار
- کاهش کارایی
- تولید خروجی اشتباه شود.
اشکالزدایی معمولاً زمانبر و پیچیده است اما برای ایجاد نرمافزاری پایدار و قابل اعتماد ضروری است.
۱۰. مطالعه امکانسنجی (Feasibility Study) چیست؟
در مهندسی نرمافزار، مطالعه امکانسنجی بررسی میکند که آیا انجام یک پروژه از نظر فنی، اقتصادی، عملیاتی و زمانی قابل انجام است یا خیر.
این مطالعه موارد زیر را مشخص میکند:
- آیا فناوری لازم برای پروژه وجود دارد؟
- آیا اجرای پروژه از نظر هزینه مقرونبهصرفه است؟
- آیا از نظر عملیاتی قابل اجراست؟
- چه ریسکهایی ممکن است باعث شکست پروژه شوند؟
مطالعه امکانسنجی کمک میکند پروژههای پرریسک خیلی زود شناسایی شده و از اتلاف هزینه و زمان جلوگیری شود.
۱۱. نمودار Use Case چیست؟
Use Case Diagram یکی از نمودارهای رفتارشناسی در UML است که تعامل کاربران (Actors) با سیستم را نمایش میدهد.
این نمودار شامل سه بخش اصلی است:
- سیستم: محدوده و آنچه قرار است ساخته شود
- بازیگران (Actors): افرادی یا سیستمهایی که با نرمافزار در تعامل هستند
- Use Case: فعالیتهایی که بازیگران در سیستم انجام میدهند
این نمودار کمک میکند نیازهای کاربران بهصورت بصری و ساده درک شود.
12. تفاوت Verification و Validation چیست؟
در جدول زیر تفاوت این دو مفهوم کاملاً مشخص شده است:
| Verification (بررسی) | Validation (اعتبارسنجی) |
| بررسی مستندات، طراحی و کد بدون اجرا | اجرای نرمافزار و تست عملکرد واقعی |
| بدون اجرای کد انجام میشود | همیشه شامل اجرای کد است |
| ارزیابی انسانمحور | ارزیابی ماشینمحور |
| شامل بازبینی، مرور، Walkthrough و Desk-Checking | شامل تست جعبه سیاه، سفید و خاکستری |
| بررسی میکند آیا محصول مطابق مشخصات است | بررسی میکند آیا محصول نیاز کاربر را برآورده میکند |
| برخی خطاها را کشف میکند که Validation نمیتواند | برخی خطاها را کشف میکند که Verification نمیتواند |
| تمرکز بر مستندات، طراحی، معماری | تمرکز بر محصول واقعی و عملکرد آن |
| توسط تیم QA انجام میشود | توسط تیم تست انجام میشود |
| معمولاً پیش از Validation انجام میشود | معمولاً پس از Verification انجام میشود |
| یک فعالیت سطح پایین (Low-Level) است | یک فعالیت سطح بالا (High-Level) است |
۱۳. Baseline یا خط مبنا چیست؟
«خط مبنا» معیاری است که نشان میدهد یک مرحله از چرخه توسعه نرمافزار به طور کامل به پایان رسیده است. زمانی که تمام فعالیتهای مربوط به یک فاز انجام شود، آن مرحله تکمیل شده تلقی میشود و بهعنوان نقطه مرجع یا baseline برای ورود به مرحله بعدی مورد استفاده قرار میگیرد.
۱۴. Cohesion و Coupling چیستند؟
Cohesion (همبستگی) میزان یکپارچگی و تمرکز یک ماژول روی یک وظیفه مشخص را نشان میدهد. هرچه همبستگی در یک ماژول بیشتر باشد، آن ماژول مستقلتر عمل میکند و برای انجام وظیفه خود کمتر نیازمند سایر بخشهای برنامه است. بهترین حالت زمانی است که یک ماژول تنها یک کار مشخص انجام دهد.
Coupling (کوپلینگ یا وابستگی) میزان ارتباط و وابستگی میان ماژولها را توصیف میکند. هرچه تعداد تبادلات اطلاعات، پیچیدگی رابطها و میزان تعامل میان دو ماژول بیشتر باشد، کوپلینگ آنها بالاتر است.
هدف در مهندسی نرمافزار این است که ماژولها دارای همبستگی بالا و کوپلینگ پایین باشند تا سیستم قابل مدیریتتر و قابل نگهداریتر شود.
۱۵. مدل توسعه نرمافزار چابک (Agile) چیست؟
مدل توسعه نرمافزار Agile ترکیبی از مدلهای تکرارشونده و افزایشی است که روی انعطافپذیری فرآیند و رضایت مشتری تمرکز دارد. در این روش، محصول به بخشهای کوچکتری تقسیم میشود و هر بخش در یک چرخه کوتاه شامل برنامهریزی، تحلیل، طراحی، کدنویسی، تست واحد و تست پذیرش تکمیل میشود.
مزایای Agile:
- ارائه سریع و مداوم نسخههای کاربردی نرمافزار
- تعامل مستمر بین مشتری، توسعهدهندگان و تیم تست
- همکاری نزدیک روزانه بین بخش کسبوکار و تیم فنی
- تمرکز دائمی بر طراحی اصولی و کیفیت فنی
- انعطاف بالا در برابر تغییرات، حتی تغییرات دیرهنگام
- قابلیت انطباق سریع با شرایط و نیازهای جدید
۱۶. تفاوت Quality Assurance و Quality Control چیست؟
در مهندسی نرمافزار، تضمین کیفیت (QA) و کنترل کیفیت (QC) دو مفهوم مرتبط اما متفاوتاند:
| تضمین کیفیت (QA) | کنترل کیفیت (QC) |
| تضمین میکند که فرآیند تولید به کیفیت موردنظر خواهد رسید | بررسی میکند که محصول نهایی با کیفیت لازم مطابقت دارد |
| تکنیکی مدیریتی برای نظارت بر کیفیت فرآیندها | تکنیکی عملی برای ارزیابی کیفیت محصول |
| شامل اجرای برنامه نیست | همیشه شامل اجرای برنامه و تست است |
| رویکردی پیشگیرانه | رویکردی اصلاحی |
| فرآیندمحور | محصولمحور |
| هدف جلوگیری از ایجاد نقص | هدف شناسایی و رفع نقص |
| توسط تیم QA در کل چرخه توسعه انجام میشود | توسط تیم تست در چرخه تست انجام میشود |
| مثال: Verification | مثال: Validation |
۱۷. مدل اسپیرال (Spiral Model) و معایب آن چیست؟
مدل اسپیرال یکی از مدلهای شناختهشده در چرخه توسعه نرمافزار است که یک رویکرد سیستماتیک، تکرارشونده و مبتنی بر مدیریت ریسک ارائه میدهد. این مدل از چند «حلقه» تشکیل شده که هر کدام یک فاز از توسعه نرمافزار را نمایش میدهند. تعداد حلقهها از یک پروژه تا پروژه دیگر متفاوت است.
در هر تکرار، فعالیتهای برنامهریزی، تحلیل ریسک، طراحی، توسعه و تست انجام میشود و با هر دور، محصول کاملتر میشود.
معایب مدل اسپیرال
با وجود مزایای متعدد، مدل اسپیرال چالشها و محدودیتهای جدی نیز دارد:
- اجرای آن هزینهبر است و برای پروژههای کوچک مقرونبهصرفه نیست.
- مرحله تحلیل ریسک نیازمند تخصص بسیار بالا و تجربه حرفهای است.
- موفقیت کل پروژه وابسته به کیفیت تحلیل ریسک است و هر خطا در این بخش میتواند پروژه را منحرف کند.
- برای پروژههای کوچک و ساده مناسب نیست، زیرا مدیریت و اجرای این مدل بیش از حد پیچیده است.
۱۸. مدل RAD چیست و چه محدودیتهایی دارد؟
مدل توسعه سریع برنامهها یا RAD نخستینبار توسط IBM در دهه ۱۹۸۰ معرفی شد. این مدل یکی از روشهای توسعه افزایشی است که در آن چرخه تولید نرمافزار بسیار کوتاه است. RAD زمانی استفاده میشود که نیازمندیها کاملاً مشخص باشند و ساخت محصول بهصورت اجزای ماژولار و قابلاستفاده مجدد انجام شود.
اما این مدل محدودیتهایی نیز دارد:
- پروژههای بزرگ اما مقیاسپذیر در RAD نیازمند نیروی انسانی ماهر و کافی هستند.
- اگر تیم توسعه و مشتری تعهد کافی در بازه زمانی بسیار کوتاه نداشته باشند، پروژه به شکست منجر میشود.
- اگر سیستم بهطور مناسب قابل ماژولسازی نباشد، استفاده از RAD بسیار مشکلساز خواهد بود.
۱۹. تست رگرسیون چیست؟
تست رگرسیون یکی از انواع تست نرمافزار است که برای اطمینان از این انجام میشود که تغییرات جدید در کد، عملکردهای موجود را دچار اختلال نکرده باشد.
در این روش، بخشی از تستهای قبلی دوباره اجرا میشود تا مشخص شود:
- آیا ویژگیهای قبلی همچنان درست کار میکنند؟
- آیا تغییرات جدید باعث ایجاد خطای جانبی نشدهاند؟
این مرحله برای بررسی صحت عملکرد نرمافزار پس از هر بهروزرسانی ضروری است.
۲۰. CASE Tools چیست؟
CASE مخفف Computer-Aided Software Engineering است.
ابزارهای CASE مجموعهای از نرمافزارهای تخصصی هستند که برای خودکارسازی، تسهیل و سرعتبخشی فعالیتهای چرخه توسعه نرمافزار استفاده میشوند. این ابزارها به توسعهدهندگان کمک میکنند:
- سیستمها را طراحی و مدلسازی کنند
- معماری و پایگاهداده را ثبت و یکپارچهسازی کنند
- سازگاری طرحها را تضمین کنند
بهطور خلاصه، CASE یک بسته نرمافزاری برای ارتقای کیفیت طراحی و تولید سیستمهای نرمافزاری است.
۲۱. DFD فیزیکی و منطقی چیست؟
نمودار جریان داده یا DFD دو نوع اصلی دارد: فیزیکی و منطقی.
- DFD فیزیکی:
- روی نحوه پیادهسازی واقعی سیستم تمرکز دارد. شامل سختافزار، کارکنان، فایلها و کلیه منابعی است که برای اجرای فرآیندهای تجاری استفاده میشوند.
- DFD منطقی:
- نشان میدهد در سیستم چه اتفاقی میافتد، بدون اشاره به نحوه پیادهسازی.
بهعنوان مثال، در سیستم بانکی، جریان داده میان مشتری، حسابها و تراکنشها را نمایش میدهد، بدون اشاره به سرورها یا تجهیزات.
۲۲. مهندسی مجدد نرمافزار (Software Re-engineering) چیست؟
مهندسی مجدد نرمافزار فرآیندی است که طی آن یک سیستم نرمافزاری قدیمی بررسی، اصلاح و بازپیکربندی میشود تا عملکرد، کیفیت و کارایی آن بهبود یابد.
هدف اصلی این روش:
- کاهش هزینهها
- افزایش کیفیت
- بهبود سرعت ارائه خدمات
- افزایش قابلیت نگهداری و توسعه سیستم
مهندسی مجدد باعث میشود نرمافزارهای قدیمی به نسخهای کارآمدتر و مدرنتر تبدیل شوند.
۲۳. مهندسی معکوس چیست؟
مهندسی معکوس نرمافزار فرآیندی است که طی آن طراحی، نیازمندیها و عملکردهای یک سیستم از طریق تحلیل کد موجود، استخراج میشود.
در این روش یک بانک اطلاعاتی از ساختار برنامه ایجاد شده و اسناد لازم برای سیستم (مخصوصاً سیستمهای قدیمی) تولید میشود.
اهداف اصلی مهندسی معکوس:
- مقابله با پیچیدگیهای سیستم
- بازیابی اطلاعات گمشده
- شناسایی اثرات جانبی تغییرات
- استخراج ساختارهای سطح بالاتر
- تسهیل استفاده مجدد از اجزای نرمافزار
۲۴. تکنیکهای برآورد پروژههای نرمافزاری کدامند؟
تعدادی تکنیک برای برآورد پروژههای نرمافزاری وجود دارد:
- PERT
- WBS (Work Breakdown Structure)
- روش دلفی (Delphi Method)
- User Case Point
برای اطلاعات بیشتر میتوانید به مقالهی تکنیکهای برآورد پروژههای نرمافزاری مراجعه کنید.
۲۵. چگونه میتوان پیچیدگی نرمافزار را اندازهگیری کرد؟
برای اندازهگیری پیچیدگی نرمافزار در مهندسی نرمافزار، روشهای مختلفی وجود دارد:
- خطوط کد (Lines of Code)
- پیچیدگی سایکلو ماتیک (Cyclomatic Complexity)
- وابستگی کلاسها (Class Coupling)
- عمق وراثت (Depth of Inheritance)
برای جزئیات بیشتر میتوانید به مقالهی پیچیدگی نرمافزار مراجعه کنید.
۲۶. ابزارهای تحلیل و طراحی نرمافزار کدامند؟
برخی از ابزارهای تحلیل و طراحی نرمافزار عبارتند از:
- نمودارهای جریان داده (Data Flow Diagrams)
- چارتهای ساختاری (Structured Charts)
- انگلیسی ساختاریافته (Structured English)
- فرهنگ لغت دادهها (Data Dictionary)
- نمودارهای ورودی-پردازش-خروجی سلسلهمراتبی (HIPO: Hierarchical Input Process Output Diagrams)
- نمودارهای موجودیت-رابطه و جداول تصمیمگیری (ERD & Decision Tables)
۲۷. انواع ابزارهای CASE کدامند؟
ابزارهای Computer-Aided Software Engineering (CASE) شامل موارد زیر هستند:
- ابزار تحلیل نیازمندیها (Requirement Analysis Tool)
- ابزار تحلیل ساختاری (Structure Analysis Tool)
- ابزار طراحی نرمافزار (Software Design Tool)
- ابزار تولید کد (Code Generation Tool)
- ابزار تولید تست کیس (Test Case Generation Tool)
- ابزار تولید مستندات (Document Production Tool)
- ابزار مهندسی معکوس (Reverse Engineering Tool)
برای اطلاعات بیشتر به مقالهی مهندسی نرمافزار به کمک کامپیوتر (CASE) مراجعه کنید.
۲۸. SRS چیست؟
Software Requirement Specification (SRS) یا مشخصات نیازمندیهای نرمافزار، یک سند کامل شامل توصیف نیازمندیهای نرمافزار است که برای توسعه موفق یک سیستم نرمافزاری باید برآورده شود. این نیازمندیها میتوانند عملکردی یا غیرعملکردی باشند و بر اساس نوع نیاز تعریف میشوند. تعامل بین مشتریان و پیمانکاران ضروری است تا نیازهای واقعی مشتری بهطور کامل درک شود.
برای جزئیات بیشتر به مقالهی فرمت مشخصات نیازمندیهای نرمافزار مراجعه کنید.
۲۹. DFD سطح-۰ چیست؟
بالاترین سطح تجرید در نمودار جریان داده Level 0 DFD نامیده میشود که به آن Context-Level DFD نیز گفته میشود. این نمودار، کل سیستم اطلاعاتی را در قالب یک تصویر کلی نشان میدهد.
۳۰. Function Point چیست؟
Function Point یک معیار استاندارد برای سنجش عملکردهای مختلف یک نرمافزار است. این معیارها از دید کاربر اندازهگیری میشوند، یعنی بر اساس آنچه کاربر درخواست میکند و دریافت میکند.
۳۱. فرمول محاسبه پیچیدگی سایکلو ماتیک چیست؟
فرمول محاسبه پیچیدگی سایکلو ماتیک برنامه به صورت زیر است:
C=E−N+2PC = E – N + 2PC=E−N+2P
که در آن:
- EEE = تعداد یالها (Edges)
- NNN = تعداد رأسها (Vertices)
- PPP = تعداد شرطها (Predicates)
مثال:
A = 10
IF B > C THEN
A = B
ELSE
A = C
ENDIF
Print A
Print B
Print C
۳۱. پیچیدگی سایکلو ماتیک کد بالا چقدر است؟
پیچیدگی سایکلو ماتیک کد بالا با استفاده از نمودار جریان کنترل محاسبه میشود. این نمودار شامل هفت گره (Nodes) و هفت یال (Edges) است، بنابراین پیچیدگی سایکلو ماتیک به صورت زیر خواهد بود:
C=E−N+2=7−7+2=2C = E – N + 2 = 7 – 7 + 2 = 2C=E−N+2=7−7+2=2
۳۲. پیچیدگی سایکلو ماتیک ماژولی که ۱۷ یال و ۱۳ گره دارد چقدر است؟
فرمول پیچیدگی سایکلو ماتیک:
C=E−N+2C = E – N + 2C=E−N+2
با جایگذاری مقادیر:
C=17−13+2=6C = 17 – 13 + 2 = 6C=17−13+2=6
۳۳. مدل COCOMO چیست؟
COCOMO (Constructive Cost Model) یک مدل تخمین هزینه و تلاش توسعه نرمافزار است. این مدل برای برآورد نیازمند اطلاعات اندازه نرمافزار است که میتواند به سه شکل ارائه شود:
- Object Points
- Function Points
- Lines of Source Code
۳۴. تخمین تلاش توسعه نرمافزار ارگانیک در مدل پایه COCOMO
در مدل پایه COCOMO، تخمین تلاش برای نرمافزار ارگانیک به صورت زیر تعریف میشود:
Effort=2.4×(KLOC)1.05 PMEffort = 2.4 \times (KLOC)^{1.05} \text{ PM}Effort=2.4×(KLOC)1.05 PM
۳۵. فعالیتهای Umbrella شامل چه مواردی هستند؟
فعالیتهای چارچوب فرآیند مهندسی نرمافزار با مجموعهای از فعالیتهای سطح بالا تکمیل میشوند. Umbrella Activities معمولاً برای کل پروژه نرمافزاری اعمال میشوند و به تیم نرمافزار کمک میکنند تا پیشرفت، کیفیت، تغییرات و ریسکها را مدیریت و کنترل کنند. برخی از این فعالیتها عبارتند از:
- پیگیری و کنترل پروژه نرمافزاری
- مدیریت ریسک
- تضمین کیفیت نرمافزار
- بررسی فنی (Technical Review)
- اندازهگیری و ارزیابی
- مدیریت پیکربندی نرمافزار
- مدیریت قابلیت استفاده مجدد (Reusability)
- آمادهسازی و تولید محصولات کاری (Work Products)
۳۶. بهترین مدل SDLC کدام است؟
انتخاب بهترین مدل SDLC یک تصمیم استراتژیک است که نیازمند درک کامل از نیازمندیها، محدودیتها و اهداف پروژه است. هر مدل نقاط قوت و ضعف خود را دارد، اما نکته کلیدی تطبیق مدل انتخابی با ویژگیهای پروژه است. انعطافپذیری، سازگاری و ارتباط موثر با تیم، در مدیریت پیچیدگی توسعه نرمافزار بسیار مهم است. در نهایت، بهترین مدل SDLC مدلی است که بیشترین هماهنگی با نیازها و شرایط پروژه داشته باشد.
۳۷. مفهوم Black Hole درDFD چیست؟
در نمودار جریان داده، مفهوم Black Hole به این معنا است که یک مرحله پردازش ورودی دارد اما خروجی ندارد. به عبارتی، دادهها تنها وارد مرحله میشوند و هیچ خروجی تولید نمیشود.
۳۸. کدام نوع تست برای شبیهسازی خطا استفاده میشود؟
با افزایش انتظارات از کیفیت نرمافزار و پیچیدگی اجزای آن، توسعهدهندگان موظف به انجام تستهای مؤثر هستند. در این زمینه، Mutation Testing به عنوان یک تکنیک fault injection برای سنجش کفایت تست استفاده میشود. این نوع تست در حالت شبیهسازی خطا (fault simulation) عمل میکند.
۳۹. کدام مدل برای بررسی قابلیت اطمینان نرمافزار استفاده میشود؟
برای بررسی قابلیت اطمینان نرمافزار از مدل Rayleigh استفاده میشود. این مدل یک مدل پارامتریک است که بر اساس توزیع آماری خاصی تعریف شده است. با برآورد پارامترهای توزیع آماری از دادههای پروژه، میتوان نرخ خطا و قابلیت اطمینان نرمافزار را پیشبینی کرد.
۴۰. تفاوت ریسک و عدم قطعیت (Uncertainty) چیست؟
- ریسک قابل اندازهگیری است، اما عدم قطعیت قابل اندازهگیری نیست.
- ریسک قابل محاسبه است، اما عدم قطعیت قابل شمارش نیست.
- برای ریسک میتوان برنامهریزی پیشگیرانه انجام داد، اما برای عدم قطعیت نمیتوان پیشبینی کرد.
- برخی مشاهدات تجربی میتوانند به درک ریسک کمک کنند، اما عدم قطعیت هرگز نمیتواند بر اساس مشاهدات تجربی مشخص شود.
- ریسک پس از تلاش میتواند به یقین تبدیل شود، اما عدم قطعیت قابل تبدیل به یقین نیست.
- پس از برآورد ریسک، میتوان تصمیم گرفت، اما محاسبه عدم قطعیت ممکن نیست، بنابراین تصمیمگیری در مورد آن ممکن نیست.
۴۱. CMM چیست؟
برای تعیین وضعیت فعلی بلوغ فرآیند یک سازمان، SEI از ارزیابی استفاده میکند که در قالب سیستم پنجسطحی رتبهبندی ارائه میشود. این رتبهبندی میزان تطابق با مدل بلوغ قابلیت (CMM) را مشخص میکند و فعالیتهای کلیدی مورد نیاز در سطوح مختلف بلوغ فرآیند را تعریف میکند. پنج سطح بلوغ عبارتند از:
- سطح ۱: ابتدایی (Initial)
- سطح ۲: تکرارپذیر (Repeatable)
- سطح ۳: تعریفشده (Defined)
- سطح ۴: مدیریتشده (Managed)
- سطح ۵: بهینهسازیشده (Optimizing)
۴۲. چرا نرمافزار مانند سختافزار فرسوده نمیشود اما با گذر زمان دچار کاهش کیفیت میشود؟
نرمافزار به صورت فیزیکی فرسوده نمیشود، اما با گذر زمان و توسعه آن، کیفیتش کاهش مییابد زیرا هر تغییر یا افزودن ویژگی جدید ممکن است خطاهای جدید یا مشکلات سازگاری ایجاد کند. هر بار که تغییرات یا بهروزرسانیها اعمال میشوند، احتمال بروز خطا در تعامل بخشهای مختلف نرمافزار افزایش مییابد. اگر این مسائل مدیریت نشوند، نرمافزار پیچیدهتر و مستعد خرابی میشود که بر عملکرد و قابلیت اطمینان آن تأثیر منفی میگذارد.
۴۳. عناصر مهم در ساخت مدل سیستم کدامند؟
در ساخت مدل سیستم، باید به موارد زیر توجه کرد:
- نوع و اندازه نرمافزار
- تجربه کاربران و استفاده از سیستمهای مشابه پیشین
- سطح دشواری در شناسایی نیازمندیهای کاربران
- تکنیکها و ابزارهای توسعه
- وضعیت تیم توسعه
- ریسکهای توسعه
- روشهای توسعه نرمافزار
طراحی یک برنامه توسعه نرمافزار منطقی و مناسب، پیشنیاز مهمی برای موفقیت پروژه نرمافزاری است.
۴۴. نگهداری تطبیقی (Adaptive Maintenance) چیست؟
نگهداری تطبیقی به تغییرات و بهروزرسانیهای نرمافزار گفته میشود که زمانی انجام میشود که:
- مشتری نیاز دارد محصول روی پلتفرم جدید یا سیستم عامل جدید اجرا شود
- نیاز به ارتباط نرمافزار با سختافزار یا نرمافزار جدید وجود دارد
۴۵. WBS چیست؟
WBS (Work Breakdown Structure) یا ساختار شکست کار، به تقسیم یک پروژه بزرگ و پیچیده به وظایف ساده، مستقل و قابل مدیریت گفته میشود.
برای ایجاد WBS:
- هر گره به صورت بازگشتی به زیرفعالیتهای کوچکتر تقسیم میشود
- تا زمانی که در سطح برگ، فعالیتها غیرقابل تقسیم و مستقل شوند
WBS از رویکرد بالا به پایین (Top-Down) پیروی میکند.
۴۶. چگونه اندازه یک محصول نرمافزاری را تعیین کنیم؟
برآورد اندازه نرمافزار بخش مهمی از مدیریت پروژه نرمافزاری است و به مدیر پروژه کمک میکند تلاش و زمان لازم برای ساخت پروژه را پیشبینی کند. برخی معیارهای رایج برای برآورد اندازه نرمافزار عبارتند از:
- خطوط کد (Lines of Code)
- تعداد موجودیتها در نمودار ER
- تعداد کل فرایندها در نمودار جریان داده تفصیلی
- نقاط عملکرد (Function Points)
۴۷. همزمانی (Concurrency) چیست و چگونه حاصل میشود؟
همزمانی به توانایی سیستم برای اجرای چندین فرایند یا وظیفه به طور همزمان اشاره دارد. در یک سیستم همزمان:
- وظایف میتوانند در فواصل زمانی همپوشان شروع، اجرا و پایان یابند
- کارایی و پاسخدهی کلی سیستم افزایش مییابد
زبانهای برنامهنویسی مختلفی از همزمانی پشتیبانی میکنند، مانند Java و C++.
۴۸. چرا ماژولار سازی در مهندسی نرمافزار مهم است؟
برنامهنویسی ماژولار با تقسیم کد به توابعی که هرکدام تنها بخشی از عملکرد کلی را انجام میدهند، باعث میشود:
- کد راحتتر خوانده و نگهداری شود
- اندازه فایلها کوچکتر و خواناتر شود
- قابلیت مدیریت و تست بخشهای مختلف افزایش یابد
۴۹. کدام مدل فرآیند، خطاها را قبل از بروز مشکل حذف میکند؟
Clean Room Software Engineering یک رویکرد توسعه نرمافزار برای تولید محصولات با کیفیت است. در این روش:
- نرمافزار با کیفیت بالا تولید میشود
- کنترل کیفیت (QA) در هر مرحله از توسعه انجام میشود تا خطاها پیش از انتشار شناسایی و اصلاح شوند
۵۰. تفاوت EXE و DLL چیست؟
- EXE: فایل اجرایی است که میتواند در فضای آدرس خود اجرا شود
- DLL: کتابخانه لینک داینامیک است که فضای آدرس مستقل ندارد و باید توسط یک برنامه میزبان اجرا شود
موضوعات مهم برای مصاحبه مهندس نرم افزار:
۱. چرخه حیات توسعه نرمافزار (SDLC)
۲. طراحی نرمافزار و کیفیت کد
۳. تست و نگهداری نرمافزار
منابع مرتبط:
برای موفقیت در مصاحبهها باید به مفاهیم زیر تسلط داشته باشید:
۱. مفاهیم پایه:
- طبقهبندی نرمافزار
- تکامل نرمافزار
- برنامهنویسی افراطی (XP)
- مدلهای توسعه چابک (Agile)
- طراحی رابط کاربری
- مدل COCOMO
- CMM
- فرآیندهای شبهتجدید (Quasi-Renewal)
- پیچیدگی سایکلو ماتیک
- استخراج نیازمندیها
۲. موضوعات پیشرفته:
- کیفیت نرمافزار
- مدیریت پیکربندی نرمافزار
- شش سیگما (Six Sigma)
- قابلیت اطمینان نرمافزار
- دیباگینگ
- نگهداری نرمافزار
- انسجام (Cohesion) و وابستگی (Coupling)
- تست آلفا و بتا
- ابزار Selenium
