دوشنبه 1 آبان 1396 |  عضویت / ورود

«برنامه نویسی جنبه گرا» (AOP) و «برنامه نویسی نظارت گرا» (MOP) چیست؟ (سمینار مهندس نیرومند در این زمینه)


یکی از درس‌های بسیار عالی که این ترم داشتیم، درس Software Testing (آزمون نرم‌افزار) بود. درس بسیار مهم و لازمی برای امثال ما برنامه‌نویس‌ها بود. مباحث بسیار جذابی مطرح شد که قطعاً تأثیر زیادی در برنامه‌نویسی‌های من خواهد داشت. به خصوص اینکه استاد بسیار توانایی داشتیم که بر لذتش افزود.

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

به هر حال، علی رغم اینکه اکثر دوستان هم‌کلاسی من یک موضوع تئوری بدون پیاده‌سازی انتخاب و ارائه کردند، اما طبق معمول، من مصر بودم که کارم به پیاده‌سازی برسد و الحمد لله موضوع خوبی پیدا کردم و با اینکه دو هفته‌ی تمام وقتم را گرفت و واقعاً اذیتم کرد اما به پیاده‌سازی رسید.

موضوع ارائه، JavaMOP بود و پنج‌شنبه ۲۶ آذر ۹۴ نوبت من بود که ارائه دهم.

ویدئوی دسکتاپ و صدای من ضبط شده که پیشنهاد می‌کنم به خصوص افرادی که با کدنویسی سر و کار دارند، آن‌را دانلود و مشاهده کنند.

قبل از ارائه لینک دانلود، باید توضیحاتی در مورد موضوع سمینار بدهم:

آزمون نرم‌افزار

این روزها یکی از مهم‌ترین مباحث در تولید نرم‌افزارهای Reliable (قابل اعتماد)، بحث تست نرم‌افزار است. دلیل آن هم مشخص است: اگر نرم‌افزار به درستی تست نشود، همان اتفاقی می‌افتد که در مورد موشک آریان ۵ افتاد:

لینک ویدئو

 می‌دانید دلیل این انفجار چه بوده؟ دلیل از نگاه خودشان:

The number was too big, and an overflow error resulted

یک Overflowی ساده در یکی از متغیرهای برنامه! (یعنی یک عدد، کم‌کم زیاد شده و به حدی رسیده که در متغیر برنامه جا نشده و برنامه هنگ کرده و...)

حالا تصور کنید ناسا قرار است زبده‌ترین انسان‌های کره‌ی زمین را بفرستد فضا و در بین آسمان و زمین به خاطر این مشکلات، موشک منفجر شود!!

و یا در سیستم‌های Safety Critical (حیاتی) مثل پمپ‌های تزریق خودکار انسولین، اگر نرم‌افزار درست کار نکند می‌دانید چه می‌شود؟ اصلاً چرا راه دور برویم!؟ همین نرم‌افزار تستای خودمان، می‌دانید گاهی چقدر کارش حساس می‌شود؟ مثلاً یک سازمان، کلی تبلیغ کرده و هزاران نفر همزمان آنلاین شده‌اند که در آزمون شرکت کنند، بعد، آزمون تمام می‌شود و می‌فهمیم که پاسخ کاربران به درستی ثبت نشده!! (چیزی که ما واقعاً درگیرش هستیم و دائم داریم برای کارهای بزرگ بهبودهایی را اعمال می‌کنیم تا حتی اگر مشکل از سخت‌افزار یا نرم‌افزارهای سرور و یا تنظیمات آن بود، باز هم تستا «قابل اعتماد» باشد و آبروی مشتریان به خطر نیفتد)

همه این‌ها اهمیت تست نرم‌افزار را می‌رساند.

برنامه‌نویسی جنبه‌گرا یا AOP چیست؟

اگر برنامه‌نویس باشید می‌دانید که نسل اول برنامه‌نویسی، برنامه‌نویسی Structural بود. چیزی که در زبان C با آن کار کرده‌اید. پس از چند سال، برنامه‌نویسی‌ای مطرح شد به نام OOP یا Object Oriented Programming (برنامه‌نویسی شیئ‌گرا) که بهبودهای زیادی به برنامه‌نویسی ساختارمند داد و فعلاً بیشترین استقبال را دارد. اما مدتی هست که نوع جدیدی از برنامه‌نویسی مطرح شده به نام Aspect Oriented Programming یا برنامه‌نویسی جنبه‌گرا. در این نوع برنامه‌نویسی، شما دغدغه‌های خود را در قالب Aspect (جنبه) مطرح می‌کنید.
انصافاً با این نوع برنامه‌نویسی کار، بسیار راحت‌تر می‌شود و از تکرار کدها بسیار بسیار کاسته می‌شود.

در مورد AOP در سمینار صحبت کرده‌ام...

یکی از کاربردهای AOP استفاده در آزمون نرم‌افزار است. یعنی ما تست‌های خود را در قالب جنبه‌ها در اصطلاح به برنامه می‌بافیم...

برنامه‌نویسی نظارت‌گرا یا MOP چیست؟

ببینید، چیزی که به همه برنامه‌نویسان اثبات شده و در رأس آن‌ها به ناسا که هزاران نرم‌افزار را نوشته و آن‌ها را بارها و بارها با تمام معیارهای آزمون نرم‌افزار تست کرده (و دیتا سِت‌ها [Data Set = مجموعه داده‌ها]ی نرم‌افزارها و تست‌های خود را در آدرس https://data.nasa.gov منتشر کرده که در مقاطع بالاتر می‌فهمید که این دیتا ست‌ها مرجع تحقیقات بسیار جذابی در کل دنیا در سطوح ارشد و دکترا است که فرصت توضیحش نیست) این است:

هر چقدر هم که شما قبل از اجرای برنامه، آن‌را تست کنید، در حین اجرا ممکن است خطاهایی در برنامه مشاهده شود.

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

(حالا من یک چیز از «تست» می‌گویم، شما یک چیز می‌شنوید! باید این درس را پاس کنید و سر کلاس‌ها باشید تا بفهمید منظور من از «تست» چه تست‌های عظیمی است! با وجود آن تست‌های عظیم، باز هم برنامه در حین اجرا با مشکل مواجه می‌شود)

پس، دقت کنید: ناسا پس از این همه تست و شکست به یک نتیجه جالب رسید: حالا که فایده ندارد، مشکلی نیست، بگذار برنامه در حین اجرا خطا بدهد، فقط در حین اجرا متناسب با خطایی که داده، سیستم را به سمتی هدایت می‌کنیم که Reliable باقی بماند.

بنابراین نیاز داریم که برنامه را در حین اجرا دائماً زیر نظر بگیریم و دائماً شرایط را با یک سری Specification (یعنی توصیفی که انتظار داریم نرم‌افزار طبق آن عمل کند و معمولاً در قالب Formal Specification یعنی توصیف رسمی و به زبان‌هایی مثل LTL و ERE و FSM و CFG و امثالهم بیان می‌شود) مقایسه کنیم، به محض اینکه نرم‌افزار پایش را از آن شرایط فراتر گذاشت (در اصطلاح Violate شد)، تصمیم درخوری اتخاذ می‌کنیم...

به این «زیر نظر گرفتن لحظه‌ای برنامه در حال اجرا و مقایسه شرایط موجود با توصیف رسمی برنامه» در اصطلاح Runtime Verification (اعتبارسنجی در حین اجرا) گفته می‌شود. که ناسا ۱۵ سال است (یعنی از سال ۲۰۰۱ تا حالا هر سال یک سمینار به نام RV برگزار می‌کند و غول‌های برنامه‌نویسی جهان می‌آیند در مورد این موضوع بحث می‌کنند...)

حالا MOP یا Monitoring Oriented Programming (برنامه‌نویسی نظارت‌گرا)، بستری است برای Runtime Verification (که البته فعلاً در ابتدای راه است اما به مرور مانند OOP جای خود را باز خواهد کرد)

 

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

برای دانلود فایل rarشده با حجم حدود ۱۰۰ مگابایت روی لینک زیر کلیک کنید:

http://yourl.ir/JavaMOP_dl

http://img.aftab.cc/news/94/javamop_presentation.png

 چون می‌خواهم دانشجوها در درس شیوه ارائه و دروسی که ارائه دارد، از اسلایدها به عنوان الگو استفاده کنند و از طرفی در ویدئو، انیمیشن‌های آن ضبط نشده و به دلم ننشست، اسلایدها را هم برای دانلود می‌گذارم. یک بار با Space اسلایدها را مرور کنید و به سادگی و در عین حال، انیمیشن‌های آرام و به‌موقع آن دقت کنید:

دانلود اسلایدها

 

به نکات ریزی که در ارائه هست دقت کنید:

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

وقتی به عنوان یک مدرس، دانشجوی من ارائه می‌دهد، ۳۰ ثانیه بعد از اینکه صحبت او شروع می‌شود، من یک دفعه یک عذرخواهی می‌کنم و با یک بهانه می‌پرم وسط حرفش و یک چیزی می‌گویم: مثلاً به یکی از دانشجوها می‌گویم: آقای ایکس لطفاً در را ببند... یا برق را خاموش کن... این یک کمک به آن دانشجو است که در این بازه یک نفس بگیرد و از طرفی، تمرکز جمعیت از روی او برداشته شود چون توجه همه در یک نقطه قطعاً روی او سنگینی خاصی ایجاد می‌کند. با این کار، حواس همه پرت برق یا در می‌شود و حالا ارائه‌دهنده ریلکس‌تر ادامه می‌دهد.
اما در این ارائه چون خودم ارائه دهنده بودم و استاد این ترفند را جرا نکرد، مجبور شدم با یک ترفند دیگر حواس جمع را پرت کنم...

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

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

- در حین ارائه، من وسط کلاس هستم و اسلایدها را با موس بی‌سیم اپل که بسیار شیک و باکلاس است (نه صدای تیک‌تیک آن‌را کسی می‌شنود نه حواس را پرت می‌کند)، کنترل می‌کنم. (فقط ۵ ساعت روز قبل از ارائه درگیر بودم که موس را که به خاطر یک آپدیت، در ویندوز 10 شناخته نمی‌شد دوباره بشناسانم! نهایتاً با حذف آخرین آپدیت، دوباره موس فعال شد. حرفه‌ای‌ها دقت کنند: اگر خواستید درایور یک قطعه از داخل مخازن خود ویندوز حذف شود که به طور خودکار نصب نشود، موقع Uninstall یک تیکی در آن پنجره هست که نوشته Delete this driver که باید زده شود. ۵ ساعت درگیر این تیک بودم!! می‌خواهم بگویم یک ارائه خوب، ارزش دارد ساعت‌ها وقت صرفش کنی...)

- به گیرها و توضیحات استاد خیلی دقت کنید.

- اگر می‌خواهید یک ارائه موفق داشته باشید، پیشنهاد می‌کنم ارائه‌هایی که در این محصول گذاشته‌ایم (به خصوص ارائه آقای Reynolds) را تماشا کنید: آموزش ارائه در کنفرانس و سمینار و همینطور سمینارهای شرکت‌های بزرگ را تماشا کنید: ویدئوهای سمینارهای شرکت‌های بزرگ در فروشگاه سایت

 

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

نکته پایانی:

یک پیشنهاد حیاتی به دوستان برنامه‌نویسی که قصد ادامه تحصیل در رشته‌ی نرم‌افزار را دارند: فقط یک جمله: هر چه زودتر بروید سمت جاوا! (تمام مباحث روز دنیا بر اساس جاوا بیان می‌شود)

موفق باشید؛
حمید رضا نیرومند


[ارسال شده در مورخه : سه شنبه، 8 دی، 1394 توسط Hamid]
[ #برنامه‌ نويسي]



بازدیدها از این مطلب: 2546 بار   امتیاز متوسط : 0  تعداد آراء: 0   امتیاز دهید:

نظرات طرح شده

نام: [ کاربر جدید ]
ایمیل:

نظر:


اجازه استفاده از تگهای HTML را ندارید


جمع عدد 14 با 13 را در كادر زیر وارد نمایید:
(این كار برای جلوگیری از فعالیت موتورهای اسپمر است)


* توجه: نظر شما بعد از بررسی، نمایش داده خواهد شد.

احسان                توسط احسان در مورخه : سه شنبه، 8 دی، 1394(لینک نظر)
سلام دکتر(دیگه باید بهتون بگیم دکتر)

خیلی خوشم اومد مطلب خوبی بود.خیلی چیزا یاد گرفتم ممنون.

اون جمله آخر یه شوک بود واسه من....... ("هر چه زودتر بروید سمت جاوا!")





"پنج‌شنبه ۲۶ دی ۹۴ نوبت من بود" اینم درستش کن بیزحمت>>>> "آذر"


[ ارسال جوابیه ]


علی (امتیاز : 0)(لینک نظر)
توسط علی در مورخه : سه شنبه، 8 دی، 1394
سلام و تشکر



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


[ ارسال جوابیه ]


میثم                توسط میثم در مورخه : سه شنبه، 8 دی، 1394(لینک نظر)
یه دو سالی هست رفتم سمت جاوا و واقعا بهترین گزینه برای برنامه نویسی هست البته php هم خیلی توی زمینه ی خودش دوست دارم. موضوع تست نرم افزارو اتفاقا منم به تازگی درگیرش شدم. تست های مختلفی هست در این زمینه.و سمینارتون هم زدم دانلود آخراشه. خسته نباشی دکتر گل


[ ارسال جوابیه ]


emir (امتیاز : 0)(لینک نظر)
توسط emir در مورخه : چهارشنبه، 9 دی، 1394
سلام

من که تازه رفتم برای کاردانی (بعد از 2 باز انصراف)

---

می تونین برای مدیریت اسلایدها از نرم افزار Office Remote استفاده کنین.

خیلی کار راه اندازه...




[ ارسال جوابیه ]


amirhosein                توسط amirhosein در مورخه : چهارشنبه، 9 دی، 1394(لینک نظر)
استاد شما هیات علمی دانشگاه ماست و خوب ایشان را می شناسم. صرفنظر از برخی اخلاقیات ایشان خصوصاً جدیت و سخت گیری بیش از اندازه شان، تسلط علمی بسیار بالایی در زمینه جاوا و برنامه نویسی شی گرا دارند.

از اشتراک گذاشتن تجربیات تان مثل همیشه سپاسگزارم.


[ ارسال جوابیه ]

    Hamid (امتیاز : 1)
    توسط Hamid در مورخه : چهارشنبه، 9 دی، 1394
    بله، در توانایی ایشون من یکی شک ندارم.

    ابهت و سخت‌گیری‌شون رو هم بسیار می‌پسندم. (هر چند که هم‌کلاسی‌ها خیر...)

    کلاً من عاشق استادی هستم که سخت می‌گیره. :)


    [ ارسال جوابیه ]


Nima                توسط Nima در مورخه : چهارشنبه، 9 دی، 1394(لینک نظر)
سلام.

آقای دکتر، شهریه ترمی چند تومن می دهید؟


[ ارسال جوابیه ]

    Hamid (امتیاز : 1)
    توسط Hamid در مورخه : چهارشنبه، 9 دی، 1394
    سلام.

    ما هنوز دکتر نشدیم...

    به هر حال، این ترم که حدوداً ۹ میلیون تومان شد.


    [ ارسال جوابیه ]


mahnazSALAS                توسط mahnazSALAS در مورخه : پنجشنبه، 10 دی، 1394(لینک نظر)
سلام

مطلب عالی بود و البته طولانی و نفس گیر!!!!


[ ارسال جوابیه ]


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


[ ارسال جوابیه ]

    amirhosein (امتیاز : 1)
    توسط amirhosein در مورخه : جمعه، 11 دی، 1394
    میقم خان پیشنهاد می کنم این سایت رو به دقت بررسی کنید: www.wikiresearchtools.com

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


    [ ارسال جوابیه ]


مهدی                توسط مهدی در مورخه : شنبه، 6 شهریور، 1395(لینک نظر)
سلام

بسیار عالی بود

ممنون


[ ارسال جوابیه ]


مهری طالبلو (امتیاز : 0)(لینک نظر)
توسط مهری طالبلو در مورخه : دوشنبه، 23 مرداد، 1396
سلاااام اسنااااد نیرومند عزیز
من از دانشجویان سال88شما هستم این مطالب برنامه نویسی و اتفاقی امروز خوندم خیلی جالب بود هرچند الان توکارهنرم ولی به یاد برنامه نویسی شما هستم واقعا هنوزم به وجود استادی مثل شما افتخار میکنم ودعاگوی شماهستم
ممنون


[ ارسال جوابیه ]