بخشی از مقاله
چکیده
چارچوبهاي نرمافزاري شیءگرا1 به دلیل داشتن مزایایی چون ایجاد یک بستر استاندارد2 براي طراحی و پیادهسازي سامانههاي نرمافزاري3، کاهش هزینهها، کاهش زمان توسعهي سیستم، استفاده مجدد از کد4، و افزایش قابلیت مراقبت و نگهداري به صورت گسترده توسط برنامهنویسان مورد استفاده قرار میگیرند. ولی این چارچوبهاي نرمافزاري مشابه هر نرمافزار دیگر به دلیل مطرح شدن نیازمنديهاي جدید و یا رفع کردن خطاها در طول زمان دچار تغییر و تحول میشوند. این تغییرات موجب میشوند برنامههایی که با استفاده از این چارچوبهاي نرمافزاري نوشته شدهاند دچار مشکل شده و به درستی کار خود را انجام ندهند.
بنابراین همراه با بهز روزرسانی و تکامل5 چارچوبهاي نرمافزاري، این برنامهها نیز نیازمند بهروزرسانی و تکامل میباشندح در این مقاله روشی ارائه شده است که تکامل یک چارچوب نرمافزاري شیءگرا را با استفاده از تحلیل تکامل مفاهیم6 عرضه شده توسط آن چارچوب در بین نسخههاي مختلف آن میسنجد، و قوانین تغییري براي فرآیند تکامل مفاهیم چارچوبهاي نرمافزاري شیءگرا استخراج میکند که برنامهنویسان با استفاده از این قوانین تغییر میتوانند برنامههاي خود را بهروزرسانی کنند . دستاورد این مقاله، روشی نیمهخودکار و با دقت7 و قابلیتبازیابی8 قابل قبول جهت کشف قوانین تغییر موردنیاز براي بهروزرسانی برنامهها میباشد. در نهایت براي سنجش کارایی روش پیشنهادي، تکامل تعدادي چارچوب نرمافزاري با استفاده از این روش تحلیل شده و نتایج بدست آمده با نتایج روشهاي پیشین مقایسه شده است.
واژههاي کلیدي: چارچوب نرمافزاري شیءگرا، تکامل چارچوب، قوانین تغییر، بهروزرسانی برنامه، نسخهي چارچوب.
-1 مقدمه
چارچوبهاي نرمافزاري شیءگرا از قبیل Eclipse، Java Swing، JEdit، و JHatDrow اغلب در توسعهي سیستمهاي نرمافزاري مورد استفاده قرار میگیرند. این امر دلایل مختلفی میتواند داشته باشد که برخی از آنها عبارتند از کاهش هزینهها، کاهش زمان توسعهي سیستم، بهبود طراحی، و استفاده مجدد از کد. چارچوبهاي نرمافزاري، مفاهیمی را به صورت عمومی عرضه میکنند که برنامهنویسان بر حسب نیاز میتوانند از آنها در برنامه خود استفاده نمایند. به عنوان مثال، چارچوب Eclipse مفاهیمی از قبیل Window و یا Context Menu را عرضه میکند که برنامههایی که بر روي Eclipse نوشته شدهاند، میتوانند شامل آنها شوند و نیازي نیست که از ابتدا آن مفاهیم را پیادهسازي نمایند.
چارچوبهاي نرمافزاري شیءگرا، مشابه هر نرمافزار دیگري جهت رفع خطاها، بالا بردن کیفیت، و مطرح شدن نیازمنديهاي جدید توسط کاربران، به طور پیوسته تکامل مییابند. در نتیجه لازم است برنامهنویسانی که از این مفاهیم در برنامههاي خود استفاده کردهاند، کدهاي خود را بهروزرسانی کنند. در تئوري، رابط برنامهنویسی - کاربرد1 نسخه جدید چارچوب بایستی با نسخههاي قبل سازگار باشد تا برنامههایی که از نسخههاي قبلی چارچوب استفاده کردهاند، بتوانند بدون مشکل با نسخههاي جدید چارچوب نیز کار کنند. ولی میبینیم که در عمل اینگونه نمیباشد. به عبارت دیگر، وقتی می-خواهیم یک برنامه را در دو نسخهي مختلف چارچوب اجرا کنیم، برنامه با یکسري خطاهاي کامپایلري و یا خطاهاي زمان اجرا مواجه میشود.
بنابراین همراه با بهروزرسانی چارچوبهاي نرمافزاري، نیازمند بهروزرسانی برنامههایی که بر روي آن چارچوبها نوشته شدهاند نیز میباشیم. لیکن، بهروزرسانی برنامهها همراه با تکامل چارچوبها، کاري بس دشوار و زمانبر است. زیرا برنامهنویسان باید مستندات و یا کدهاي هر دو نسخهي چارچوب را به دقت جستجو کنند تا بتوانند تغییرات را پیدا کرده و در برنامههاي خود اعمال کنند.یک چارچوب نرمافزاري که تکامل مییابد، ممکن است که امکاناتی جدید به آن اضافه شود، و یا امکانات موجود حذف یا تغییر یابند. به عنوان مثال، زمانی که یک کلاس براي برنامهها مفید نمیباشد، آن کلاس میتواند از چارچوب حذف شود. در مقابل، نیازمنديهاي جدید میتوانند موجب ایجاد کلاسهاي جدید در چارچوب شوند.
در نتیجه، سازندگان سیستمهاي نرمافزاري با توجه به تکامل چارچوب-هاي نرمافزاري با یک چالش بزرگ روبرو هستند. چون اگر بخواهند از قابلیتها و ویژگیهاي نسخههاي جدید چارچوب در برنامههاي خود بهرهمند شوند، باید با پرداخت هزینهي زیادي سیستمهاي خود را بهروزرسانی کنند تا برنامهها بتوانند بدون مشکل با نسخه جدید چارچوب کار کنند. ولی اگر به دلیل هزینهي بالاي بهروزرسانی سیستمها از قابلیتها و ویژگیهاي جدید چارچوب چشمپوشی کنند، ممکن است مشتریان خود را از دست بدهند و سیستم به یک سیستم فرسوده تبدیل شود. براي مقابله با این مشکل، روشهایی ارائه شده است که هرکدام از آنها از فنون مقایسهاي متفاوتی استفاده کرده، و داراي نقاط ضعف و قوت خاص خود هستند.
-1-1 هدف مقاله
هدف نهایی مقاله، ارائه روشی خودکار و با دقت و قابلیت بازیابی قابل قبول - بهتر از روشهاي پیشین - جهت کشف قوانین تغییر مورد نیاز براي بهروزرسانی برنامهها جهت سازگاري با نسخههاي مختلف چارچوبهاي مورد نظر است. براي این منظور، در این مقاله روشی ارائه میشود که تکامل چارچوبهاي نرمافزاري را از طریق درك تکامل مفاهیم عرضهشده توسط آن چارچوبها انجام میدهد.
-2 -8 نوآوريهاي انجام شده در مقاله
نوآوريهاي انجام شده در این مقاله جهت تشخیص قوانین تغییر در فرآیند تکامل چارچوبهاي نرمافزاري شیءگرا، عبارتند از:
ارائهي روشی نیمهخودکار با دقت و قابلیت بازیابی بهتر از روشهاي پیشین براي حوزه پشتیبانی از تکامل چارچوبهاي نرمافزاري شیءگرا.روش پیشنهادي به جاي تحلیل کل چارچوبهاي نرمافزاري شیءگرا، به تحلیل مفاهیم پیادهسازي شده در این چارچوبها می-پردازد.روش پیشنهادي جهت کشف قوانین تغییر از رفتار پویاي برنامه در هنگام اجراي برنامه به جاي تحلیل کدهاي ایستاي برنامه استفاده میکند.
-3 -8 ساختار مقاله
در ادامه این مقاله، در بخش دوم راجع به چارچوبهاي نرمافزاري شیءگرا صحبت میکنیم. در بخش سوم، بیان میکنیم که انگیزه روش پیشنهادي در استفاده از مفاهیم عرضهشده توسط چارچوبها جهت درك تکامل آنها در چیست. در بخش چهارم، ابزار FUDA را معرفی میکنیم که در روش ارائه شده در این مقاله، مورد استفاده قرار گرفته است. بخش پنجم، مفاهیم مربوط به تکامل چارچوبها را تشریح میکند. در ادامه، بخش ششم، تکنیکهاي موجود براي تکامل چارچوبها را براساس 16 معیار متفاوت مورد مقایسه قرار میدهد و نقاط ضعف و قوت آنها را بررسی میکند. بخش هفتم، روش پیشنهادي را معرفی میکند و بخش هشتم، به ارزیابی روش پیشنهادي میپردازد. در پایان، بخش نهم، به نتیجهگیري و کارهاي آتی اشاره میکند.
-2 چارچوبهاي نرمافزاري شیءگرا
همانگونه که اشاره شد، چارچوبهاي نرمافزاري شیءگرا در سطح گسترده براي ایجاد نرمافزارهاي جدید مورد استفاده قرار میگیرند. به عبارت مشخصتر، آنها قابلیت استفاده مجدد ٢ کد را فراهم میآورند که میتواند باعث افزایش سرعت ساخت نرمافزارها و بالا بردن کیفیت آنها شود.
-1-2تعریف چارچوب نرمافزاري شیءگرا
یک چارچوب، ساختار کلی یک برنامه را مشخص میکند که میتواند به وسیله یک برنامهنویس سفارشی3 شود .[2]
یک چارچوب، یک مجموعه کلاسهاي هماهنگ هستند که طراحی نرمافزار را قابل استفاده مجدد میکنند .[6]
یک چارچوب که به وسیلهي یک مجموعه از کلاسهاي انتزاعی نمایش داده میشود، یک طراحی قابل استفاده مجدد است براي همه یا قسمتی از یک سیستم .[5]
یک چارچوب، مجموعهاي از کلاسهاي مرتبط به هم است که براي یک کلاس خاص نرمافزار، طراحی را قابل استفاده مجدد میکند.[14]
یک چارچوب، تجربه برنامهنویسان براي حل یک مسئله در یک دامنه خاص را گردآوري میکند. به عبارت مشخصتر، آن بخشهایی از طراحی که بین همه برنامههاي کاربردي در یک دامنه مشترك میباشند را پنهانسازي کرده، و آن قسمتهایی که براي سفارشی کردن مورد نیاز میباشند را مشخص میکند ].[1
-3 انگیزه استفاده از حقیقت مفهوم در روش پیشنهادي
با استفاده از روش پیشنهادي قرار است تکامل چارچوبهاي نرمافزاري شیءگرا را با استفاده از تحلیل تکامل مفاهیم عرضه شده توسط آن چارچوبها در بین نسخههاي مختلف آن بسنجیم. به عبارت دیگر، به جاي تحلیل کل چارچوبهاي نرمافزاري شیءگرا، فقط به تحلیل تکامل مفاهیم عرضه شده توسط آنها میپردازیم. دلایل این امر عبارتند از:
-1 نیازمنديها، قراردادي بین تمام دستاندرکاران سازمان هستند، مبتنی بر اینکه سیستم باید چه تغییراتی داشته باشد تا به نیازمنديهاي موردنظر دست پیدا کند. ارتباط محکم بین مفاهیم و نیازمنديها باعث میشود مفاهیم توسط تمام دست-اندرکاران سازمان قابل فهم باشد. بنابراین مفاهیم درشت دانهتر از نیازمنديهاي شخصی هستند، که فهمیدن - نیازمند تلاش شناختی کمتر - و ردیابی تکامل را آسانتر میکنند.
-2 تغییرات میتوانند با توجه به مفاهیم، معرفی و فهمیده شوند. چون مفاهیم یک زمینه ساده و مشترك براي شناخت نیازمنديهاي موردنیاز در تمام سطوح براي همهي دستاندرکاران سازمان ایجاد میکند.
-3 امروزه خط تولید نرمافزار یکی از مباحث داغ در سازمانها می-باشد، که مفاهیم نقطه آغازي براي راهاندازي خط تولید نرمافزار نیز محسوب میشوند. مدیریت تکامل در سطح مفاهیم براي خط تولید نرمافزار به دستاندرکاران اجازه میدهد تا مفاهیم مشترك و قابل تغییر در خط تولید نرمافزار را بهتر تشخیص دهند.
-4 مفاهیم، تشخیص وابستگیها و اینکه یک تغییر چه تاثیري روي بقیهي سیستم دارد را آسان میکند. در واقع مفهوم یک دیدگاه سطح بالا از اینکه چگونه قسمتهاي متفاوت سیستم به هم مرتبط هستند را در اختیار دستاندرکاران سازمان قرار میدهد.
-4 معرفی ابزار طحUف
چارچوبهاي نرمافزاري شیءگرا مفاهیم مختلفی را ارائه میدهند. برنامهنویسان براي استفاده و پیادهسازي این مفاهیم در برنامههاي خود، نیازمند استفاده از گامهاي مختلف برنامهنویسی از قبیل ایجاد شیء از کلاسهاي مورد نیاز، فراخوانی متدهاي ضروري، و مقداردهی به فیلدها میباشند. مراحل پیادهسازي این مفاهیم باید به وسیلهي - رابط برنامهنویسی - API - چارچوبها معرفی شود. ولی متاسفانه امروزه اغلب چارچوبها داراي رابطهاي برنامهنویسی بسیار بزرگ و پیچیدهاي هستند. همچنین به دلایل مختلف به صورت کامل مستند نشدهاند. به همین دلیل، استفاده از این چارچوبها براي برنامه-نویسان دشوار بوده و آنها مجبورند از برنامههاي موجود که بر روي این چارچوبها نوشته شدهاند، به عنوان راهنما براي پیادهسازي مفاهیم مورد نظر خود استفاده کنند.
هرچند اگر برنامهنویسان بخواهند از برنامههاي موجود به عنوان راهنما استفاده کنند، باز هم با یک چالش جدي روبرو هستند، چون کدهاي اغلب مفاهیم به صورت پراکنده٤ و درهمتنیده٥ با کدهاي دیگر مفاهیم پیادهسازي شدهاند. در نتیجه، تشخیص کدهایی که مفهوم مورد نظر را در برنامهها پیاده-سازي میکنند، مشکل است. براي حل این مشکل، ابزارهایی پیشنهاد شده است که یکی از آنها ابزار FUDA است .[1] ابزار FUDA از تحلیلهاي پویا در زمان اجراي برنامه استفاده میکند، تا بتواند بخشهایی از کد که مرتبط به پیادهسازي یک مفهوم مورد نظر می-باشند را مشخص کند.
-5 تکامل چارچوبهاي نرمافزاري شیءگرا
قبلا اشاره نمودیم که چارچوبهاي نرمافزاري به دلیل مطرحشدن نیازمنديهاي جدید و یا رفعکردن خطاها، در طول زمان دچار تغییر و تحول میشوند. این تغییرات موجب میشوند برنامههایی که با