مهندسی نرم افزار در مدل جنبه گرا (Aspect Oriented)

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

پس مبحث مهندسی نرم افزار جنبه گرا را باید از مهندسی نیازها شروع کرد.

مستند نیازها:

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

بعد از آن که نیازهای کاربران که همان انتظارات کاربر از سیستم است بدست آمد ،می توان آن ها را به دو دسته نیاز های عملیاتی (وظیفه مندی) و کیفی (غیر وظیفه مندی) تقسیم کرد.

نیازهای عملیاتی ، قابلیت ها و سرویس هایی هستند که سیستم در اختیار کاربران قرار می دهد.

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

مدل عمومی مهندسی نیازهای جنبه گرا

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

مدل عمومی منهدسی نرم افزار جنبه گرا
مدل عمومی مهندسی نیاز مندی های مدل جنبه گرا
  1.  در این مرحله ابتدا بر اساس نیازهای ذینفعان ، دغدغه های ذینفعان را مشخص می کنیم و ارتباط بین نیازمندی ها و دغدغه ها را چک می کنیم.
  2. این مرحله برای مشخص کردن جزئیات دغدغه هایی که شناسایی شده اند خواهد بود.
  3. این فعالیت را به شناسایی جنبه های نامزد بر اساس دغدغه های مشخص شده در مرحله قبل می پردازیم. این عمل به این صورت است که اگر دغدغه ای با چندین نیازمندی تداخل داشته باشد به عنوان جنبه نامزد انتخاب می کنیم.
  4. در این مرحله ابتدا جرئیات جنبه های نامزد را مشخص می کنیم. این عمل باعث می شود ارتباطات و تداخلات بین جنبه ها پدیدار شوند و در ادامه بتوان جنبه ها را اولویت بندی کرد.
  5. در این مرحله تاثییرات جنبه ها به مرحله بعد از مهندسی نیازمندی ها بررسی می شود و ابعاد یک جنبه مشخص می شود. تاثییرات را در دو بعد بررسی می کنیم.

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

در این مرحله اطلاعات تفکیک بین تداخل ها که در مرحله قبل بدست آمده مورد استفاده قرار می گیرد.

مهندسی نرم افزار جنبه گرا از دید Jacobson & NG

منبع: سامرویل- Software Engineering- ویرایش نهم 

 Jacobson & NG پیشنهاد دادند که در زمان طراحی یک سیستم دغدغه ها (نیاز) ی ذینفعان مختلف را از دو دیدگاه مورد بررسی قرار دهیم. نیازهایی که به عنوان هسته سیستم هستند (عملیاتی) و نیازهای همراه (Extensions) .دلیل این همه تاکید برروی نیازها این است که پیدا کردن دغدغه ها و ابعاد آن همه از روی نیازها و دیدگاه های کاربر بدست می آید.

 هسته سیستم مجموعه ای از ویژگی های سیستم است که هدف  ضروری یک سیستم را پیاده سازی می کند

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

 اما نیازهای همراه بخش دیگری از دیدگاه ها و نیازهای کاربران است که به هسته اصلی متصل است. این دسته از نیازها باید با هسته اصلی یکپارچه شوند.

در همان مثال اطلاعات بیمار وضعیت کنترل دسترسی کاربران به داده های پایگاه داده نیز مهم است و یا رمز نگاری آن داده ها.  این ها نمونه هایی از نیازهای همراه است.

انواع نیاز های همراه:

  1. عملکرد ثانویه : این Extension ها قابلیت ها و عملکردهای اضافی را به وظیفه های اصلی سیستم اضافه می کنند. برای مثال وظیفه گزارش گیری از داروها در سیستم مدیریت بیماران می توان به عنوان نیازو عملکرد ثانویه سیستم در نظر گرفت.
  2. Policy Extension (سیاست سازمان): اگر سازمان یک سری نیاز خاص و قانون مند برای زیرسیستم های خود در نظر بگیرد و از یک سری توابع قانون مند استفاده کند، Policy ها تعریف می شوند. به عنوان مثال اضافه کردن ویژگی های امنیتی به سیستم به عنوان یک سیاست سازمانی در نظر گرفته شود.
  3. Qos Extension (کیفیت سرویس): در واقع قابلیت عملکردی است که باعث می شود سطح انتظارات کیفی سیستم را بتوان کنترل کرد تا سیستم از لحاظ کیفی به سطح مطلوبی برسد. مثال های متفاوتی می توان در نظر گرفت :

تعداد مراجعات هم زمان در یک سیستم پایگاه داده ای را در زمان Peak آن سیستم.

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

  1. Infrastructure Extension (زیرساخت): قابلیت عملکردی به منظور حمایت از پیاده سازی یک سیستم در برخی از Platformهای خاص اضافه می کند.

 Extension ها در واقع قابلیت ها و ویژگی های اضافی را به هسته سیستم یا عملکردهای اصلی سیستم اضافه می کنند و جنبه ها راهی برای اجرا این Extensionها هستند.

یک شیوه برای جداسازی دغدغه‌ها بررسی آنان از دیدگاه ذینفعان مختلف است. به این شکل که در هر رده از ذینفعان نیاز‌های آنان مشخص شود. و در این بین نیاز آن‌هایی‌ که نیازهای دیدگاه‌های دیگر را تحت تاثیر قرار میدهند به عنوان دغدغه‌های cross-cutting ( مانند مقررات ، امنیت) مطرح هستند این دغدغه‌ها ممکن است نیاز‌هایی‌ را ایجاد کند که تمام یا بخشی از دیدگاه‌های موجود در سیستم را تحت تاثیر قرار دهد.

برای توسعه ی یک سیستم به این روش زمانی‌ که نیازهای هسته ی  اصلی‌ شناسایی شد باید الزامات مورد نیاز برای آن را نیز تشخیص داد.

که به صورت بسته‌هایی‌ به سیستم اصلی‌ متصل میشود. هر یک از این نیازها الزامات گروهای مرتبط با ذینفعان است.

 اگر نیاز مطابق با دیدگاه ذینفعان سازماندهی شود میتواند آنها را به وسیله ی کشف نیازهای وابسته که در تمام یا اکثر دیدگاه‌ها ظاهر شده اند تجزیه و تحلیل کرد.

با استفاده از این کار می‌توان قابلیت‌های اصلی‌ هسته سیستم را پیدا کرد و نمایش داد و در مورد دیگر نیازها می‌توان آنها را به صورت بسط هایی به قابلیت‌های هسته اضافه کرد.

هسته اصلی سیستم و نیاز های همرا
هسته اصلی سیستم نرم افزاری و نیاز های همرا که به آن اضافه شدن

طراحی و برنامه نویسی جنبه گرا:

طراحی جنبه گرا فرآیندی از طراحی سیستم است که از جنبه برای پیاده سازی دغدغه‌های متقاطع یا مداخله ای (cross-cutting conceits) و بسط هایی (extensions)‌ که در فرایند مهندسی‌ نیازها تشخیص داده شده اند استفاده می‌کند.

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

NG , Jacobsen در کتابی نحوه ی استفاده از موردهای استفاده (use case) در فرایند مهندسی جنبه گرا توضیح داده اند. دیدگاه کلی ان ها به این ترتیب است که هر مورد استفاده یک جنبه از برنامه را نمایش می دهد. و بسطهایی که برای پشتیبانی از دیگر موردهای استفاده آمده اند را میتوان به صورت یک جنبه در زبان جنبه گرا  پیاده سازی کرد.

همانطور که میدانید در زبان UML مفهوم به نام Extension use case وجود دارد. این موردهای استفاده  یک وظیفه ی دیگر را به سایر موردهای استفاده اضافه میکنند.

در زمان توسعه موردهای استفاده باید در ان ها به دنبال ویژگی هایی مشترکی گشت که میتوان  ان ها را به عنوان بسط هایی به مورد های استفاده اصلی اضافه کرد . به عنوان مثال میتوان به واقعه نگاری اشاره کرد که به عنوان مورد استفاده ی بسط داده شده بر سایر موردهای استفاده بیان کرد.

بر اساس نظر سامرویل فرایند طراحی جنبه گرا شامل مراحل زیر است:

مراحل طراحی نرم افزار جنبه گرا
فرایند طراحی جنبه گرا از دیدگاه سامرویل
  1. طراحی هسته سیستم: در این مرحله شما باید معماری سیستم را طراحی کنید تا از هسته وظیفه گرایی (Core Functionality) سیستم پشتیبانی کنید، همچنین معماری باید وارد معقوله ی کیفیت نیازمندیهای سیستم مانند احتیاجات قابلیت اعتبار (Detentions) و کارایی شود.
  2. شناسایی جنبه و طراحی که با بسطهایی (Extension) که در مرحله مهندسی نیاز شناسایی شد شروع می شود، شما باید اینها را تحلیل کنید تا ببینید که آیا آنها خودشان جنبه هستند یا باید به چندین جنبه شکسته شوند، وقتی آنها شناسایی شدند آنها می توانند به طور جداگانه طراحی شوند.
  3. طراحی: ترکیب (Composition) در این مرحله شما باید هسته سیستم و طراحی جنبه را تحلیل کنید تا کشف کنید کجا جنبه باید با هسته سیستم ترکیب شود. در اصل شما نقاط اتصال برنامه که جنبه در آن بافته (ساخته) می شود را شناسایی می کنید.
  4. تحلیل تضاد (Confliction) و resolution: یک مشکل در مورد جنبه این است که ممکن است زمانی که با هسته سیستم ترکیب می شوند در یکدیگر دخالت کنند تضاد زمانی رخ می دهد که یک point cut clash با جنبه های مختلف مشخص می کند که آنها باید در همان نقطه از برنامه ترکیب شوند، وجود داشته باشد. اگر چه ممکن است تضادهایی دقیق ( Subtle) بیشتری وجود داشته باشند. وقتی جنبه ها به صورت مستقل طراحی می شوند ممکن است فرضیاتی در مورد وظیفه گرایی هسته سیستم که باید اصلاح شوند بسازد. اگرچه وقتی تعداد زیادی جنبه باهم ترکیب می شوند یک جنبه ممکن است وظیفه گرایی سیستم را تغییر دهد تا اندازه ای که دیگر جنبه ها آن را پیش بینی نمی کنند. رفتار کلی سیستم در آن زمان ممکن است غیر قابل انتظار باشد.

طراحی نام: این یک فعالیت طراحی مهم است که استانداردهایی برای نام گذاری موجودیت ها در برنامه را معین می کند. این مهم است که از مشکل تصادفی (اتفاقی) point cut اجتناب کنیم. این مشکل زمانی رخ می دهد که در تعداد کمی از نقاط های اتصال (Join Points) برنامه، نام به طور تصادفی با نام موجود در طرح point cut یکسان است. بنا براین ندانسته در آن نقطه به کار برده می شود. بدیهی است که این موضوع نا مطلوب است منجر به رفتار غیر منتظره برنامه شود، بنابراین شما باید یک برنامه نامگذاری طراحی کنید تا احتمال کل وقوع این اتفاقات را کمینه کند.

وارسی و معتبر سازی

وارسی (Verification)  و معتبر سازی (Validation) فرایندی است که برنامه با مشخصات مطابقت می کند(وارسی) و نیاز های واقعی ذینفعان را محقق می سازد(معتبر سازی)

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

نویسنده مطلب: حسین اسحقی

یک دیدگاه در “مهندسی نرم افزار در مدل جنبه گرا (Aspect Oriented)

  • اردشیر

    (تیر ۱۹, ۱۳۹۶ - ۱:۱۰ ق٫ظ)

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

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

96 − 91 =