نام پژوهشگر: محمدحسین هاشمینژاد
محمدحسین هاشمی نژاد سعید جلیلی
طراحی نرم افزار یکی از سخت ترین و پیچیده ترین وظایف در توسعه نرم افزار می باشد. در اغلب متدولوژی های توسعه نرم افزار، مرحله طراحی بعد از مرحله تحلیل انجام می گیرد. در مرحله تحلیل به چیستی نیازمندی ها پرداخته می شود در حالی که مرحله طراحی به چگونگی محقق سازی نیازمندی ها می پردازد. در واقع طراحی، یک فرآیند مبتکرانه برای تبدیل صورت مسئله به راه حل ها می باشد. بنابراین فرآیند مبتکرانه طراحی نرم افزار به دلیل پیچیدگی و مستعد خطا بودن از اهمیت خاصی برخوردار است. بررسی روش های مختلف طراحی نرم افزار نشان می دهد که روش های مبتنی بر معماری نقش بنیادی در موفقیت طراحی نرم افزار ها داشته است. در این روش ها مهم ترین فعالیت، شناسایی مولفه ها و تعیین ارتباط بین آنها می باشد که این مسئله در دسته مسائل np-hard قرار می گیرد. تا کنون روش های متعددی بمنظور شناسایی مولفه های معماری ارائه شده است که بیشتر آنها مبتنی بر روش های خوشه بندی کلاسیک می باشند. در این روش ها فقط به دو عامل اتصال و انسجام پرداخته شده است و به عوامل دیگری که در شناسایی مولفه های معماری نرم افزار موثر هستند توجهی نشده است. به همین دلیل استفاده از آنها منجر به شناسایی مولفه های معماری متفاوت با دید متخصص شده است. یکی از حوزه های جدید تحقیقاتی بمنظور خودکارسازی فرآیند های مهندسی نرم افزار استفاده از روش های جستجو برای حل مسائل مهندسی نرم افزار است. ایده اصلی این رویکرد اینست که فضای راه حل های ممکن برای هر مسئله مهندسی نرم افزار به صورت فضای جستجو در نظر گرفته می شود، سپس با استفاده از روش های جستجوی مناسب، راه حل بهینه بدست می آید. این رساله دارای دو هدف: 1) خودکارسازی طراحی معماری نرم افزار با رویکرد جستجوبنیان و 2) توسعه الگوریتم ژنتیک بمنظور طراحی معماری نرم افزار است. منظور از خودکارسازی طراحی معماری نرم افزار اینست که با استفاده از فرآورده های فاز تحلیل و نیازمندی های یک سامانه، مولفه های معماری و روابط بین آنها با توجه به محدودیت های موجود بصورت خودکار شناسایی شوند. در این رساله چهار روش شناسایی مولفه های معماری نرم افزار ارائه شده است و این روش ها با 7 سامانه به عنوان مورد مطالعه ارزیابی شده اند. هریک از این روش ها دو هدف خودکارسازی طراحی معماری نرم افزار و توسعه الگوریتم ژنتیک را دنبال می کنند. در اولین روش تلاش شده است که مسئله شناسایی مولفه های معماری نرم افزار به یک مسئله جستجو نگاشت شود و با استفاده از الگوریتم ژنتیک استاندارد به عنوان یک روش بهینه سازی حل شود. در دومین روش تلاش شده است که الگوریتم ژنتیکی مخصوص مسئله شناسایی مولفه ها طراحی شود که در آن عملگر های ژنتیکی متناسب با این مسئله تعریف شده است. در سومین روش تلاش شده است که تعدادی از محدودیت های موثر در شناسایی مولفه ها مانند مدل استقرار مولفه ها، چارچوب های برنامه نویسی و مولفه های قدیمی قابل استفاده مجدد در الگوریتم ژنتیک گنجانده شود تا مولفه های بدست آمده این محدودیت ها را رعایت کنند. در چهارمین روش تلاش شده است که امکانی فراهم شود که معمار(ان) نرم افزار بصورت مستقیم با الگوریتم ژنتیک تعامل کنند و دانش آنها سبب راهنمایی الگوریتم ژنتیک در شناسایی مولفه ها شود. با بررسی های موردی انجام شده، مزیت هر روش و قابلیت کاربری هر روش تشریح شده است.