مفاهيم توسعه مبتني بر جنبه (ادامه)
Download
Report
Transcript مفاهيم توسعه مبتني بر جنبه (ادامه)
بسمهتعالي
فصل شانزدهم
توسعه مبتني بر جنبه ( )Aspect-oriented Development
اهداف جلسه
ذاتي بودن پيچيدگي نرمافزار
توسعه نرمافزار مبتني بر جنبه
مفاهيم توسعه مبتني بر جنبه
انواع جنبهها و دستهبندي آنها
توسعه نرمافزار مبتني بر جنبه
2
فهرست مطالب
پيچيدگي ذاتي نرمافزار
توسعه نرمافزارهاي مدرن و مشکالت آن
مفاهيم توسعه مبتني بر جنبه
نمونههاي توجه به جنبه
تفاوت شي با جنبه
توسعه نرمافزار مبتني بر جنبه
3
توسعه نرمافزار
نرمافزارهاي آينده
نرمافزارهاي موجود
نرمافزارهاي قديمي
توسعه نرمافزار از حالت ثابت ،محاسباتي و دادهگرا
به حالت پويا ،بسته به نياز و مولفهگرا تبديل شده است
4
)(ادامه
Complexity
واحدبندي روش ي
براي مهار پيچيدگي
است
توسعه نرمافزار
Object Oriented Programming
Data Abstraction
Modular Programming
Structured Programming
Compiled Programming Languages
Modularity
5
توسعه نرمافزار
(ادامه)
برنامهنويس ي ساختاريافته
راحتي خواندن و نوشتن
قابليت توسعه پائين
قابليت نگهداري پائين
قابليت استفاده مجدد پائين
فاقد واحدبندي
Program
Main program
data
i = 1
{ )while (i < 4
)print(i
i = i + 1
}
6
توسعه نرمافزار
(ادامه)
برنامهنويس ي رويهاي
Program
راحتي خواندن و نوشتن
قابليت توسعه بهبوديافته
Main program
data
قابليت نگهداري بهبوديافته
قابليت استفادهمجدد بهبوديافته
واحدبندي بهبوديافته
Procedure
1
Procedure
2
Procedure
n
7
توسعه نرمافزار
(ادامه)
برنامهنويس ي ش يگرا
Program
راحتي خواندن و نوشتن
Object 1
data
قابليت توسعه خوب
قابليت نگهداري خوب
قابليت استفادهمجدد خوب
Object 4
data
Object 2
data
واحدبندي خوب
Object 3
data
8
توسعه نرمافزار
(ادامه)
نيازهاي وظيفهمندي
+
نيازهاي غيروظيفهمندي
+
نيازمنديهاي توسعه نرمافزار
پيچيدگي
9
توسعه نرمافزار
(ادامه)
مشکالت روشهاي شيگرا از آنجا ناشي ميشود که
نگاشت بين مولفهها اغلب يک به يک است
سبب تغيير يک يا چند
ميتواند
توسعهنيازمندي
تغيير
شودنگاهي بر
مولفه) با
Aspect-oriented
جنبه (
مبتنيهابر
دشوار
)Concerns
دغدغهوهاي (
محلي نمودن
استاست
شده
عموميارائه
بهينه آنها
پوشش
نيازمنديها
برخي اوقات اين کار امکانپذير نيست
تمرکز شيگرايي برر روي بهبرود برنامهنويسري و کردها اسرت ،در حاليکره
نياز است تا تمرکز بر روي نيازمنديها باشد
چالش اصلي توسعه نرمافزار ،برآوردهسازي نيازمنديهاست
10
مفاهيم توسعه مبتني بر جنبه
دغدغه ()Concern
نيازمندي سيستم که براي ذينفعان اولويت دارد
مجموعه خاصي از رفتارهاي مورد نياز براي يک برنامه
بر ماژولهاي مختلف نرمافزار تاثير ميگذارد
ميتوانند وظيفهمندي يا غيروظيفهمندي باشند
Logging and Debugging ،Performance ،Business logic
ميتوانند سطح باال يا سطح پائين باشند
Caching ، Security, QoS
11
مفاهيم توسعه مبتني بر جنبه
(ادامه)
جداسازي دغدغهها ( )Separation of concernsروشري برراي توجره
به آنها به صورت مجزاست که اجازه رهگيري شفاف نيازمنرديها
به پيادهسازي را ميدهد
جداسازي در روشهاي سنتي از طريق واحدبندي و كپسولهسازي
فراهم ميگردد
زبانهاي رويهاي دغدغهها را به رويهها تبديل ميكنند
زبانهاي شيگرا دغدغهها را اشياء تبديل ميكنند
طراحيهاي سرويسگرا دغدغهها را به سرويس تبديل ميكنند
12
)(ادامه
concern
concern
13
مفاهيم توسعه مبتني بر جنبه
concern
concern
Separation of concerns
مفاهيم توسعه مبتني بر جنبه
(ادامه)
Core concerns
دغدغههايي هستند که به اهداف اصلي سيستم مرتبط هستند و معموالً در
يک رويه ،ماژول يا شي قرار ميگيرند
Crosscutting Concerns
بطور معمول در چندين رويه ،ماژول يا شي قرار ميگيرند
در هنگام تغيير به دو صورت مشکل ايجاد ميشود
: Tanglingيک مولفه بيش از يک نيازمندي را پيادهسازي ميکند
: Scatteringپيادهسازي يک نيازمندي توسط چند مولفه انجام ميشود
14
)(ادامه
مفاهيم توسعه مبتني بر جنبه
Program
Object 1
data
Object 4
data
Object 2
data
Object 3
data
Concern
Implementation
A
Object 1
B
Object 2
C
Object 3
D
Object 4
E
Object 1,2,3
Crosscutting Concerns
15
نمونه توجه به جنبه
Good modularization
XML parsing is implemented in its own module
16
)(ادامه
نمونه توجه به جنبه
Good modularization
URL pattern matching is implemented in 2 modules
17
)(ادامه
نمونه توجه به جنبه
Bad modularization
Logging is implemented in a lot of different places
18
)(ادامه
مفاهيم توسعه مبتني بر جنبه
)Tangling( درهم پيچيدگي
synchronized void put (SensorRecoed rec) throws Interrupted Exception
{
if (numberOfEntries == bufsize)
wait ();
store [back] = new SensorRecord (rec.sensorId, rec.sensoral) ;
back = back + 1;
if (back == bufsize)
back =0;
numberOfEntries = numberOfEntries +1;
notify();
} // put
19
)(ادامه
مفاهيم توسعه مبتني بر جنبه
)Scattering( پراكندگي
Patient
20
Image
Consultation
<attribute decls>
<attribute decls>
<attribute decls>
getName ()
editName ()
getAddress ()
editAddress ()
...
anonymise ()
...
getModality ()
archive ()
getDate ()
editDate ()
...
saveDiagnosis ()
saveType ()
...
makeAppoint ()
cancelAppoint ()
assignNurse ()
bookEquip ()
...
anonymise ()
saveConsult ()
...
مفاهيم توسعه مبتني بر جنبه
(ادامه)
پيامدهاي درهم پيچيدگي و پراكندگي
تغيير در يك دغدغه موجب تغيير در دغدغههاي ديگر مي شود
عدم كشف نيازمنديهاي هر دغدغه از طريق كد منبع
از بين بردن واحدبندي سيستم
ضعف در درك و فهم
براي سيستم هاي بزرگ
قابليت درك
ضعيف
قابليت ضعيف
ي
نگهدار
سختي توسعه
21
مفاهيم توسعه مبتني بر جنبه -انواع دغدغهها
کارکردي ()Functional
کيفيت سرويس ()Quality of Service
سياستهايي که بر استفاده از سيستم حاکم هستند
سيستم ()System
رفتار غيروظيفهمندي سيستم مرتبط هستند
سياست ()Policy
با وظيفهمندي خاصي از سيستم مرتبط هستند
برره خصوصرريات سيسررتم بررهعنوان يررک کررل ماننررد قابليررت نگهررداري و پيکربنررديش مرررتبط
هستند
سازماني ()Organisational
به اهداف سازماني و اولويتهاي آن مرتبط هستند
22
مفاهيم توسعه مبتني بر جنبه
(ادامه)
جنبه ()Aspect
تجريدي است که کد مرتبط با دغدغههاي cross-cuttingرا کپسوله ميکند
در هر جنبه اطالعاتي در مورد اينکه چه وقت بايرد بره کرد برنامره اضرافه
شود ،وجود دارد
يك جنبه متشكل از دو بخش Pointcut, Advice Codeاست
جررايي در برنامرره کرره جنبرره ميتوانررد در آنجررا افررزوده شررود ،نقطرره اتصررال
( )Joint Pointنام دارد
به مجموعهاي از نقاط اتصال در برنامه Pointcutگويند
23
مفاهيم توسعه مبتني بر جنبه
Advice
پيادهسازي کد يک دغدغه
Waving
(ادامه)
تلفيق کد Adviceدر برنامه با استفاده از
Aspect Weaver
Joint Point Model
مجموعهاي از رويدادها که ميتوانند در يرک Pointcutمرورد اشراره قررار
گيرند
24
مفاهيم توسعه مبتني بر جنبه
انواع محلهاي قرارگيري
(ادامه)
JP
متدها :فراخواني و اجراي متد دو تا JPمحسوب ميشوند
سازندهها :فراخواني و اجراي يك سازنده ،نوعي از JPها است
استتنناهها :رخ دادن استثناء و اجراي رفتار مورد انتظار -دو نقطه اصلي
در اجراي يك برنامه كاربردي -نوعي از JPها است
فيلتدها :عمليات خواندن و نوشتن بر روي فيلدها ميتوانند بره عنروان
JP
در نظر گرفته شوند
25
Aspect نمونه
aspect authentication
{
before: call (public void update* (..)) // this is a pointcut
{
// this is the advice that should be executed when woven into
// the executing system
int tries = 0 ;
string userPassword = Password.Get ( tries ) ;
while (tries < 3 && userP assword != thisUser.password ( ) )
{
// allow 3 tries to get the password right
tries = tries + 1 ;
userPassword = Password.Get ( tries ) ;
}
if (userPassword != thisUser.password ( )) then
//if password wrong, assume user has forgotten to logout
System.Logout (thisUser.uid) ;
}
} // authentication
26
Aspect weaving
کد منبع را پردازش نموده و جنبهها را در برنامهAspect Weavers
خاصي قرار ميدهدPointcut و در
سه روش براي قرار دادن جنبهها
27
Source Code pre-processing
Link-time weaving
Dynamic, Execution-time weaving
Aspect weaving
28
نمونه استفاده از جنبه
سيستم مديريت هتل
29
نمونه استفاده از جنبه
(ادامه)
تحقق بخشيدن به دغدغهها
30
نمونه استفاده از جنبه
(ادامه)
تحقق بخشيدن به دغدغهها
31
نمونه استفاده از جنبه
(ادامه)
تحقق بخشيدن به دغدغهها
32
)(ادامه
نمونه استفاده از جنبه
كد پيادهسازي
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
33
public aspect CheckInCustomer {
...
public void Room.assignCustomer ()
{
// code to check in customer
}
public void Reservation.consume()
{
// code to consume reservation
}
public void Payment.createBill()
{
// code to generate an initial outstanding bill
}
ش ي و جنبه
شباهت
هر دو داراي نوع هستند
ميتوانند به کالسهاي ديگر يا جنبههاي ديگر توسعه داده شوند
ميتوانند بهصورت تجريد باشند
ميتوانند داراي فيلد ،متدها و نوع داده باشند
تفاوت
جنبهها ميتوانند به صفات ديگر اعضا دسترسي داشته باشند
34
توسعه نرمافزار مبتني بر جنبه
توسررعه مبتنرري بررر جنبرره برره اسررتفاده از جنبرره در توليررد و توسررعه
نرمافزار اشاره دارد
هماننررد مترردولوژيهاي ديگررر ،مترردولوژيهاي مبتنرري بررر جنبرره نيررز
فازهاي مشابه خود را دارند ،اما خود را مبتني بر جنبه ميدانند
35
)(ادامه
توسعه نرمافزار مبتني بر جنبه
... Requirements Engineering
... Architecture
... Design
Aspect-oriented...
... Programming
... Verification techniques
... Middleware
36
مهندس ي نيازمنديهاي جنبهگرا
روشي بهمنظور تمرکز بر روي دغدغههاي مشتري کره برا توسرعه
جنبهگرا سازگار است
پايه اين روش Viewpointها هستند
استفاده از Viewpointها براي جداسازي دغدغهها
اسرررتفاده از Viewpointهرررا برررراي نمرررايش نيازمنرررديهاي گروههررراي مررررتبط
ذينفعان
concerns
Cross-cuttingدغدغههايي که توسط تمرام Viewpointهرا مشرخ
ميشوند
37
)(ادامه
مهندس ي نيازمنديهاي جنبهگرا
Viewpoints
Concerns
Equ ipmen t
Users
Man ag ers
THE SYSTEM
Organisatio n
Society
Reg ulatio n
38
Secu rity
Dep en dab ility
Cross-cutting
concerns
مهندس ي نيازمنديهاي جنبهگرا
(ادامه)
نيازمنديهاي اصلي ()Core Requirements
همان دغدغههاي اصلي ( )Core Concernsهستند
هدف از توسعه سيستم دستيابي به نيازمنديهاي اصلي است
نيازمنديهاي توسعهاي ()Extension Requirements
مجموعهاي از Cross-cutting Concernsهستند
39
مهندس ي نيازمنديهاي جنبهگرا
(ادامه)
نمونه :فروشگاه زنجيرهاي آنالين
مجموعهاي از فروشگاهها که خدمات خرود را بره صرورت اينترنتري ارائره
ميدهند
کاربران با مشاهده کاالها ،درخواست خريد خود را ارائه ميدهند
کاال براي کاربر بوسيله پست ارسال ميشود
ايررن فروشررگاهها داراي يررک انبررار مرکررزي هسررتند کرره کاالهرراي خررود را از
آنجا تهيه و در صورت خرابي به آنجا ارسال مينمايند
در صررورت خرابرري يررا نقر
خريد آن را عودت دهد
در کرراال ،کرراربر ميتوانررد 48سرراعت پررس از
40
مهندس ي نيازمنديهاي جنبهگرا
(ادامه)
نمونه ديدگاه :فروشگاه زنجيرهاي آنالين
ديد کاربران
جستجوي کاالها
مشاهده موجودي هر کاال
مشاهده موجودي کاال در فروشگاههاي خا
پيدا کردن نزديکترين فروشگاه
درخواست خريد کاال
گزارش عدم دريافت کاال
گزارش خرابي کاالي خريداري شده
...
41
مهندس ي نيازمنديهاي جنبهگرا
(ادامه)
نمونه ديدگاه :فروشگاه زنجيرهاي آنالين
ديد فروشنده
تقاضاي کاال از انبار مرکزي
جستجوي کاالها
مشاهده موجودي کاالها
مشاهده ،بررسي و تائيد درخواست خريد کاال
مشاهده ،بررسي و تائيد گزارش خرابي کاال
ارسال کاالي داراي نق
...
به انبار مرکزي
42
مهندس ي نيازمنديهاي جنبهگرا
(ادامه)
نمونه ديدگاه :فروشگاه زنجيرهاي آنالين
ديد انباردار
ارسال کاال به فروشگاه متقاضي
جستجوي کاالها در انبار مرکزي
بررسي و تعويض کاالي داراي نق
بارکدگذاري کاالهاي انبار
بروز نگهداري اطالعات موجودي انبار
...
43
مهندس ي نيازمنديهاي جنبهگرا
(ادامه)
نمونه ديدگاه :فروشگاه زنجيرهاي آنالين
نيازمنديهاي اصلي
کاربران ميتوانند کاالها را جستجو و مشاهده نمايند
کررراربران مجررراز (شناسرررايي شرررده) ميتواننرررد اطالعرررات کامرررل کررراال را مشررراهده و
درخواست خريد کنند
فروشندگان ميتوانند موجودي کاالي خود را مشاهده و تغيير دهند
انباردار ميبايست برنامه زمانبندي تعويض کاال را ايجاد نمايد
...
44
مهندس ي نيازمنديهاي جنبهگرا
(ادامه)
نمونه ديدگاه :فروشگاه زنجيرهاي آنالين
نيازمنديهاي توسعهاي
وظيفهمندي
کاربر و فروشنده ميتوانند برنامه زماني تعويض کاال را مشاهده نمايرد (ديرد کراربر
+ديد فروشنده +ديد انباردار)
کرراربر و انبرراردار ميتواننررد گررزارش خرابرري کرراالي تائيررد شررده توسررط فروشررنده را
غيروظيفهمندي
مشاهده نمايند (ديد کاربر +ديد فروشنده +ديد انباردار)
اطالعات کاربران ،فروشندگان و انبارداران به صورت رمزشده ذخيره ميشود
45
معماري جنبهگرا
معمراري سيسرتم جنبررهگرا برپايرا معمراري سيسررتمهاي اصرلي (
Core
)Systemsو توسعهها ( )Extensionsاست
Ext 2
Ext 1
Ext 3
Core system
نيازمنديهاي اصلي
نيازمنديهاي توسعهاي
Ext 4
Ext 6
Ext 5
46
معماري جنبهگرا
(ادامه)
انواع توسعهها
توسعههاي کارکردي ثانويه
توسعههاي سياستي ()Policy
قابليتهررراي کرررارکردي را برررراي حمايرررت از سياسرررتهاي سرررازماني (ماننرررد امنيرررت)
ميافزايد
توسعههاي کيفيت سرويس ()QoS
قابليتهايي کارکردي اضافهاي را به سيستم اصلي ميافزايد
قابليتهاي کارکردي را براي کمک به نگهداري کيفيت سرويس ميافزايد
توسعههاي زيرساختي ()Infrastructure
قابليتهاي کارکردي را براي حمايت از پيادهسازي سيسرتم روي سرکوهاي مختلرف
ميافزايد
47
طراحي جنبهگرا
فرآيند طراحي سيستمي از جنبهها براي پيادهسرازي
cross-cutting
concernsو ديگرررر نيازمنرررديهايي کررره در طرررول فرآينرررد مهندسررري
نيازمنديها شناسايي شدهاند ،استفاده ميکند
طراحرررري جنبررررهگرا بايررررد بهگونررررهاي انجررررام شررررود کرررره دو مشررررکل
Scatteringو Tanglingبه کمترين حد خود برسد
48
)(ادامه
طراحي جنبهگرا
Program
Program
Object 1
data
Object 1
data
Object 4
data
Object 2
data
Object 2
data
Object 3
data
Object 3
data
Aspect
Implicit invocation
49
Object 4
data
طراحي جنبهگرا
(ادامه)
مورد کاربري ميتواند به عنوان جنبه در نظر گرفته شود
ايده اسرتفاده از مرورد کراربري برراي جنبره توسرط Jacobsenو براا
استفررااده از مفررااهيم جاديررادي چرراون
slices
use-caseو
use-case
modulesارائه شده است
مررورد کرراربري توسررعهاي بررراي نمررايش مرردل معمرراري جنبررهگراي
اصلي +توسعهها بکار ميرود
50
)(ادامه
طراحي جنبهگرا
مورد کاربري توسعهاي
ĒextendČ
View maintenance
schedule
User
51
View item
طراحي جنبهگرا
(ادامه)
فرآيند انجام طراحي جنبهگرا
براي بررسي عدم همپوشاني جنبهها بايد تعارض بين جنبهها شناسايي و
رفع شود
52
)(ادامه
طراحي جنبهگرا
براي جنبههاUML استفاده از
مدلي نه چندان کامل از تعريف جنبه
ĒaspectČ
Maintenance
pointcuts
viewMain = call getItemInfo (..)
mainco = call removeItem (..)
main ci = call addItem (..)
class extensions
ViewMaintenanceHistory
<viewItem> { after (<viewMain>)displayHistory}
More extensions here
53
برنامهنويس ي جنبهگرا
انقالبي در شيوه فكر كردن در زمينه مهندسي نرمافزار
بررراي اولررين بررار توسررط
Kiczales
Gregorدر سررال 1997معرفرري
شد
مكانيزم جداسازي پيشرفته دغدغهها نيز اطالق ميشود
زبانهاي پشتيبانيكننده جنبه
:AspectJيررك بسررته كرره امكانررات AOPرا برره زبرران برنامرره نويسرري جرراوا
اضافه ميكند
, HyperJ
Aspeckwerkz , Jboss-AOP
54
آزمايش جنبهگرا
هماننررد سرراير سيسررتمها ،سيسررتمهاي جنبررهگرا ميتواننررد بهص رورت
جعبه سياه مورد آزمايش قرار گيرند
آزمايش جعبه سفيد آنها پيچيده و وابسته به کد برنامه
مشکالت آزمايش جنبهها
رابط جنبه چگونه ميتواند آزمايش شود؟
چگونه جنبهها ميتوانند مستقل از سيستم اصلي آزمايش شوند؟
چگونه ميتوان آزمايشي طراحي نمود که همه نقراط اتصرال اجررا شرده و
جنبههاي مناسب مورد آزمايش قرار گيرند؟
55
آزمايش جنبهگرا
(ادامه)
توليد گراف جريان برنامه براي جنبهها غيرممکن است ،به همرين
دليل طراحي آزمايشراتي کره تضرمين دهنرد همره ترکيبرات جنبرهها و
کد اصلي اجرا شوند ،دشوار است
پوشش آزمايش ( )test coverageمعناي خاصي ندارد
کد هر جنبه يکبار اجرا شود؟
کد هر جنبه در هر نقطه اتصالي که جنبه قرار داده شده است يکبار اجرا
شود؟
؟
56
پرسش و پاسخ
57