به تازگی چیز شگفت انگیزی را کشف کردیم! یکی از دوستان من همیشه مشغول یادگیری و کند و کاو در منابع مختلف است. وی به تازگی تصادفا یک ابزار کارا و شگفتانگیز در ویژوال استادیو به نام ReSharper پیدا کرده است. JetBrains به عنوان سازنده ReSharper میگوید: “ReSharper، IDE موجود در Microsoft Visual Studio را بهتر میکند. توسعهدهندگان NET. در سراسر دنیا تعجب خواهند کرد که تا کنون چگونه بدون Inspection، Refactoring، Navigation کد توسط ReSharper زنده بودهاند.”
اکنون ادامه ماجرا را از زبان دوست من دنبال کنید:
پس از اولین استفاده، میتوانم بگویم که ادعای سازندگان این ابزار کاملا درست بوده است. در عرض چند دقیقه بعد از نصب و راهاندازی، من دیدم ReSharper کد مرا به انحاء مختلف بهبود داد. و این کار فوقالعاده ساده بود!
من به هیچ محصولی از این شرکت وابسته نیستم. اما به شدت عاشق این ابزار شدم و فقط میخواهم این ابزار فوقالعاده را با همکارانم در حوزه تست در میان بگذارم.
و اما ReSharper چیست؟
ابزار ReSharper به صورت Plug In در ویژوال استادیو ظاهر شده و به بهبود IDE آن کمک میکند. مزایای زیادی را میتوان از ReSharper(که در ادامه تشریح خواهم کرد) استخراج کرد.
میتوانید نسخه ۳۰ روزه این ابزار را از خود تولید کننده و از اینجا دریافت کنید.
چرا مهندسان اتوماسیون باید از RedSharper استفاده کنند؟
همانطور که قبلا هم گفتم، من شخصا عاشق این ابزار شدهام. این ابزار به سادگیِ تمام و بدون صرف وقت زیاد برای Refactoring کد شما را به مقدار بسیار زیادی بهبود میدهد. این ابزار به تحلیل کد در طول زمان طراحی کمک کرده و شما را در راستای رفع Errorها و Warningهای مختلف یاری میدهد. ReSharper کدهای Redundant، متغیرها و منابع بلااستفاده را حذف میکند. RedShrper در جهت حفظ پیرویِ ازاستانداردهای مایکروسافت با استفاده از C#، به شما کمک میکند. RedSharper کد شما را برای درک و نگهداری سادهتر میکند. این ابزار حتی به شما کمک میکند تا منطق خود را به شکلی که برای دنبال کردن در آینده سادهتر باشد، بهبود دهید.
بعد از حدود یک ساعت Refactoring، کد موجود در Automation Testing Framework من، به شدت متفاوت شده بود! البته به شکلی خوب. با کلیک روی چند دکمه، یک دسته از Explicit Castها، جایگزین Implicit Castها شده بودند. چندین عبارت و Loop تو در تو و پیچیده، با منطقی بسیار کاراتر جایگزین شده بودند. همچنین تعداد زیادی Reference قدیمی از راهکار من حذف شد تا یک قطعه بسیار سبکتر از معماری ساخته شود. جالبترین قسمت این است که من از این ابزار یاد میگیرم. برخی از استانداردهای کدنویسی C# و راههای مختلف برای منطق Refactor، برخی از اساسیترین دروسیست که من آموختهام.
در واقع، این ابزار در حالیکه اطلاعات فوقالعادهای را در اختیار من قرار داده و من از آن یاد میگیرم، در هزینه و زمان کارفرمای من هم صرفهجویی میکند. اکنون کد Automation Testing Framework من به شیرینیِ عسل خامِ اورگانیک است! اجازه دهید در برخی از ویژگیهای این ابزار کند و کاو کنیم.
بهترین امکانات ReSharper
به خاطر داشته باشید که من فقط استفاده از این ابزار را آغاز کردهام. بنابراین ممکن است که حجم زیادی از دیگر امکانات نیز وجود داشته باشد، که من هنوز از آنها آگاه نیستم. با این حال از ابتدا، این امکانات بسیار جذاب بوده و حجم زیادی از مشکلات مرا حل کردهاند.
ReSharper تحلیل مداوم کیفیِ کد را برای مجموعهای از زبانهای مختلف ارائه میدهد. من در حال حاضر از #C استفاده میکنم.
- این ابزار بیش از ۱۷۰۰ روال Code Inspection دارد، که در نوار کناری(Sidebar) شما را از Errorهای مختلف در زمان طراحی آگاه میکند.
- علاوه بر تمام Errorها و Warrningهای معمولی که ویژوال استادیو نیز آنها را ارائه میدهد، RedSharper شما را با هشدار درباره Redundant Castها، Stringهای دارای فرمت اشتباه و متغیرهایی که هرگز مورد استفاده قرار نگرفته و یا کدهایی که دسترسی به آنها ممکن نیست، آگاه میسازد. این یک امکان بسیار عالیست، چرا که به شما در پاکسازی کد بسیار کمک میکند. این ابزار به من اجازه داد تا کُدم را با پاکسازی متغیرهایِ بلااستفاده، به ۱۰۰ خط کاهش دهم. بعلاوه، اگر شما در کد شرایطی دارید که هرگز محقق نخواهند شد، RedSharper به شما اجازه میدهد تا از این موضوع آگاه شده و منطق کد خود را اصلاح نمایید.
- همچنین ReSharper قادر است به شما نکاتی را یادآور شود که به شما در جهت بهبود کدتان کمک کند.
بیایید به درون مثالهایی از دنیای واقعیِ کُد وارد شویم. مثالهایی که با استفاده از آنها میتوانید درک کاملی از برخی عملکردهای مورد نیاز به دست آورید. آیا تا به حال با وضعیتی که نیازمند به روز رسانیِ سیگنیچِرِ(Signature)متدی باشید که دارای بیست Refrence است، مواجه شدهاید؟ من مواجه شدهام. این کار بسیار آزار دهنده است. اما RedSharper آنرا بسیار آسان کرده است.
- در اینجا من یک کلاس Person دارم که آرگومانی را برای نام شحص میگیرد:
- بعلاوه من یک Console Application که دو Instance از این کلاس میسازد را ایجاد کردم.
- حالا یک سناریوی معمولی! چه میشد اگر من میخواستم کلاس Person خود را برای گرفتن بیش از یک پارامتر اصلاح کنم؟ بسیار خوب. من میتوانم به صورت کاملا مشخص متد خود را Override کنم تا متد دیگری با بیش از یک پارامتر ایجاد کنم. اما اگر این راهکار من نیست، کاری که من میخواهم یا باید انجام دهم چیست؟ در این مورد من میخواهم سن و جنسیت را به Class Constructor اضافه کنم.
- به این موضوع که من بعد از کامپایل چگونه دو Error جدید دارم توجه کنید. از آنجاییکه من دو بار فراخوانی برای این Constructor دارم، و فقط Method Signature را تغییر دادهام، هر کدام از این Callها به یک Error ختم میشود. اگر من پنجاه Call روی این Constructor داشتم، پنجاه Error هم به موازات آن به من ارائه میشد.
- بدون ReSharper، شما باید به سمت هر Error حرکت کرده، و باید این Callها را برای داشتن دو String جدید به روز کنید. این یعنی یک کار آزار دهنده. با این حال، با ReSharper، این موضوع به سادگی حل میشود.
الف. ابتدا متد خود را برای داشتنِ ۲ آرگومان جدید به روز کنید. این ابزار بدون Build کردن کد، شما را در سراسر Method Signature جدید با یک کادر دورخطچین مطلع میکند. برای باز کردن ReSharper Help Menu از “Alt+Enter” استفاده کنید.
ب. شما باید گزینهای از Refactoring Menu را با عنوان “…Apply change signature refactoring” ببینید. اینتر را بزنید تا این منو باز شود.
پ. یک ویزاردِ پوپاپ “Change Signature” باز خواهد شد تا شما را از طریق Refactoring راهنمایی کند. Next را بزنید.
ت. اکنون، یک اتفاق جادویی رخ خواهد داد. ویزارد شما را بواسطه هر پارامتر راهنمایی کرده تا به شما برای Refector کُدتان کمک کند. بعد از اینکه کارتان به پایان رسید، ReSharper بر اساس گزینههایی که شما انتخاب کردهاید، مقادیر را به Constructor Callهای شما Assign میکند.
ث. چند گزینه برای هر پارامتر وجود دارد. آنها اساسا خودتشریح هستند. با این حال، برای “age”، ما از مقدار ۲۵ استفاده میکنیم.
ج. بعد از تنظیمات مانند تصویر بالا، Next را کلیک کنید.
چ. برای جنسیت، اجازه دهید آنرا به عنوان یک کامپایلناپذیر(Non-compilable) ترک کنیم. به شکلی که بتوانیم این مشکل را خودمان حل کنیم. اکنون Next را کلیک کنید.
ح. حالا کد خود را Build کنید. در ویژوال استادیو ۲۰۱۳، من میتوانستم برای Build فقط F6 را بزنم. در نسخه قبلی، این میانبر متفاوت است. همچنین، شما میتوانید با رفتن به تَب Build و کلیک کردن Build Solution کد خود را Build کنید.
خ. همانطور که انتظار میرفت، ما دو Error داریم. یکی برای پارامتر جنسیت که بدون مقدار است. ما میتوانیم با استفاده از دابل کلیک روی هر Error در Error List Pan از ویژوال استادیو، وارد موضوع Error شویم.
د. ببینید ReSharper چه میکند. این نابغه عبارت TODO را به جای مقادیر آرگومانهایی که شما فراموش کردهاید تا با مقدار واقعی در جای TODO بنشانید، در آنجا قرار داده است.
ذ. کد را به روزرسانی کنید تا تصویری مانند تصویر زیر را ببینید. همچنین، پس از Build کردن آن توجه کنید که چگونه تمام Errorهای کامپایلر از بین رفتهاند.
ر. تبریک میگویم! ReSharper بدون اینکه شما محتاجِ ورود به هر Error و به روزرسانی آن باشید، Method Callهای شما را با موفقیت Refactor کرد. با استفاده از این امکان در آینده، در حجم زیادی از زمان شما صرفهجویی خواهد شد.
مثال دیگری از Code Refactoring
بنابراین، با دامه این راه، ما میتوانیم تمیزکاری بیشتری روی کد داشته باشیم.
- به تمام دستورات بلااستفادهای که به صورت خاکستری هایلایت شدهاند، توجه کنید. ReSharper به شما میگوید که آنها باید حذف شوند.
- هنگامیکه برای Refactor آماده هستید و میخواهید یک به یک Warningها وارد شوید، روی Warning Icon در گوشه سمت راست بالا ویژوال استادیو کلیک کنید.
- این کار شما را به خطی از کد میبرد که که در کنار آن یک لامپ دیده میشود. همچنین، ReSharper کِرسِر شما را روی این خط قرار خواهد داد.
- درست مثل قبل برای باز کردن ReSharper Menu کلیدهای “Alt+Enter” را فشرده، و آ از میان گزینهها انتخاب نمایید.
- گزینه “…Remove unused directives in file” را انتخاب کنید. در این مرحله تمام عباراتی که در کد شما بلااستفاده هستند را پاک میکند. حالا به کد خود نگاه کنید تا ببینید چقدر تمیز و خوانا شده است.
- با همین روش، ReSharper همین کارها را با Referenceهای که مورد استفاده قرار نمیگیرند نیز انجام میدهد. شما میتوانید آنها را در سطح فایل، پروژه، یا راهکار، فقط با چند کلیک، پاکسازی نمایید. این کار کد شما را سادهتر و سریعتر خواهد کرد.
مثال سوم از Code Refactoring
ما میتوانیم اصلاح کد را با استفاده از مغز بزرگ ReSharper کمی جذابتر هم بکنیم. ReSharper به شما اجازه میدهد که بفهمید آیا متغیرهای بلااستفادهای وجود دارد یا خیر.
این موضوع واقعا به تازگی زندگی مرا نجات داد. من یک تست خودکار در WebDriver Selenium ایجاد کرده و بیش از یک Assertion Message را کپی کرده بودم. از آنجاییکه Message اطلاعات زیادی را در خود گنجانده بود، آنرا در یک متغیر ذخیره کردم. من نام متغیر را تغییر داده، اما هرگز متغیرهایی که در Assertion Clause استفاده شده بودند را به روز نکرده بودم. در نتیجه، یک شرط را چک کردم، اما Assertion Message من برای یک بررسی کاملا متفاوت بود. من نمیدانم آیا اصلا میتوانستم این مشکل را پیدا کنم یا نه.
اما ReSharper مرا نجات داد، و به من گفت که متغیری دارم که هرگز از آن استفاده نکردهام. بعد از بررسی بیشتر، مشکل را متوجه شده و آنرا مرتفع کردم. پیام شبیه به تصویر زیر بود. هنگامیکه شما این Warningها را میبینید، میتوانید در مورد اینکه چه کاری با متغیرها انجام دهید تصمیمگیری کنید. شما میتوانید از آنها استفاده کرده یا آنها را با استفاده از ReSharper IDE حذف کنید. این برای پاکسازی کد یا پیدا کردن اشتباهات مضحک مانند نمونهای که من مرتکب شدم، شما را کمک میکند.
نتیجهگیری
نمیدانم آیا توانستم بخشی از تجربیات خود را در زمینه کار با ReSharper به خوبی به شما منتقل کنم یا نه، اما امیدوارم در کار با این ابزار موفق باشید. من این ابزار را به یکی دیگر از توسعهدهندگان تیممان نشان دادم. او یک شخص بسیار باهوش است. او در مورد اینکه ReSharper چگونه میتواند برای Refactor به ما کمک کند، بسیار تحت تاثیر قرار گرفت. بنابراین این ابزار را حتما امتحان کنید و به من اجازه دهید که بدانم در مورد آن چه فکر میکنید، و اگر با صحبتهای من در این مقاله مخالف هستید دوست دارم چراییِ آنرا بدانم. اگر شما به امکانات دوست داشتنیِ دیگری رسیدید لطفا آنرا با من به اشتراک بگذارید. من خیلی زود یاد میگیرم.
و اما تنها مشکلی که من روی ReSharper دیدهام این بود که IDE را کند میکند. اما به نظرم استفاده از آن به مقداری کاهش Performance در IDE میارزد.