پیمانهبندی سیستم نرمافزاری جهت استخراج معماری آن از روی موجودیتهای ساختاری و غیرساختاری کد منبع
/نفیسه سادات جلالی
: علوم ریاضی
، ۱۳۹۶
چاپی
کارشناسی ارشد
علوم کامپیوتر گرایش سیستم های کامپیوتری
۱۳۹۶/۰۶/۱۶
دانشگاه تبریز
از آنجا که در طول زمان با توجه به خواستههای کاربران نیازمندیهای جدیدی به سیستمهای نرمافزاری اضافه میشود، از این رو این سیستمها ساختار اولیه خود را از دست میدهند و عدم وجود مستندات فعلی و گسترده شدن ساختار سیستمها، فهم معماری سیستم نرمافزاری را مشکل میکند .پیمانهبندی نرمافزار یک مرحله از مهندسی معکوس جهت فهم ساختار این نرمافزارها است .پیمانهبندی موجودیتهای یک سیستم نرمافزاری به زیرسیستمهای معنیدار، کمک به فرآیند فهم معماری سطح بالای یک سیستم بزرگ و پیچیده است .پیمانهبندی به طور عمده وابستگی بین پیمانههای سیستم نرمافزاری را برای گروهبندی و معماری سطح بالای سیستم استخراج میکند .اما چون گروهبندی و پیمانهبندی سیستم نرمافزاری یک مسئله چندجملهای غیرقطعی-کامل است و الگوریتم شناختهشده قابل اجرا در زمان چندجملهای وجود ندارد، بنابراین استفاده از الگوریتمهای تکاملی برای پیدا کردن پیمانهبندی قابل قبول منطقی به نظر میرسد .همچنین از آنجایی که بیشتر الگوریتمهای پیمانهبندی ویژگیهای نحوی را برای پیمانهبندی در نظر میگیرند و در صورت نبود ابزار لازم برای استخراج گراف فراخوانی، کار نخواهند کرد .از این رو در این پایاننامه، برای پیمانهبندی سیستم نرمافزاری از روی ویژگیهای نحوی و معنایی پنج الگوریتم به نامهای الگوریتم ژنتیک با کدگذاریbunch ، ژنتیک با کدگذاریDAGC، الگوریتم تخمین توزیع، الگوریتم ترکیبی ژنتیک و تپهنوردی و الگوریتم ژنتیک و یک بار اجرای تپهنوردی اعمال شده است و نتایج آزمایش ما روی موزیلا فایرفاکس نشان داد که استفاده از الگوریتم تخمین توزیع و الگوریتمهای ترکیب ژنتیک و تپهنوردی بهتر از بقیه الگوریتمها قادر به پیمانهبندی سیستم نرمافزاری است
Over time, new requirements are added to software systems according to user requirements. Therefore, the basic structure of these systems is diverted. Since the most of software systems are large and complex thus, understanding the structure of these large systems is difficult. Software modularization is a phase of reverse engineering to understand the structure of the software systems. Modularization of a software system into meaningful subsystems contributes to the process of understanding the large and complex system. Modularization mainly analyzes the dependencies between software system modules for grouping; but, since the grouping and modularization of the software system is a NP- hard problem, hence, the use of evolutionary algorithms to find an acceptable modularization seems reasonable. Also, since most modularization algorithms use syntactic properties and they can not be apply if they do not have the necessary tools to extract the call graph. To modularize the software system with syntactic and semantic features, five algorithms have been applied: genetic algorithm with encoding $bunch$ and DAGC, estimation of distribution, combination of genetic and hill climbing (Hybrid) and combination of genetic and hill climbing with one run. our results on Mozilla Firefox showed that the use of the distribution estimation algorithm and combined genetic algorithm with hill climbing are better than the rest of the algorithms in software system modularization