یادگیری اصلی در این درس در قالب تکلیفهای درس انجام میشود که بیشتر جنبه پژوهشی و تحلیلی دارند. دانشجویان در قالب گروههای سهنفره هفت تکلیف را برای این درس انجام میدهند. نمونههایی از تکلیفهای این درس در همین صفحه قابل دسترس هستند. دانشجویان پس از انجام و بارگذاری پاسخ تکلیفها موظف به تحویل تکلیفها به استاد درس هستند که طی این فرایند با مشکلات احتمالی در تحلیلهای ارائه شده آشنا میشوند.
گستردگی انواع دامنههای نرمافزاری و وجود مکتبهای مختلف در توسعه نرمافزار باعث میشود یک منبع جامع که عمیقاً فنون مورد بحث را مورد بررسی قرار دهد وجود نداشته باشد. در این درس از تنوعی از (بخشهایی از) کتابهای مختلف و همینطور منابع برخط موجود (مانند نوشتههای مارتین فاولر) استفاده میشود.
کتابهایی که بخشهای بیشتری از آنها در این درس مورد استفاده قرار گرفتهاند عبارتند از:
همانطور که اشاره شد سایت مارتین فاولر مجموعه راهنماهای بسیار مفیدی را از نوشتههای او و همکارانش جمعآوری کرده که در عناوین زیر مورد استفاده قرار میگیرد:
جایگاه معماری نرمافزار در فرایندهای توسعه
مباحث این درس در قالب فایلهای ویدیویی ضبطشده ارائه میگردد که شامل توضیحات مدرس روی اسلایدها و متن برنامهها است. ارائه مفاهیم عمدتاً حول برنامههای نمونه کوچک صورت میگیرد. علاوه بر محتوای ضبطشده، کلاسهای برخط دورهای برای بحث و بررسی دقیقتر مطالب تشکیل میشود. در پایان هر مبحث تمرینهای کوتاهی برای مرور مطالب در اختیار دانشجویان قرار میگیرد.
یادگیری اصلی در این درس در قالب تکلیفهای برنامهنویسی انجام میشود. دانشجویان به صورت انفرادی هفت تکلیف برنامهنویسی را برای این درس انجام میدهند. تکلیف هفتم پروژه پایانی محسوب میشود که خود آن در سه مرحله انجام میشود. نمونههایی از تکلیفهای این درس در همین صفحه قابل دسترس هستند. دانشجویان پس از انجام و بارگذاری پاسخ تکلیفها موظف به تحویل تکلیفها به دستیاران آموزشی هستند که طی این فرآیند با مشکلات احتمالی در پاسخ و همینطور سبک برنامهنویسی خود آشنا میشوند.
ویدیوهای ارائه حضوری این درس مربوط به چند سال پیش در سایت مکتبخونه قابل دسترس است. البته طی این مدت تغییراتی در محتوای درس رخ داده، ولی کلیت مطالب کماکان قابل استفاده هستند.
متن برنامههای نمونه مورد بحث در محتوای درس از مخزن گیتهاب درس قابل دسترسی هستند.
هر چند یادگیری اصلی با نوشتن برنامه حاصل میشود، اما اگر تمایل به مطالعه کتاب دارید، کتاب C++ How to Program برای این منظور پیشنهاد میشود.
دو نمونه از محتوای درس درباره برنامهنویسی شیءگرا
بروز خرابی در سیستمهای با مأموریت حساس موجب بروز خسارتهای جانی یا مالی سنگین میشود. اطمینان از درستی عملکرد چنین نرمافزاری به خاطر تعدد حالتهای سیستم و مسیرهای اجرا کاری بسیار دشوار است طوری که آزمون نرمافزار نمیتواند چنین اطمینانی را ایجاد کند. یکی از راهکارهای حل این مشکل توصیف چنین سیستمهایی در قالب زبانهای مدلسازی صوری است. این زبانها از یک سو روشی برای مدلسازی سطح بالای سیستمها را در اختیار طراح قرار میدهند و از سوی دیگر به دلیل دارا بودن پشتوانه ریاضی این امکان را مهیا میسازند که با روشهای الگوریتمی درستی عملکرد سیستم را بسنجیم.
در این درس زبانهای مدلسازی سطح بالا و پشتوانه صوری آنها را بررسی خواهیم کرد. همچنین با روش توصیف خاصیتهای درستی سیستم را با استفاده از فرمولهای منطق آشنا میشویم. در نهایت خواهیم دید چگونه میتوانیم با روشهای سازمانیافته این خاصیتها را درستیسنجی کنیم. از میان روشهای متنوعی که در چارچوب مدلسازی و درستیسنجی طبقهبندی میشوند، در این درس بر زبان مدلسازی ربکا و مجموعه ابزارهای درستیسنجی افرا که در دانشکده مهندسی برق و کامپیوتر دانشگاه تهران توسعه یافتهاند تمرکز خواهد شد.
بخشی از مباحث این درس در قالب فایلهای ویدیویی ضبطشده ارائه میگردد که شامل توضیحات مدرسین روی اسلایدها و متن مدلها است. در چند نوبت در جریان درس نمونههای عملی از سیستمهای واقعی که توسط روشهای صوری مدلسازی و درستیسنجی شدهاند مورد مطالعه قرار میگیرند. بخش دیگر درس نیز در قالب کلاسهای برخط و به صورت تعاملی برای عمیقشدن در فنون ارائه شده در ویدیوهای درس ارائه خواهد شد.
دانشجویان درس در قالب چند مجموعه تمرین، مباحث نظری ارائه شده را مرور خواهند کرد. همچنین چند تکلیف کامپیوتری را به هدف بهکارگیری مفاهیم ارائهشده در عمل انجام خواهند داد. در نهایت، پروژه نهایی درس که در قالب مدلسازی یک سیستم در زبان ربکا و درستیسنجی آن با ابزار افرا انجام میشود جمعبندی جامعی روی مباحث این درس خواهد داشت.
حدود ۴۰ درصد ارزیابی این درس در قالب تکلیفهای در طول ترم انجام میشود، ۲۰ درصد در پروژه پایان ترم و ۴۰ درصد باقیمانده توسط آزمون تشریحی پایان ترم انجام خواهد شد.
کتاب مرجع اصلی این درس اصول وارسی مدل نوشته کاتون و بایر است که نسخه الکترونیک آن در اختیار دانشجویان قرار خواهد گرفت. مرجع زبان مدلسازی ربکا و ابزار افرا سایت rebeca-lang.org است. در جریان درس بسته به موضوع مقالات مختلفی نیز مورد مطالعه قرار خواهد گرفت.
به عنوان چند نمونه از تکلیفهای این درس میتوانید موارد زیر را ملاحظه فرمایید:
نمونهای از محتوای درس مدلسازی و درستییابی صوری با موضوع معرفی رهیافت بررسی مدل
دانشجویانی که علاقهمند به اخذ پروژه کارشناسی با من هستند، ابتدا نگاهی به صفحه پژوهشی بیندازند تا اطلاعی کلی از موضوعات مورد تمرکزم و عناوین برخی پروژههای کارشناسی منتخب در گذشته را به دست آوردند. در صورتی که به زمینههای کلی علاقهمند هستید لطفاً از طریق یک ایمیل تمایل خود را به اخذ پروژه کارشناسی اعلام نمایید. در صورتی که شرایط ابتدایی اجازه دهد، یعنی من ظرفیت راهنمایی دانشجوی جدید را داشته باشم (هم از نظر ظرفیت رسمی دانشکده و هم از نظر مسئولیتهای جاری)، وقتی برای مصاحبه با شما ترتیب داده میشود تا درباره موضوع و شرایط اجرای پروژه صحبت کنیم. در صورتی که توافق حاصل شد، لازم است در جلسات دو هفته یکبار که به طور منظم برنامهریزی خواهد شد شرکت کنید و ضمن ارائه گزارش پیشرفت، برنامهریزی برای دو هفته بعدی را انجام دهیم. سایر تشریفات مطابق روالهای دانشکده انجام خواهد شد.
امکان همکاری به عنوان دستیار آموزشی در درس برنامهسازی پیشرفته وجود دارد. در درس مهندسی نرمافزار به دلایلی که در پرسشهای متداول خود درس ذکر شده امکان کمک گرفتن از دستیار آموزشی را ندارم. در صورتی که به دستیاری درس برنامهسازی پیشرفته علاقهمند هستید و خود را واجد ویژگیهای زیر میدانید فرم اعلام تمایل به دستیاری برنامهسازی پیشرفته را تکمیل کنید.
ویژگیهای کلی که در گزینش دستیاران مد نظر داریم موارد زیر هستند:
پس از اعلام تمایل شما به دستیاری، اولاً لازم است یک تکلیف برنامهنویسی که دستیار ارشد به شما میدهد را با کیفیت مطلوب انجام دهید و در یک مصاحبه شفاهی شرکت نمایید. دقت کنید با توجه به این که معمولاً دستیاران بیش از دو ترم با ما همکاری میکنند (که تجربیات دستیاری در تیم باقی بماند)، معمولاً تعداد دستیارانی که در هر ترم جذب میکنیم از تعداد متقاضیان کمتر است. اگر به این دلیل نتوانستیم از کمک شما بهرهمند شویم پوزش میطلبیم و از شما دعوت میکنیم ارتباطتان را با ما برای همکاری در ترمهای بعد حفظ کنید.
لطفاً اگر حداقل یکی از شرایط زیر را دارید طبق روالی که در ادامه آمده درخواست توصیهنامه نمایید:
دقت کنید توصیهنامهای که محتوای آن صرفاً این است که «آقا/خانم ... درس ... و .... را با من گذرانده و نمرههای خوبی در این درسها کسب کرده است» برای شما نیز ارزشی نخواهد داشت. در نتیجه خواهشمندم درخواست چنین توصیهنامههایی نفرمایید.
اگر حائز شرایط فوق هستید، لطفاً یک ایمیل به من ارسال کنید که شامل اطلاعات زیر باشد:
بعد از دریافت پاسخ موافق از من، لطفاً با شرایط زیر درخواست توصیهنامه را از طریق سایت دانشگاههای مورد نظر ارسال کنید:
اگر توصیهنامه شما به سرعت ارسال نشد مکرراً ایمیل توصیهنامه را ارسال نکنید. نگران نباشید، کار شما انجام خواهد شد. در صورتیکه یک روز قبل از سررسید، توصیهنامه شما ارسال نشده بود یک ایمیل یادآوری به من بفرستید.