درس‌های دانشگاهی
مهندسی نرم‌افزار

  • assistant_photo 
    هدف درس
    این درس به بیان فنون تجربه‌شده‌ای می‌پردازد که برای تولید نرم‌افزارهای ارزشمند و با کیفیت، با بهره‌وری بالا استفاده می‌شوند. به این ترتیب محتوای درس نیز حول سه جنبه ارزش، کیفیت و بهره‌وری ارائه می‌شود. پس از مروری بر اهداف مهندسی نرم‌افزار و تاریخچه‌ای خلاصه از نحوه تکامل فرایندهای تولید نرم‌افزار، محوریت درس بر روش‌های چابک توسعه نرم‌افزار قرار می‌گیرد. با گذراندن این درس، دانشجویان ضمن آشنایی با فنون نوین توسعه نرم‌افزار در حد یک درس نظری، توانایی استدلال درباره تأثیرات این فنون روی جنبه‌های متفاوت توسعه نرم‌افزار و تحلیل موقعیت‌های مختلف را فرا می‌گیرند.
  • toc 
    عناوین مباحث
    • تکامل فرایندهای تولید نرم‌افزار
    • نرم‌افزار ارزشمند
    • کیفیت نرم‌افزار
    • معماری نرم‌افزار
    • توسعه دوره‌ای (iterative)
    • پرکتیس‌های توسعه در روش‌های چابک
    • یکپارچه‌سازی و تحویل مستمر
    • مدیریت آزمون
    • کیفیت کد و بازآرایی
    • حلقه‌های فیدبک در توسعه نرم‌افزار
    • مدیریت ریسک
    • عوامل انسانی در توسعه نرم‌افزار
    • مهندسی نرم‌افزار در دانشگاه و صنعت
  • supervisor_account 
    یاددهی و یادگیری

    یادگیری اصلی در این درس در قالب تکلیف‌های درس انجام می‌شود که بیشتر جنبه پژوهشی و تحلیلی دارند. دانشجویان در قالب گروه‌های سه‌نفره هفت تکلیف را برای این درس انجام می‌دهند. نمونه‌هایی از تکلیف‌های این درس در همین صفحه قابل دسترس هستند. دانشجویان پس از انجام و بارگذاری پاسخ تکلیف‌ها موظف به تحویل تکلیف‌ها به استاد درس هستند که طی این فرایند با مشکلات احتمالی در تحلیل‌های ارائه شده آشنا می‌شوند.

  • note 
    منابع

    گستردگی انواع دامنه‌های نرم‌افزاری و وجود مکتب‌های مختلف در توسعه نرم‌افزار باعث می‌شود یک منبع جامع که عمیقاً فنون مورد بحث را مورد بررسی قرار دهد وجود نداشته باشد. در این درس از تنوعی از (بخش‌هایی از) کتاب‌های مختلف و همین‌طور منابع برخط موجود (مانند نوشته‌های مارتین فاولر) استفاده می‌شود.

    کتاب‌هایی که بخش‌های بیشتری از آنها در این درس مورد استفاده قرار گرفته‌اند عبارتند از:

    همانطور که اشاره شد سایت مارتین فاولر مجموعه راهنماهای بسیار مفیدی را از نوشته‌های او و همکارانش جمع‌آوری کرده که در عناوین زیر مورد استفاده قرار می‌گیرد:

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

جایگاه معماری نرم‌افزار در فرایندهای توسعه

برنامه‌سازی پیشرفته

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

    مباحث این درس در قالب فایل‌های ویدیویی ضبط‌شده ارائه می‌گردد که شامل توضیحات مدرس روی اسلایدها و متن برنامه‌ها است. ارائه مفاهیم عمدتاً حول برنامه‌های نمونه کوچک صورت می‌گیرد. علاوه بر محتوای ضبط‌شده، کلاس‌های برخط دوره‌ای برای بحث و بررسی دقیق‌تر مطالب تشکیل می‌شود. در پایان هر مبحث تمرین‌های کوتاهی برای مرور مطالب در اختیار دانشجویان قرار می‌گیرد.

    یادگیری اصلی در این درس در قالب تکلیف‌های برنامه‌نویسی انجام می‌شود. دانشجویان به صورت انفرادی هفت تکلیف برنامه‌نویسی را برای این درس انجام می‌دهند. تکلیف هفتم پروژه پایانی محسوب می‌شود که خود آن در سه مرحله انجام می‌شود. نمونه‌هایی از تکلیف‌های این درس در همین صفحه قابل دسترس هستند. دانشجویان پس از انجام و بارگذاری پاسخ تکلیف‌ها موظف به تحویل تکلیف‌ها به دستیاران آموزشی هستند که طی این فرآیند با مشکلات احتمالی در پاسخ و همینطور سبک برنامه‌نویسی خود آشنا می‌شوند.

  • note 
    منابع

    ویدیوهای ارائه حضوری این درس مربوط به چند سال پیش در سایت مکتب‌خونه قابل دسترس است. البته طی این مدت تغییراتی در محتوای درس رخ داده، ولی کلیت مطالب کماکان قابل استفاده هستند.

    متن برنامه‌های نمونه مورد بحث در محتوای درس از مخزن گیت‌هاب درس قابل دسترسی هستند.

    هر چند یادگیری اصلی با نوشتن برنامه حاصل می‌شود، اما اگر تمایل به مطالعه کتاب دارید، کتاب C++ How to Program برای این منظور پیشنهاد می‌شود.

  • assignment 
    نمونه تکلیف‌ها
  • question_answer 
    پرسش‌های متداول
    • من از سایت مکتب‌خونه درس را مطالعه می‌کنم. آیا اسلایدهای درس از جایی قابل دسترس است؟
      متاسفانه به خاطر تغییراتی که درس از زمان ارائه حضوری داشته اسلایدهای درس به سبک مکتب‌خونه در اختیارم نیست.

دو نمونه از محتوای درس درباره برنامه‌نویسی شیءگرا

مدل‌سازی و درستی‌سنجی صوری

  • assistant_photo 
    هدف درس

    بروز خرابی در سیستم‌های با مأموریت حساس موجب بروز خسارت‌های جانی یا مالی سنگین می‌شود. اطمینان از درستی عملکرد چنین نرم‌افزاری به خاطر تعدد حالت‌های سیستم و مسیرهای اجرا کاری بسیار دشوار است طوری که آزمون نرم‌افزار نمی‌تواند چنین اطمینانی را ایجاد کند. یکی از راه‌کارهای حل این مشکل توصیف چنین سیستم‌هایی در قالب زبان‌های مدل‌سازی صوری است. این زبان‌ها از یک سو روشی برای مدل‌سازی سطح بالای سیستم‌ها را در اختیار طراح قرار می‌دهند و از سوی دیگر به دلیل دارا بودن پشتوانه ریاضی این امکان را مهیا می‌سازند که با روش‌های الگوریتمی درستی عملکرد سیستم را بسنجیم.

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

  • toc 
    عناوین مباحث
    • مقدمه‌ای بر درستی‌یابی
    • سیستم‌های گذار و گراف برنامه‌ها
    • مدل‌سازی در زبان پروملا
    • مدل اکتور و زبان مدل‌سازی ربکا
    • خاصیت‌های خطی
    • خاصیت‌های منظم
    • منطق زمانی خطی
    • وارسی منطق زمانی خطی
    • آشنایی با مدل‌های زمان‌دار
  • supervisor_account 
    یاددهی و یادگیری

    بخشی از مباحث این درس در قالب فایل‌های ویدیویی ضبط‌شده ارائه می‌گردد که شامل توضیحات مدرسین روی اسلایدها و متن مدل‌ها است. در چند نوبت در جریان درس نمونه‌های عملی از سیستم‌های واقعی که توسط روش‌های صوری مدل‌سازی و درستی‌سنجی شده‌اند مورد مطالعه قرار می‌گیرند. بخش دیگر درس نیز در قالب کلاس‌های برخط و به صورت تعاملی برای عمیق‌شدن در فنون ارائه شده در ویدیوهای درس ارائه خواهد شد.

    دانشجویان درس در قالب چند مجموعه تمرین، مباحث نظری ارائه شده را مرور خواهند کرد. همچنین چند تکلیف کامپیوتری را به هدف به‌کارگیری مفاهیم ارائه‌شده در عمل انجام خواهند داد. در نهایت، پروژه نهایی درس که در قالب مدل‌سازی یک سیستم در زبان ربکا و درستی‌سنجی آن با ابزار افرا انجام می‌شود جمع‌بندی جامعی روی مباحث این درس خواهد داشت.

    حدود ۴۰ درصد ارزیابی این درس در قالب تکلیف‌های در طول ترم انجام می‌شود، ۲۰ درصد در پروژه پایان ترم و ۴۰ درصد باقی‌مانده توسط آزمون تشریحی پایان ترم انجام خواهد شد.

  • note 
    منابع

    کتاب مرجع اصلی این درس اصول وارسی مدل نوشته کاتون و بایر است که نسخه الکترونیک آن در اختیار دانشجویان قرار خواهد گرفت. مرجع زبان مدل‌سازی ربکا و ابزار افرا سایت rebeca-lang.org است. در جریان درس بسته به موضوع مقالات مختلفی نیز مورد مطالعه قرار خواهد گرفت.

  • assignment 
    نمونه تکلیف‌ها

    به عنوان چند نمونه از تکلیف‌های این درس می‌توانید موارد زیر را ملاحظه فرمایید:

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

نمونه‌ای از محتوای درس مدل‌سازی و درستی‌یابی صوری با موضوع معرفی رهیافت بررسی مدل

اخذ پروژه کارشناسی

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

question_answer پرسش‌های متداول
همکاری به عنوان دستیار آموزشی

امکان همکاری به عنوان دستیار آموزشی در درس برنامه‌سازی پیشرفته وجود دارد. در درس مهندسی نرم‌افزار به دلایلی که در پرسش‌های متداول خود درس ذکر شده امکان کمک گرفتن از دستیار آموزشی را ندارم. در صورتی که به دستیاری درس برنامه‌سازی پیشرفته علاقه‌مند هستید و خود را واجد ویژگی‌های زیر می‌دانید فرم اعلام تمایل به دستیاری برنامه‌سازی پیشرفته را تکمیل کنید.

ویژگی‌های کلی که در گزینش دستیاران مد نظر داریم موارد زیر هستند:

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

درخواست توصیه‌نامه
شرایط لازم برای درخواست توصیه‌نامه

لطفاً اگر حداقل یکی از شرایط زیر را دارید طبق روالی که در ادامه آمده درخواست توصیه‌نامه نمایید:

دقت کنید توصیه‌نامه‌ای که محتوای آن صرفاً این است که «آقا/خانم ... درس ... و .... را با من گذرانده و نمره‌های خوبی در این درس‌ها کسب کرده‌ است» برای شما نیز ارزشی نخواهد داشت. در نتیجه خواهشمندم درخواست چنین توصیه‌نامه‌هایی نفرمایید.

مراحل درخواست توصیه‌نامه

اگر حائز شرایط فوق هستید، لطفاً یک ای‌میل به من ارسال کنید که شامل اطلاعات زیر باشد:

بعد از دریافت پاسخ موافق از من، لطفاً با شرایط زیر درخواست توصیه‌نامه را از طریق سایت دانشگاه‌های مورد نظر ارسال کنید:

اگر توصیه‌نامه شما به سرعت ارسال نشد مکرراً ای‌میل توصیه‌نامه را ارسال نکنید. نگران نباشید، کار شما انجام خواهد شد. در صورتی‌که یک روز قبل از سررسید، توصیه‌نامه شما ارسال نشده بود یک ای‌میل یادآوری به من بفرستید.