تکامل نرم‌افزار

Software Evolution

شماره درس: ۴۰۶۷۹ تعداد واحد: ۳
مقطع: کارشناسی ارشد نوع درس: نظری
پیش‌نیاز: – هم‌نیاز: –

اهداف درس

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

ریز مواد

  1. بخش اول: مفاهیم مقدماتی تکامل نرم‌افزار
    • آشنایی با تکامل نرم‌افزار و مفاهیم اولیه (۱ جلسه)
  2. بخش دوم: مهندسی معکوس سیستم‌های نرم‌افزاری
    • مصوّرسازی سیستم‌های نرم‌افزاری (Software Visualization) (۱ جلسه)
    • تحلیل و شناسایی کلونی‌های نرم‌افزاری (Clone Detection and Analysis) (۲ جلسه)
    • جستجو در کد برنامه به منظور شناسایی نحوه پیاده‌سازی یک وظیفه‌مندی خاص (Feature Location) (۱ جلسه)
    • برنامه‌نویسی جنبه‌گرا و جستجو در سیستم‌های نرم‌افزاری به منظور شناسایی جنبه‌ها
    • (Aspect-Oriented Programming & Aspect Mining) (۲ جلسه)
    • داده‌کاوی در مخزن‌های نرم‌افزاری (Mining Software Repositories) (۱ جلسه)
    • سیستم‌های توصیه‌گر در مهندسی نرم‌افزار (Recommendation Systems in Software Engineering) (۱ جلسه)
    • مکان‌یابی خطاها (Fault Localization) (۲ جلسه)
    • پیش‌بینی خطاها (Bug Prediction) (۲ جلسه)
    • درک چارچوب‌های نرم‌افزاری (Software Frameworks Comprehension) (۲ جلسه)
  3. بخش سوم: بازمهندسی سیستم‌های قدیمی‌
    • بازمهندسی شی‌ءگرا (Object-Oriented Reengineering) (۲ جلسه)
    • مهاجرت سیستم‌های قدیمی‌ (Migration of Legacy Systems) (۱ جلسه)
    • بهبود طراحی و بازآرایی سیستم‌های نرم‌افزاری (Software Refactoring) (۱ جلسه)
  4. بخش چهارم: مفاهیم جدید در تکامل نرم‌افزار
    • تکامل واسط‌های برنامه‌نویسی کاربرد (API Evolution) (۱ جلسه)
    • داده‌کاوی و تحلیل فروشگاه‌های برنامک‌های همراه (App Stores Mining and Analysis) (۲ جلسه)
    • بازبینی کد (Code Review) (۲ جلسه)
    • جمع‌سپاری در مهندسی نرم‌افزار (Crowdsourcing for Software Engineering) (۲ جلسه)
    • علم داده در مهندسی نرم‌افزار (Data Science for Software Engineering) (۱ جلسه)

ارزیابی

  • آزمون میان ترم (۳۰ درصد نمره)
  • آزمون پایان ترم (۳۰ درصد نمره)
  • ارائه مقاله علمی: هر دانشجو موظف به ارائه حداقل یک مقاله علمی می‌باشد که در یکی از بهترین کنفرانس‌ها یا مجلات مرتبط به درس در سال‌های اخیر به چاپ رسیده باشد. (۱۰ درصد نمره)
  • پروژه و گزارش پژوهشی: موضوع پروژه پژوهشی قبل از آزمون نیم‌سال تعیین می‌شود. دانشجو کار پژوهش را با کمک استاد درس آغاز نموده و پس از انجام پروژه، نتیجه پژوهش را در قالب یک گزارش ارائه می‌دهد. (۳۰ درصد نمره)

مراجع

  • آخرین مقالات مروری (Survey) ارائه شده در زمینه سرفصل‌های مطالب در برترین مجلات مهندسی نرم‌افزار.
  • T. Mens and S. Demeyer (Eds.). Software Evolution. Springer, 2008.
  • C. Bird, T. Menzies, and T. Zimmermann. The Art and Science of Analyzing Software Data. Morgan Kaufmann, 2015.
  • M. P. Robillard, W. Maalej, R. J. Walker, and T. Zimmermann. Recommendation Systems in Software Engineering. Springer, 2014.
  • P. Tripathy and K. Naik. Software Evolution and Maintenance: A Practitioner's Approach. Wiley, 2014.