• شماره ركورد
    23668
  • پديد آورنده

    حميدرضا احمدي

  • عنوان
    روشي براي كاهش بدهكاري فني نرم‌افزار با استفاده از بازآرايي خودكار كد
  • مقطع تحصيلي
    كارشناسي ارشد
  • رشته تحصيلي
    مهندسي نرم‌افزار - تمركز سيستم‌ها
  • تاريخ دفاع
    1399/06/24
  • استاد راهنما
    دكتر محمد عبدالهي ازگمي
  • استاد مشاور
    دكتر مهرداد آشتياني
  • دانشكده
    مهندسي كامپيوتر
  • چكيده
    امروزه بدهكاري فني در بحث مديريت پروژه‌هاي نرم‌افزاري، تبديل به يك مسئله بسيار مهم شده است. زيرا با رونق گرفتن روش‌هاي توسعه چابك نرم‌فزار، اعمال تغييرات در نرم‌افزار به‌منظور اضافه كردن ويژگي‌هاي جديد، به امري ثابت در مديريت پروژه‌هاي نرم‌افزاري بدل شده است. بدهكاري فني اشاره دارد به فاصله ميان حالت بهينه پروژه نرم‌افزاري در هر يك از سطوح مختلف طراحي، و حالتي كه آن پروژه نرم‌افزاري داراست. اين فاصله گاه عمداً و گاه سهواً، توسط طراحان و سازندگان نرم‌افزار به‌وجود مي‌آيد. از آن‌جا كه زياد شدن اين فاصله منجر به شكست پروژه نرم‌افزاري مي‌شود، به‌جهت كم كردن اين فاصله، يا همان بدهكاري فني، لازم است در زمان‌هاي مناسب در طول عمر پروژه نرم‌افزاري، بازپرداخت انجام شود. در سطح كد و ساختار نرم‌افزار، بازپرداخت بدهكاري فني معادل است با بازآرايي نرم‌افزار و ايجاد بهبودهايي در كد و ساختار آن، كه ويژگي‌هاي كيفي نرم‌افزار را ارتقاء مي‌بخشد بدون آن‌كه تغييري در رفتار و نماي خارجي نرم‌افزار ايجاد كند. معمولاً انجام بازآرايي در پروژه‌هاي نرم‌افزاري، هزينه‌هاي زيادي به‌دنبال دارد. در نتيجه محققان همواره به‌دنبال راه‌حل‌هايي بوده‌اند كه اين هزينه را به حداقل برسانند و بهترين راه جهت كم كردن هزينه‌هاي يك فرآيند، خودكارسازي آن است. يكي از روش‌هاي بازآرايي خودكار نرم‌افزار كه در سال‌هاي اخير، بسيار مورد توجه قرار گرفته است، روش مبتني بر مهندسي نرم‌افزار جست‌وجو-محور است. اين روش به‌دليل داشتن جامعيت و چندمنظره بودن، روش خوبي است اما مشكلاتي نيز دارد كه مهم‌ترين آن‌ها، عدم‌قطعيت نتايج و تصاعدي بودن زمان اجراي بازآرايي با توجه به اندازه نرم‌افزار است. در اين پژوهش راهكاري ارائه شده است كه با الهام‌گرفتن از بازآرايي جست‌وجو-محور و بهره‌جويي از فنون يادگيري تقويتي، مشكلات عدم‌قطعيت و زمان اجرا براي نرم‌افزارهاي بزرگ در آن حل شده است. در روش پيشنهادي، با هدفمند كردن و هوشمندسازيِ نحوه انتخابِ بازآرايي‌هايي كه در روش جست‌وجو-محور از آن‌ها استفاده مي‌شد، مشكل عدم‌قطعيت حل شده است. همچنين به‌دليل كم كردن وابستگي ميان انتخاب بازآرايي مناسب و زمان اجراي بازآرايي، مشكل زمان در نرم‌افزارهاي بزرگ تا حدود زيادي بهبود پيدا كرده است. با انجام آزمايش‌هاي متعدد، روش پيشنهادي از منظرهاي رفتار در بازآرايي، زمان بازآرايي و ميزان بهبود كد، مورد بررسي قرار گرفت. نتايج آزمايش‌ها، نشان مي‌دهد با افزايش حجم و اندازه نرم‌افزار، عملكرد روش پيشنهادي نيز نسبت به روش‌هاي مبتني بر مهندسي نرم‌افزار جست‌وجو-محور، هم از نظر ميزان كاهش بدهكاري فني و هم از نظر سرعت بازآرايي، بهتر مي‌شود. به‌طوري‌كه در بازآرايي بزرگ‌ترين مورد مطالعاتي، روش پيشنهادي توانسته است، نسبت به روش جست‌وجو-محور ميزان بهبود را حدود 40 درصد افزايش دهد، در حالي كه مدت زمان اين بازآرايي را بيش از 98 درصد كاهش داده است.
  • تاريخ ورود اطلاعات
    1400/03/05
  • عنوان به انگليسي
    A method for reducing software technical debt using automated code refactoring
  • تاريخ بهره برداري
    9/15/2021 12:00:00 AM
  • دانشجوي وارد كننده اطلاعات

    حميدرضا احمدي

  • چكيده به لاتين
    Nowadays, technical debt has become a very important issue in software project management. Because with the rising of agile software development methods, making changes to the software to add new features has become permanent in software project management. Technical debt refers to the distance between the optimal state of a software project at each of the various levels of design and the state of that software project. This gap is created by software designers and developers, sometimes intentionally and sometimes inadvertently. Since increasing this distance leads to the failure of the software project, to reduce this gap, or technical debt, it is necessary to repay at appropriate times during the lifecycle of the software project. At the software code and structure level, repaying technical debt is tantamount to refactoring the software and making improvements to its code structure, which enhances the software's quality features without changing the software's behavior and appearance. Refactoring software projects usually comes at a high cost. As a result, researchers have always looked for ways to minimize this cost, and the best way to reduce the cost of a process is to automate it. One of the methods of automatic software refactoring that has received a lot of attention in recent years is based on the search-based software engineering (in short, SBSE) method. This method is a good method due to its comprehensiveness and versatility, but it also has problems, the most important of which are the uncertainty of the results and the exponential execution time of the reconstruction in the proportion of the size of the software. In this research, a solution has been presented by inspiring from search-based refactoring and exploitation of reinforcement learning techniques, which solved uncertainty problems, and execution time for large software. In the proposed approach, the problem of uncertainty is solved by targeting and smartening the selection of refactoring actions used in the search-based approach. Also, due to the reduction of the dependency between the choice of the appropriate refactoring and its execution time, the time problem in large software refactoring has been greatly improved. By doing several tests, the proposed approach was examined from the perspectives of behavior in refactoring, execution time, and rate of the code improvement. The results of the tests show that with increasing the volume and size of the software, the performance of the proposed approach also improves compared to the methods based on SBSE, both in terms of reducing technical debt and speeding up the refactoring process. As in the refactoring of the largest case study, the proposed approach managed to achieve about 40 percent more improvements over the SBSE refactoring, while reducing the execution time of the refactoring by more than 98%.
  • كليدواژه هاي فارسي
    بدهكاري فني , بازآرايي كد , يادگيري تقويتي , الگوهاي طراحي , بوي كد
  • كليدواژه هاي لاتين
    Technical debt , Software refactoring , Reinforcement learning , Design patterns , Code smell