پرش به محتویات

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

اطلاعات کلی

  • نام درس به فارسی: اصول و الگوها در مهندسی نرم‌افزار
  • نام درس به انگلیسی: 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 جلسه (جبرانی/ارزیابی، شامل جلسه مرور کلی)

سرفصل‌ها و مباحث

  1. مقدمه‌ای بر اصول و الگوها در مهندسی نرم‌افزار (2 جلسه)

    • معرفی مفاهیم اولیه الگوها
    • اهمیت و ضرورت استفاده از الگوها در طراحی نرم‌افزار
  2. اصول کد تمیز (SOLID) و معماری تمیز (Component) (2 جلسه)

    • بررسی اصول SOLID
    • مفهوم معماری تمیز و اجزای اصلی آن
  3. اصول طراحی شی‌گرا (PHAME) (2 جلسه)

    • آشنایی با چارچوب PHAME
    • کاربردهای PHAME در بهبود طراحی شی‌گرا
  4. تاریخچه الگوها و الگوهای پایه‌ای Petter Coad (2 جلسه)

    • مروری بر تاریخچه الگوها در مهندسی نرم‌افزار
    • معرفی الگوهای پایه‌ای ارائه شده توسط Petter Coad
  5. الگوهای طراحی GoF (2 جلسه)

    • معرفی الگوهای طراحی کلاسیک GoF
    • بررسی مثال‌های عملی و کاربردی
  6. الگوها و اصول طراحی GRASP (2 جلسه)

    • آشنایی با اصول GRASP
    • تحلیل کاربردهای GRASP در پروژه‌های نرم‌افزاری
  7. الگوهای طراحی APIها (1 جلسه)

    • بررسی الگوهای طراحی مخصوص API
    • مطالعه نمونه‌های موفق و معیارهای طراحی
  8. الگوهای معماری (GoV و ...) (2 جلسه)

    • معرفی الگوهای معماری نرم‌افزاری (مانند GoV)
    • بررسی تطبیقی با سایر الگوهای معماری
  9. ضد الگوها و بوهای کد، طراحی و معماری (2 جلسه)

    • شناسایی ضد الگوها (Anti-Patterns)
    • ارزیابی بوهای رایج در کد و طراحی و راهکارهای بهبود
  10. الگوهای بازآرایی و الگوهای مهندسی مجدد (2 جلسه)

    • مقدمه‌ای بر بازآرایی نرم‌افزار
    • بررسی الگوهای مهندسی مجدد و استراتژی‌های بهبود ساختار
  11. الگوهای تحلیل نیازمندی‌ها و بوهای نیازمندی‌ها (2 جلسه)

    • بررسی الگوهای تحلیل نیازمندی‌ها
    • شناسایی و ارزیابی بوهای موجود در نیازمندی‌ها
  12. سنجش صفات کیفی نرم‌افزار با الگوها (2 جلسه)

    • معرفی شاخص‌ها و متریک‌های کیفیت نرم‌افزار
    • کاربرد الگوها در سنجش و بهبود کیفیت
  13. پیش‌بینی بوهای کد و تشخیص موقعیت‌های بازآرایی (1 جلسه)

    • تکنیک‌های پیش‌بینی و شناسایی بوهای کد
    • تعیین موقعیت‌های مناسب برای اعمال بازآرایی
  14. سنجش شدت و اولویت‌بندی الگوها (1 جلسه)

    • روش‌های سنجش شدت الگوها
    • تکنیک‌های اولویت‌بندی بر اساس نیازهای پروژه
  15. فنون بازآرایی خودکار (بازآرایی یگانه، دسته‌ای و جست‌وجو محور) (2 جلسه)

    • بررسی رویکردهای مختلف بازآرایی خودکار
    • مقایسه و ارزیابی ابزارها و تکنیک‌ها
  16. فنون پیمانه‌سازی مجدد نرم‌افزار (1 جلسه)

    • معرفی روش‌های پیمانه‌سازی مجدد (Re-modularization)
    • ابزارها و تکنیک‌های مدرن در این حوزه
  17. فنون مهاجرت خودکار معماری نرم‌افزار (1 جلسه)

    • استراتژی‌های مهاجرت و تغییر معماری
    • بررسی ابزارها و روش‌های اتوماسیون مهاجرت
  18. جلسه مرور و ارزیابی کل دوره (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%

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

منابع درس

کتب

  1. E. Gamma, R. Helm, R. Johnson, and J. Vlissides.
    Design Patterns: Elements of Reusable Object-Oriented Software.
    1st Edition, Addison-Wesley, 1995.
  2. F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, and M. Stal.
    Pattern-Oriented Software Architecture: A System of Patterns. Vol. 1.
    Wiley, 1996.
  3. M. Fowler.
    Analysis Patterns: Reusable Object Models.
    Addison-Wesley, 1996.
  4. Craig Larman.
    Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process (2nd ed.).
    Prentice Hall, 2001.
  5. J. Kerievsky.
    Refactoring to Patterns. Addison-Wesley, 2004.
  6. Fowler, M., & Beck, K.
    Refactoring: Improving the Design of Existing Code (Second Edition).
    Addison-Wesley, 2018. refactoring.com
  7. J. Geewax.
    API Design Patterns. Simon and Schuster, 2021.

مقالات

  1. 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
  2. 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
  3. 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
  4. 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.
  5. Ardalani, A., Parsa, S., Zakeri-Nasrabadi, M., & Chatzigeorgiou, A. (2024).
    Supporting single responsibility through automated extract method refactoring.
    Empirical Software Engineering, 29(1), 28.
  6. Nazar, N., Aleti, A., & Zheng, Y. (2022).
    Feature-based software design pattern detection.
    Journal of Systems and Software, 185, 111179.
  7. Mens, T., & Tourwé, T. (2004).
    A survey of software refactoring.
    IEEE Transactions on Software Engineering, 30(2), 126-139.

تهیه‌کننده

  • نام: مرتضی ذاکری
  • نگارش: 1.0