تصور کنید وارد مغازه قصابی شدهاید و به آقای قصاب سفارش یک شقه ران گوسفندی دادهاید! حالا به ابتدای جمله برگردید! بله عرض کردم که تصور» کنید!
جناب قصاب تند و تیز شروع به بریدن و تکه کردن گوشت میکند. شما هم منتظر ایستادهاید و در این خیال که به زودی چه خورشت و آبگوشتهای لذیذی خواهید خورد، فرو رفتهاید.
همینطور که در خیال خود شناورید، بیایید حرکات تند و تیز جناب قصاب را با سرعت آهسته تماشا کنیم. چاقوی تیزش را در حجم گوشت فرو میکند و بعد از هر دو سه برش، آن را با سوهانی که همیشه دم دستش هست، تیز میکند. این کار را به قدری سریع انجام میدهد که گویی جزو مراحل آماده کردن سفارش شماست. او از شما نمیپرسد که آیا به من وقت میدهید که چاقویم را تیز کنم یا نه؟!
قصاب داستان ما، به دلیل اینکه همیشه حواسش به تیز بودن چاقویش بوده و آن را مرتب تیز کرده است، دیگر نیازی ندارد که برای تیز کردن چاقویش وقت زیادی صرف کند. سه چهار بار که چاقو را به سوهان بکشد، تیز میشود. کاری که چند ثانیه بیشتر وقت نمیگیرد!
اگر این کار را به صورت مرتب انجام ندهد، آنوقت به مشتری چهارم و پنجم نرسیده، مجبور» میشود که مشتری را معطل» کند تا چاقوی جدیدی تهیه کند و یا با چاقوی کند و کهنه شده، با زور و تقلا کارش را پیش ببرد.
این وضعیت برای ما توسعهدهندگان نرمافزار، وضعیتی آشناست. ما معمولا وقتی برای تیز کردن چاقو نمیگذاریم و زمانی به فکرش میافتیم که چاقوی ما حسابی کند شده و خسته و فرسوده شدهایم.
ریفکتور (Refactor)، بخوانید تیز کردن چاقو باید جزیی از فعالیتهای روزانهی ما باشد. جوری که هیچوقت نخواهیم که برای تیز کردن چاقوی توسعه، از مشتری فرصت بگیریم و وقتش را تلف کنیم. پس مثل آقای قصاب ریفکتور کنیم، هر روز، روزی چند بار.
راستی آبگوشتتان نوش جان!
سازمانهایی که تلاش میکنند تا واجد صفت چابک» شوند، اگر از ارزشها و اصول چابکی غفلت کنند یا دانش محدودی درباره نگرش (Mindset) چابک داشته باشند، اغلب به وضعیتی دچار میشوند که از چابکی تنها پوستهای بر تن میکنند و چون به مغز و هستهی چابکی توجه کافی ندارند، دور از انتظار نیست که همان روشهای سنتی را با ظاهر چابک اجرا کنند.
علاوه بر این، توجه فعالان این حوزه عموما معطوف به فریمورکهای چابکی و اجرای مقلدانهی پرکتیسهای پیشنهادی آنهاست. این در حالی است که اگر به ارزشها و اصول چابکی توجه بیشتری شود، میتوان برای پرکتیسها بنا به ضرورتهای محلی، جایگزین یافت یا ساخت به نحوی که از ارزشها عدول نکرد.
اما ارزشها و اصول چابکی چیستند؟ و چرا اهمیت آنها را دستکم میگیریم؟
نکته این است که سادگی این ارزشها باعث شده که آنها را بدیهی، دمدستی و سهلالوصول بدانیم. در حالی که اینگونه نیست و میتوان گفت که:
که چابک» آسان نمود اول، ولی افتاده مشکلها.
اگر مایلید شرحی دقیق و صحیح از ارزشهای چابکی و اصول مربوطه بدانید، پیشنهاد میکنم این کتاب جمع و جور را که به تازگی توسط Scott Duncan نوشته شده و مورد تایید بزرگانی چون Ben Linders, Ken Robin, Mike Cohn و Ron Jeffries است را مطالعه کنید.
https://www.infoq.com/minibooks/agile-values-principles
دانلوددریافت فایل PDF
وقتی مشتری درخواست جدیدی میدهد، دست و دل ما میلرزد که نکند انجام این تغییرات، به جاهای دیگر سیستم هم گند بزند! چون سیستم بزرگ و پیچیدهای داریم، میترسیم اینجا را تغییر دهیم و جای دیگری خراب شود و نفهمیم که خراب شده! یا وقتی بفهمیم که خیلی دیر شده! تا میآییم یک باگ را رفع کنیم، ۱۰ باگ دیگر ایجاد میشود! روحیه و انرژی تیم پایین آمده و جرات تغییر و دست زدن به کدهای قدیمی را نداریم!
همکارم رضا، هر روز باید قابلیتهای جدید نرمافزار را دستی تست کند و مطمن شود که برای قابلیتهای قبلی نرم افزار مشکلی به وجود نیامده است. کار هر روزش شده از این فرم به آن فرم رفتن، ورود اطلاعات تستی و کلیک پشت کلیک. کاری تکراری، وقتگیر و خسته کننده! ما هم باید ساعتها منتظر بمانیم که کارش تمام شود و یک تایید (نه چندان دقیق) بدهد تا نسخه را منتشر کنیم! نرمافزار که بزرگتر میشود، تست کردنش هم سختتر و خسته کنندهتر میشود! از شما چه پنهان، از رضا شنیدهام که دنبال یک موقعیت شغلی بهتر میگردد.
ما خیلی جدی و مصمم از همان اول شروع کردیم به نوشتن تستهای خودکار. اوایل خیلی راضی بودیم و از نوشتن تست لذت میبردیم. الان که شش ماه از شروع پروژه گذشته، حس میکنیم تستهای ما دارند به بلای جدیدی تبدیل میشوند. خوانا نیستند؛ نگهداریشان سخت شده و گاهی باید ربع ساعت فکر کنیم که اصلا چرا این تست را نوشتیم یا این تست برای پاس شدن باید چه تنظیماتی را رعایت میکرد. برای همین هم مجبوریم بعضی از آنها را غیرفعال کنیم. و حتی بدتر از این، نمیتوانیم به نتیجه مثبت تستهایمان خیلی اعتماد داشته باشیم! یاد روزهای اول به خیر!
اپیزودهای چهارم، پنجم و . را میتوانید حدس بزنید. شرایطی مشابه و آشنا و البته ناخوشایند و طاقت فرسا.
مجموعه وبینارهای تست خودکار نرم افزار، از آغاز تا انجام» با این هدف ارایه میشوند تا موضوع تست خودکار نه تنها به عنوان یک مهارت بلکه به عنوان یک هنر، در تیمها جدی گرفته شود. تست نوشتن با تستِ خوب نوشتن، متفاوت است. در قسمت اول به موضوع Unit Test پرداخته میشود.
تاریخ برگزاری: جمعه، 21 اردیبهشت، ساعت 15
کسب اطلاعات بیشتر و ثبت نام:
https://evand.com/events/softwaretesting
در رویکرد طراحی دامنهگرا (Domain Driven Design)، برای کنترل و غلبه بر پیچیدگیهای فضای مسٔله، مرزهایی بین اجزای متنوع دامنه تعریف میشود که به Bounded Context مشهور است. تشخیص این مرزها و تصمیم گیری درمورد اینکه هر جزء فضای راه حل، در حوزه کدام BC قرار دارد، از جمله تصمیمات مهم و راهبردی طراحی محسوب میشود. برای درک بهتر کارکرد Bounded Context ها به شکل زیر توجه کنید:
هرچند نباید انتظار داشت که تشخیص Bounded Context ها در همان ابتدا بدون اشکال باشد، اما با بکارگیری تکنیکهایی میتوان از خطاهای مهلک طراحی اولیه کم کرد، تا طراحی منطقی و منعطفتری داشته باشیم.
در این مطلب، نویسنده به شرح تکنیکی برای تشخیص و مدل کردن بهتر Bounded Context ها میپردازد. تکنیکی به نام: "Intentional Naivety First"
▫️حتی اگر با رویکرد Domain Driven Design آشنا نیستید، باز هم این مطلب واجد نکات آموختنی بسیاری است.
https://medium.com/nick-tune-tech-strategy-blog/intentional-naivety-first-bounded-context-modelling-62e6211574ec
برنامه نویسان دات نت برای بکارگیری پترنهای DDD همواره با چالش ORM ها مواجه بودهاند. Entity Framework 6 به سختی از الگوهای DDD پشتیبانی میکرد و NHibernate هم با توجه به کاهش فعالیت توسعه دهندگانش، دیگر انتخاب چندان موجهی نیست. اما گویا این چالش با EF Core 2 به فراموشی سپرده میشود.
در این مطلب Julie Lerman توضیح میدهد که ORM کاملا بازطراحی شدهی EF Core 2 انتخاب مناسبی برای ORM دومینهایی است که الگوهای #DDD را بهکار گرفتهاند.
https://technet.microsoft.com/en-us/mt842503.aspx
پی نوشت: Julie Lerman اخیرا در کنفرانس DDD Europe 20 ارایهای داشت با عنوان:
Exploring EF Core Support for DDD Patterns
https://dddeurope.com/20/speakers/julie-lerman/ #DDDEU
درباره این سایت