توصيفگر ها :
آزمون نرمافزار , اصلاح خودكار خطاي نرمافزار , شبكههاي عصبي پيچشي , پردازش زبان طبيعي , يادگيري فعال
چكيده فارسي :
يكي از بخش هاي مهم چرخه حيات توليد نرم افزار، آزمون نرم افزار است كه در آن محصول نرم افزاري عيب يابي مي شود و سپس عيوب پيدا شده، اصلاح مي شوند. فرآيند اصلاح خطاهاي نرم افزاري، فرآيندي دشوار، زمان بر و پرهزينه است. در سال هاي اخير، به علت افزايش پيچيدگي نرم افزار ها يعني افزايش تعداد ماژول هاي نرم افزاري و پيچيدگي هاي زياد منطقي و ساختاري الگوريتم ها و ماژول ها، اصلاح خطاهاي نرم افزاري دشوارتر شده و هزينه و زمان لازم براي انجام آن بيش از پيش افزايش يافته است. در نتيجه، انجام خودكار فرآيند اصلاح خطاي نرم افزار مي تواند كمك بزرگي به جامعه ي توسعه دهندگان نرم افزار باشد. لذا موضوع اصلاح خودكار خطاي نرم افزار توجه عده ي زيادي از پژوهشگران را به خود جلب كرده است. روش هاي زيادي تاكنون براي حل اين مسئله مطرح شده كه مي توان آن ها را به سه دسته ي روش هاي مبتني بر معنا، مبتني بر جست وجو و مبتني بر يادگيري تقسيم كرد. هدف اين پايان نامه، بررسي بيشتر مسئله و تشريح تعدادي از كار هاي انجام شده در سال هاي اخير و ارائه ي روشي تركيبي مبتني بر يادگيري با نام RR-CURE است كه با هدف رفع نقاط ضعف روش هاي موجود ارائه شده است و توانسته با كاهش زمان آموزش نسبت به مدل RewardRepair و كاهش 80 درصدي زمان اجرا نسبت به مدل CURE، به نتايجي قابل مقايسه با هردو دست يابد و حتي موفق به كشف خطايي در مجموعه داده ي معيار شده است كه تا زمان نوشتن اين پايان نامه، توسط هيچ مدل مبتني بر يادگيريي اصلاح نشده است.
چكيده انگليسي :
One of the important parts of software development life cycle (SDLC) is software testing, in which the software product is verified and then the bugs are found and repaired. The process of repairing software bugs is difficult, time-consuming, and expensive. In recent years, due to the increase in the complexity of software, i.e. the increase in the number of software modules and the logical and structural complexity of algorithms and modules, correcting software errors has become more difficult and the cost and time required to do it have increased more than before. As a result, automating the software repair process can be a great help to the software development community. Therefore, automatic program repair area has attracted the attention of many researchers. So far, many methods have been proposed to solve this problem, which can be divided into three categories: semantic-based, search-based, and learning-based. This thesis aims to further investigate the problem and describe several works done in recent years and develop a learning-based hybrid method called RR-CURE, which uses buggy and context separation approach in inputs, convolutional neural networks, encoder-decoder models, transformers, and active learning to eliminate the weaknesses of the existing methods and was able to reduce the training time compared to the RewardRepair model and an 80% reduction in execution time compared with the CURE model. However, it has achieved results comparable to both recent researches and even has succeeded in repairing one of the bugs in the benchmark dataset, which until the time of writing this thesis, has not been repaired by any learning-based method.