الگوها در مهندسی نرمافزار
اطلاعات کلی
- نام درس به فارسی: اصول و الگوها در مهندسی نرمافزار
- نام درس به انگلیسی: Patterns and Principles in Software Engineering
- رشته، گرایش، نوع و واحد درس: مهندسی کامپیوتر – نرمافزار، اختصاصی، 3 واحد
- مقطع: تحصیلات تکمیلی
- پیش نیازها: مبانی مهندسی نرمافزار و طراحی شیگرا
- مطالب پیش نیاز: آشنایی با مفاهیم اولیه نرمافزار و الگوهای طراحی
توضیح کوتاه درس
این درس به بررسی جامع اصول و الگوها در مهندسی نرمافزار میپردازد. شرکتکنندگان در این دوره با اصول الگوها، اهمیت کد تمیز (SOLID) و معماری تمیز (Component)، اصول طراحی شیگرا (PHAME) و تاریخچه الگوهای طراحی آشنا میشوند. همچنین الگوهای طراحی کلاسیک (GoF)، اصول GRASP، الگوهای طراحی API، الگوهای معماری (مانند GoV) و ضد الگوها، بهعلاوه فنون بازآرایی، پیمانهسازی مجدد و مهاجرت خودکار معماری نرمافزار، مورد بررسی قرار میگیرند.
اهداف و نتایج درس
- آشنایی با اصول و مفاهیم الگوها در مهندسی نرمافزار
- درک اصول کد تمیز (SOLID) و معماری تمیز (Component)
- آشنایی با اصول طراحی شیگرا (PHAME)
- مرور تاریخچه الگوها و بررسی الگوهای پایهای معرفی شده توسط Petter Coad
- تحلیل و کاربرد الگوهای طراحی GoF و اصول GRASP
- شناخت الگوهای طراحی APIها و الگوهای معماری (مانند GoV)
- شناسایی ضد الگوها و بوهای کد در طراحی و معماری نرمافزار
- بررسی الگوهای بازآرایی و مهندسی مجدد نرمافزار
- تحلیل الگوهای نیازمندیها و شناسایی بوهای مرتبط
- استفاده از الگوها برای سنجش صفات کیفی نرمافزار
- پیشبینی بوهای کد و تشخیص موقعیتهای مناسب جهت بازآرایی
- سنجش شدت و اولویتبندی الگوها در پروژههای نرمافزاری
- آشنایی با فنون بازآرایی خودکار (بازآرایی یگانه، دستهای و جستوجو محور)
- بررسی فنون پیمانهسازی مجدد نرمافزار
- آشنایی با فنون مهاجرت خودکار معماری نرمافزار
مخاطبین
- دانشجویان تحصیلات تکمیلی مهندسی نرمافزار
- مهندسین نرمافزار و مدیران پروژههای نرمافزاری
- پژوهشگران و علاقهمندان به الگوهای طراحی و بازآرایی نرمافزار
سطح دوره
- پیشرفته
طول و زمانبندی دوره
- مدت دوره: 4 ماه (30 جلسه)
- 28 جلسه کلاس
- 2 جلسه (جبرانی/ارزیابی، شامل جلسه مرور کلی)
سرفصلها و مباحث
-
مقدمهای بر اصول و الگوها در مهندسی نرمافزار (2 جلسه)
- معرفی مفاهیم اولیه الگوها
- اهمیت و ضرورت استفاده از الگوها در طراحی نرمافزار
-
اصول کد تمیز (SOLID) و معماری تمیز (Component) (2 جلسه)
- بررسی اصول SOLID
- مفهوم معماری تمیز و اجزای اصلی آن
-
اصول طراحی شیگرا (PHAME) (2 جلسه)
- آشنایی با چارچوب PHAME
- کاربردهای PHAME در بهبود طراحی شیگرا
-
تاریخچه الگوها و الگوهای پایهای Petter Coad (2 جلسه)
- مروری بر تاریخچه الگوها در مهندسی نرمافزار
- معرفی الگوهای پایهای ارائه شده توسط Petter Coad
-
الگوهای طراحی GoF (2 جلسه)
- معرفی الگوهای طراحی کلاسیک GoF
- بررسی مثالهای عملی و کاربردی
-
الگوها و اصول طراحی GRASP (2 جلسه)
- آشنایی با اصول GRASP
- تحلیل کاربردهای GRASP در پروژههای نرمافزاری
-
الگوهای طراحی APIها (1 جلسه)
- بررسی الگوهای طراحی مخصوص API
- مطالعه نمونههای موفق و معیارهای طراحی
-
الگوهای معماری (GoV و ...) (2 جلسه)
- معرفی الگوهای معماری نرمافزاری (مانند GoV)
- بررسی تطبیقی با سایر الگوهای معماری
-
ضد الگوها و بوهای کد، طراحی و معماری (2 جلسه)
- شناسایی ضد الگوها (Anti-Patterns)
- ارزیابی بوهای رایج در کد و طراحی و راهکارهای بهبود
-
الگوهای بازآرایی و الگوهای مهندسی مجدد (2 جلسه)
- مقدمهای بر بازآرایی نرمافزار
- بررسی الگوهای مهندسی مجدد و استراتژیهای بهبود ساختار
-
الگوهای تحلیل نیازمندیها و بوهای نیازمندیها (2 جلسه)
- بررسی الگوهای تحلیل نیازمندیها
- شناسایی و ارزیابی بوهای موجود در نیازمندیها
-
سنجش صفات کیفی نرمافزار با الگوها (2 جلسه)
- معرفی شاخصها و متریکهای کیفیت نرمافزار
- کاربرد الگوها در سنجش و بهبود کیفیت
-
پیشبینی بوهای کد و تشخیص موقعیتهای بازآرایی (1 جلسه)
- تکنیکهای پیشبینی و شناسایی بوهای کد
- تعیین موقعیتهای مناسب برای اعمال بازآرایی
-
سنجش شدت و اولویتبندی الگوها (1 جلسه)
- روشهای سنجش شدت الگوها
- تکنیکهای اولویتبندی بر اساس نیازهای پروژه
-
فنون بازآرایی خودکار (بازآرایی یگانه، دستهای و جستوجو محور) (2 جلسه)
- بررسی رویکردهای مختلف بازآرایی خودکار
- مقایسه و ارزیابی ابزارها و تکنیکها
-
فنون پیمانهسازی مجدد نرمافزار (1 جلسه)
- معرفی روشهای پیمانهسازی مجدد (Re-modularization)
- ابزارها و تکنیکهای مدرن در این حوزه
-
فنون مهاجرت خودکار معماری نرمافزار (1 جلسه)
- استراتژیهای مهاجرت و تغییر معماری
- بررسی ابزارها و روشهای اتوماسیون مهاجرت
-
جلسه مرور و ارزیابی کل دوره (1 جلسه)
- جمعبندی مباحث تدریس شده
- ارزیابی دستاوردهای دوره و ارائه بازخورد
ابزارهای مورد استفاده
-
ابزارهای کامپایلری:
- ANTLR
- JavaParser
- LLVM/CLANG
- Roslyn
-
ابزارهای تحلیل ایستای کد منبع:
- Understand
- OpenStaticAnalyzer
- SourceMeter
- PMD, FindBugs, Desigite, …
-
ابزارهای تبدیل شکل و بازآرایی کد منبع:
- JDeodorant
- RECODER
- MultiRefactor
- CodART
-
ابزارهای تحلیل و یادگیری مصنوعات نرمافزاری:
- Scikit-learn
- NetworkX
- pymoo
- Keras
-
زبانهای برنامهنویسی مورد استفاده در درس:
- JAVA
- C#
- C++14
- Python3
تکالیف و ارزیابی
-
تمرینها: 20%
- برای هر یک از مباحث (موضوعات 2 تا 17) یک تمرین تشریحی و یک تمرین برنامهنویسی
-
سمینار: 10%
- انتخاب و ارائه یک مقاله از کنفرانسها یا مجلات معتبر مهندسی نرمافزار (مانند ECSE، ASE، ICPC، FSE، TSE، TOSEM، ESE، SysSoft)
-
پروژه: 20%
- اجرای یک پروژه تشخیص خودکار الگوهای نرمافزار یا بازآرایی خودکار با استفاده از ابزارهای تدریس شده
- به عنوان مثال، تکرار و ارزیابی مصنوعات مقاله انتخاب شده
-
آزمونهای میانترم و پایانترم: 50%
- مبتنی بر پرسشهای چندگزینهای و تشریحی
منابع درس
کتب
- E. Gamma, R. Helm, R. Johnson, and J. Vlissides.
Design Patterns: Elements of Reusable Object-Oriented Software.
1st Edition, Addison-Wesley, 1995. - F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, and M. Stal.
Pattern-Oriented Software Architecture: A System of Patterns. Vol. 1.
Wiley, 1996. - M. Fowler.
Analysis Patterns: Reusable Object Models.
Addison-Wesley, 1996. - Craig Larman.
Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process (2nd ed.).
Prentice Hall, 2001. - J. Kerievsky.
Refactoring to Patterns. Addison-Wesley, 2004. - Fowler, M., & Beck, K.
Refactoring: Improving the Design of Existing Code (Second Edition).
Addison-Wesley, 2018. refactoring.com - J. Geewax.
API Design Patterns. Simon and Schuster, 2021.
مقالات
- Biegel, B., Soetens, Q. D., Hornig, W., Diehl, S., & Demeyer, S. (2011).
Comparison of similarity metrics for refactoring detection.
Proceedings of the 8th Working Conference on Mining Software Repositories (MSR ’11), 53.
doi:10.1145/1985441.1985452 - Zakeri-Nasrabadi, M., Parsa, S., & Jafari, S. (2024).
Measuring and improving software testability at the design level.
Information and Software Technology, 174, 107511.
doi:10.1016/j.infsof.2024.107511 - Mkaouer, W., Kessentini, M., Shaout, A., Koligheu, P., Bechikh, S., Deb, K., & Ouni, A. (2015).
Many-objective software remodularization using NSGA-III.
ACM Transactions on Software Engineering and Methodology, 24(3), 1–45.
doi:10.1145/2729974 - Zakeri-Nasrabadi, M., Parsa, S., Ramezani, M., Roy, C., & Ekhtiarzadeh, M. (2023).
A systematic literature review on source code similarity measurement and clone detection: Techniques, applications, and challenges.
Journal of Systems and Software, 204, 111796. - Ardalani, A., Parsa, S., Zakeri-Nasrabadi, M., & Chatzigeorgiou, A. (2024).
Supporting single responsibility through automated extract method refactoring.
Empirical Software Engineering, 29(1), 28. - Nazar, N., Aleti, A., & Zheng, Y. (2022).
Feature-based software design pattern detection.
Journal of Systems and Software, 185, 111179. - Mens, T., & Tourwé, T. (2004).
A survey of software refactoring.
IEEE Transactions on Software Engineering, 30(2), 126-139.
تهیهکننده
- نام: مرتضی ذاکری
- نگارش: 1.0