بخشی از مقاله

چکیده

در دهه های اخیر عدم توجه صحیح به خواسته ها و نیازمندیهای کاربران و یا تجزیه و تحلیل ناصحیح آنها منجر به شکست بسیاری از محصولات نرم افزاری شده است. طراحی معماری نرم افزار به شیوه ی جنبه گرا یکی از راهکارهای موثر در جهت مواجهه با این چالش است.

در حال حاضر مفهوم جنبه ی نرم افزاری در بخش تجزیه و تحلیل و طراحی معماری نقش پررنگ تری دارد. متأسفانه مدل سازی نرم افزار و نمایش دغدغه های متقاطع در مراحل پایانی توسعه نرم افزار منجر به بروز پیچیدگی و پراکندگی کدهای برنامه می شود. از این رو پژوهشگران تکنیکهای مدل سازی را با هدف مدل سازی جنبه در مراحل اولیه توسعه نرم افزار پیشنهاد کردند.

روش توسعه نرم افزار به شیوه ی جنبه گرا راهی برای پیمانه بندی برنامه و جدا سازی دغدغهها از ابتدا تا زمان انتشار نرم افزار است. در این مقاله پیمانه بندی جنبهها در معماری نرم افزار با روش AOGA انجام گرفته است. در تجزیه، تحلیل و طراحی معماری، مفاهیم توصیف معماری جنبه گرا شرح داده شده است.

رویکرد این مدل با زبان مدل سازی UML انجام شده است و حوزه مسأله نرم افزار شهرداری است که شامل چهار بخش فنی و عمرانی، اصناف، ساختمانی و بخش نوسازی است. طراحی نرم افزار با روش فوق الذکر منجر به شناخت بهتر نیازمندیها، جنبه های نرم افزاری و جداسازی دغدغه های متقاطع شده است.

-1 مقدمه

با وجود انواع متدولوژی ها و تکنیک ها در زمینه مهندسی نرم افزار، باز هم نیازمند روش ها، سبک ها، پارادایمها و زبان های پیاده سازی به همراه محیط های توسعه هستیم تا بتوان مشکلات پیش روی این حوزه را سهل تر کرد یا آنها را از بین برد. تمام تکنیک های ارائه شده در زمینه توسعه سیستم، تمرکزشان بر روی جدا کردن بخش های مختلف سیستم به واحدهای مجزایی است که کمترین هم پوشانی را با یکدیگر داشته باشند و به نتایج مثبتی در این زمینه رسیده اند، مدلهای مختلف توسعه نرم افزار نیز وجود دارد: مدل آبشار، مدل V، مدل افزایشی، مدل RAD، مدل چابک، مدل تکراری، مدل مارپیچ.

اما باز هم این روشها در برخورد با دغدغه هایی از سیستم که درگیر با بخش های مختلف سیستم هستند، عاجزاند و این دغدغهها باعث می شوند پیمانه ای کردن یک سیستم به شکل مطلوب صورت نگیرد که به این دغدغه ها، دغدغه های متقاطع گفته می شود. در شیوه های سنتی و رایج امروزی توسعه دهندگان با مشکل مربوط به دغدغه های مداخله ای در بخش تحلیل و طراحی توسعه، چندان کاری نداشته و آنها را موکول به مرحله پیاده سازی می کردند که در مرحله پیاده سازی، این دغدغه های متداخل باعث ایجاد پیچیدگی کد و پراکندگی کد مربوط به یک دغدغه در میان چندین کلاس پیاده سازی می شدند.

روش های پیمانه بندی مرسوم از قبیل کلاسها و مولفهها نمی توانند دغدغه های مداخله ای را به صورت مجزا از یکدیگر نگاه دارند و این عدم توانایی در مجزا نگه داشتن دغدغهها در طول طراحی و پیاده سازی، سیستم را برای درک و نگهداری بسیار سخت می کند و جلوی توسعه موازی سیستم را می گیرد و سیستم را به سمتی سوق می دهد که گسترش آن به سختی می تواند صورت پذیرد.

علت استفاده از توسعه نرم افزار جنبه گرا کمک به حل مسئله معماری است. عملکرد برنامه نویسی شی گرا مستلزم درگیری چند شی یا جزء مختلف می باشد . در نتیجه ارتباط بین اشیاء یا اجزا و موضوع است. این باعثمی شود که برنامه مورد نظر برای تغییرات پیاده سازی وابسته به شی، شود. بهبود تعمیر و نگهداری نیز مشکل است. همچنین تعامل بین این اشیاء کد نویسی داخل شی را سخت کرده است.

در روند رو به رشد برای حل این مشکل در فاز پیاده سازی، زبان برنامه نویسی ارائه شد تا بتواند این مشکل را در فاز پیاده سازی حل کند. این زبان برنامه نویسی، تحت عنوان برنامه نویسی جنبه گرا معرفی گردید که پیاده سازی دغدغههای مداخلهای در کد، پیمانه بندی می شود و از بروز مشکلات مربوطه جلوگیری می کند. این زبان تمرکز خود را بیشتر بر روی بیان رفتارهای سیستم بنا نهاد تا بتواند بر این مشکلات چیره گردد و البته قالب های خاص ترکیب و تجزیه برای این منظور را نیز معرفی کرد. اما با به کارگیری این روش در توسعه نرم افزاری مشاهده شد که تنها پیمانه بندی این دغدغهها در فاز پیاده سازی ارزش چندانی را به ارمغان نمی آورد و این اسلوب باید در تمام فازهای توسعه به کار گرفته شود.

دلیل آن نیز ناشی از این نکته بود که تحلیل و طراحی که قابلیت پیمانه بندی مناسب را نداشت - بر حسب جنبه - در نهایت توسط کد، به قالب پیمانه بندی شده تبدیل می شد و پیاده ساز نمی توانست درک درستی از این پیمانهها بدست آورد و متحمل کارهای سختی برای انجام این عمل می شد. برای همین منظور توسعه نرم افزاری جنبه گرا معرفی گردید تا در این اسلوب، از جنبه گرایی که یک سازوکار خوب برای پیمانه بندی است، در سرتاسر چرخه حیات نرم افزار به کار گرفته شده و از قدرت آن استفاده شود. اما اصلی ترین موضوع در این اسلوب و دیگر اسلوب های توسعه آن است که باید بتوان دغدغه های سیستم را به عناصر پایه آن اسلوب تبدیل کرده و آن را مدل سازی و سپس پیاده سازی کرد. در این اسلوب نیز باید در اولین گام جنبهها را در یک سیستم تشخیص داده و آنها را همراه با دیگر عناصر مدلسازی کرد.

توسعه نرم افزاری جنبه گرا یک تکنولوژی توسعه نرم افزاری است که روشهای جدید برای پیمانهبندی سیستمهای نرمافزاری فراهم می گرداند. در واقع تمرکز اصلی توسعه نرم افزاری جنبه گرا بر روی شناسائی، ذکر مشخصات، معرفی و پیمانهبندی دغدغه های مداخله ای در داخل واحدهای عملیاتی مجزا بعلاوه ترکیب خودکار آنها در داخل سیستم است.

توسعه نرم افزاری جنبهگرا همانند هر روش توسعه نرم افزاری، متشکل از فازهایی است که پیروی از این فازها منجر به ایجاد سیستم مورد انتظار می شود. بنابراین جنبهگرایی در چرخه حیات توسعه نرم افزار متشکل از بخشهای مهندسی نیازمندی جنبه گرا، معماری سیستم جنبه گرا، طراحی و مدلسازی جنبه گرا، برنامه نویسی جنبه گرا، حمایت متد رسمی برای جنبه گرایی، آزمایش برنامه های جنبه گرا، نگهداری برنامه های جنبه گرا است.

ساختار مقاله به شرح زیر است: بخش دوم مروری بر مفاهیم جنبه گرایی دارد و پژوهشهای مربوطه و روش تحقیق تحلیل می شود. در بخش سوم متدولوژی پژوهش بررسی شده و یافتهها بیان می گرددو جداول و نمودارها شرح داده می شود و در بخش چهارم بحث و نتیجه گیری قرار گرفته است.

-2 روش تحقیق

1-2 مفاهیم پایه

هر پارادایم جدید برنامه نویسی یک مجموعه از تعاریف و مفاهیم را معرفی می کند که برای درک، فهم و به کارگیری پارادایم لازم است.

برای اینکه یک برنامه پیچیده را درک و مدیریت کنیم آن را به زیر برنامه هایی تقسیم می کنیم. روش رویه ای، یک برنامه را به رویه های اجرایی و روش شیءگرا برنامه را به کلاس ها تقسیم می کند ولی عملیات هایی وجود دارند که پیمانه بندی آنها با هر دو روش بسیار مشکل است.

برنامه نویسی جنبه گرا کدهای پراکنده شده مربوط به یک چنین عملکردی را در داخل موجودیتی بنام جنبه قرار می دهد تا مشکل پراکندگی را حل کند. بنابراین: جنبه قسمتی از برنامه که شامل تلاقی چندین دغدغه جدا از هم است تعریف می شود. دغدغه معیار اولیه برای تجزیه نرم افزار به قسمتهای کوچکتر، قابل مدیریت و قابل درک می باشد که مورد توجه هر ذینفع نرم افزار اعم از کاربر نهایی، حمایت کننده پروژه و یا سازنده نرم افزار است و جدا سازی این دغدغهها شامل تقسیم نرم افزار به قسمتهای مجزا که تا حد امکان از نظر کارکردی تداخلی نداشته باشند.

دغدغههای مداخلهای متشکل از کارکردهای مشترک است و جزء نیازهای کاربردی نمی باشد و هر گاه کد پیاده سازی یک دغدغه با کد دغدغه ی دیگر مخلوط شود مشکل پیچیدگی و هرگاه کد پیاده سازی دغدغه بین چند ماژول پخش شده باشد مشکل پراکندگی را به دنبال دارند. نقاط قطع نقاطی هستند که شامل فراخوانی یک جنبهمی شود. نصایح روال کاری است که به سیستم اضافه میشود تا کارهای مربوط به یک دغدغه انجام شود و مشخص می کند که در داخل یک جنبه چه دستوراتی وجود دارد.

2-2 مروری بر پژوهشهای مرتبط

1-2-2 معرفی PRISMA

امروزه سیستمهای نرم افزاری در حال توسعه و تبدیل شدن به ساختار پیچیده می باشند. معماری نرم افزار به عنوان یک راه حل برای فرایند توسعه سیستمهای نرم افزاری پیچیده است. - Pérez et al, 2006 - بر روی روش معماری PRISMA کار کردند. PRISMA روشی برای توسعه سیستمهای نرم افزاری پیچیده است که با روشهای مختلف طراحی و توسعه نرم افزار مبتنی بر مولفه CBSD و توسعه نرم افزار جنبه گرا - Schmidt et al, 2003 - AOSD استفاده شده است

در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید