یکی از درسهای بسیار عالی که این ترم داشتیم، درس 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
چون میخواهم دانشجوها در درس شیوه ارائه و دروسی که ارائه دارد، از اسلایدها به عنوان الگو استفاده کنند و از طرفی در ویدئو، انیمیشنهای آن ضبط نشده و به دلم ننشست، اسلایدها را هم برای دانلود میگذارم. یک بار با Space اسلایدها را مرور کنید و به سادگی و در عین حال، انیمیشنهای آرام و بهموقع آن دقت کنید:
به نکات ریزی که در ارائه هست دقت کنید:
- طبیعتاً ارائه مقابل ده پانزده نفر همکلاسیهایی که هر کدام استاد دانشگاه و اکثراً در حد خود من هستند کمی سخت است. (بهخصوص اینکه من نخودی کلاس هستم!! یعنی کوچکترین عضو کلاس!!) کلاً اوائل هر ارائهای، ارائه دهنده، در اوج استرس خواهد بود اما وقتی کمی گذشت، ریلکستر میشود. دقت کنید که اگر مثل من در ابتدای ارائه نفستان گرفت، بهترین ترفند این است که یک لحظه یک شوخی با جمع کنید و جمع را کمی از حالت رسمی خارج کنید. حتی میتوانید حقیقت را بگویید: مثلاً با خنده بگویید: از استرس نفسم بند آمده!! :)
همین موضوع باعث میشود یک لحظه یک توقف ایجاد شود و شما به حالت طبیعی خود برگردید. دقت کنید که من چطور جو سنگین ابتدای جلسه را با یک شوخی به یک جو خودمانی تبدیل کردم...
وقتی به عنوان یک مدرس، دانشجوی من ارائه میدهد، ۳۰ ثانیه بعد از اینکه صحبت او شروع میشود، من یک دفعه یک عذرخواهی میکنم و با یک بهانه میپرم وسط حرفش و یک چیزی میگویم: مثلاً به یکی از دانشجوها میگویم: آقای ایکس لطفاً در را ببند... یا برق را خاموش کن... این یک کمک به آن دانشجو است که در این بازه یک نفس بگیرد و از طرفی، تمرکز جمعیت از روی او برداشته شود چون توجه همه در یک نقطه قطعاً روی او سنگینی خاصی ایجاد میکند. با این کار، حواس همه پرت برق یا در میشود و حالا ارائهدهنده ریلکستر ادامه میدهد.
اما در این ارائه چون خودم ارائه دهنده بودم و استاد این ترفند را جرا نکرد، مجبور شدم با یک ترفند دیگر حواس جمع را پرت کنم...
- دقت کنید که در ارائه چطور جمعیت را به صحبت وا میدارم. (شما اگر در کلاس ما میبودید متوجه میشدید که تقریباً هیچ کدام از افراد در ارائهاش هیچ چیزی از جمعیت نپرسید و همینطور پشت سر هم ارائه داد تا تمام شد!)
یک ارائه دهنده خوب، همه جمع را به واکنش و شرکت در ارائه وامیدارد.
- به ارائه دقت کنید که هم ضرب المثل در آن مطرح میشود، هم جوک مطرح میشود (و البته سریعاً کنترل میشود که جو رسمی کلاس به هم نریزد به «خُب»ی که بعد از یک خنده میگویم دقت کنید)، هم جدی میشود، هم به اندازه کافی تئوری دارد و هم به اندازه کافی پیادهسازی دارد...
یک ارائه خوب دانشگاهی باید به این صورت باشد. ترکیبی از همه خوبیها و همه چیز به اندازه.
- در حین ارائه، من وسط کلاس هستم و اسلایدها را با موس بیسیم اپل که بسیار شیک و باکلاس است (نه صدای تیکتیک آنرا کسی میشنود نه حواس را پرت میکند)، کنترل میکنم. (فقط ۵ ساعت روز قبل از ارائه درگیر بودم که موس را که به خاطر یک آپدیت، در ویندوز 10 شناخته نمیشد دوباره بشناسانم! نهایتاً با حذف آخرین آپدیت، دوباره موس فعال شد. حرفهایها دقت کنند: اگر خواستید درایور یک قطعه از داخل مخازن خود ویندوز حذف شود که به طور خودکار نصب نشود، موقع Uninstall یک تیکی در آن پنجره هست که نوشته Delete this driver که باید زده شود. ۵ ساعت درگیر این تیک بودم!! میخواهم بگویم یک ارائه خوب، ارزش دارد ساعتها وقت صرفش کنی...)
- به گیرها و توضیحات استاد خیلی دقت کنید.
- اگر میخواهید یک ارائه موفق داشته باشید، پیشنهاد میکنم ارائههایی که در این محصول گذاشتهایم (به خصوص ارائه آقای Reynolds) را تماشا کنید: آموزش ارائه در کنفرانس و سمینار و همینطور سمینارهای شرکتهای بزرگ را تماشا کنید: ویدئوهای سمینارهای شرکتهای بزرگ در فروشگاه سایت
دوستانی که قصد دارند مراحل پیادهسازی JavaMOP را برای دروس دانشگاهی خود و یا تمرین، طی کنند، نام دقیق نرمافزارها و افزونهها در ویدئو مشخص است. در اینترنت جستجو و دانلود کنند. اگر موفق نشدند، میتوانند اطلاع دهند که کل پوشهی ارائه (تمام نرمافزارها و ویدئو و ...) را در فروشگاه قرار دهیم که تهیه کنند...
نکته پایانی:
یک پیشنهاد حیاتی به دوستان برنامهنویسی که قصد ادامه تحصیل در رشتهی نرمافزار را دارند: فقط یک جمله: هر چه زودتر بروید سمت جاوا! (تمام مباحث روز دنیا بر اساس جاوا بیان میشود)
موفق باشید؛
حمید رضا نیرومند