صفحه شخصی سید علا سبزپوش

برنامه نویس دات نت و sql_server --ریاضیات

صفحه شخصی سید علا سبزپوش

برنامه نویس دات نت و sql_server --ریاضیات

چرا از ابزار تست استفاده می کنیم ؟

بخش ۳ 


Frameworks for Unit testing


حتما با ابزارهای کد نویسی کار کرده اید که اصلاحا IDE  گفته می شوند . حال برای اجرای تست ها نیز به ابزاری برای تست نیاز داریم این ابزار در واقع چارچوبی هستند که به کمک آنها می توانیم در یک رابط کاربری میزان موفقیت و پیشرفت تست را مشاهده کنیم .در زیر مقایسه ای خواهم داشت در استفادهو عدم استفاده از این ابزار .

 

بدون ابزار تست چه محدودیتهایی خواهیم داشت

 

1-تستهای ما فاقد ساختار منسجم است . یعنی در واقع ما برای اجرای تست قانونی نداریم و برای هر قطعه کد به دلخواه تستی خواهیم نوشت و این باعث پیچیدگی تست می شود .

 

2-تست ما تکرار پذیر نیست . از مهمترین نکات تست قابلیت تکرار است . به طوری که همزمان با توسعه نرم افزار تستها باید تکرار شوند .

 

3-شما نمی توانید برای تمام کد هایتان تست بنویسید . در واقع مجتمع سازی تستها ، بدون استفاده از ابزار های تست کاری سخت و غیر ممکن است .

 

با استفاده از ابزار تست چه مشکلاتی حل می شود .

 

1-تستها قانونمند می شود و به آسانی نوشته می شوند .چرا که این ابزارها دارای مجموعه ای از کتابخانه های آماده برای تسهیل عمل تست هستند.

 

2-اجرای یکباره و چند باره تست آسان می شود . در واقع این ابزارها به کمک امکاناتی که دارند تکرار پذیری تست را آسان می کند و شما می توانید پیشرفت تست و یا حالتهای تست را ارزیابی کنید

 

3-مشاهده نتایج حاصل از تست . شما می توانید با کمک ین ابزارها بدانید که چه تعداد تست در حال اجرا است یا اجرا شده است .کدام تست با مشکل مواجه شده و دلیل شکست تست چه بوده و.....

 

از چه ابزاری استفاده کنیم .

ابزارهای تست فراوان است اما من می خواهم بر روی ابزار xUnit  تمرکز کنم و سعی می کنم به معرفی این ابزار بپردازم . این ابزار به آنها xUnit Frameworks  گفته می شود .که حرف اول x   نشان دهنده زبان مورد پشتیبانی است مثلا برای زبان جاوا jUnit   و برای دات نت NUnit  و ..

 

شما می توانید این ابزار را از سایت http://www.nunit.org/  دریافت کنید .


زمان نوشتن تست

بخش ۲

در بخش قبل گفتم که برای نرم افزار ما باید تست نوشت و خصوصیات لازم را ذکر کردم . اما سوال این است که چه زمانی باید تست را نوشت . در دید سنتی و شاید قدیم گفته تصور می شد که تست را باید بعد از نوشتن کدها نوشت . اما به مرور زمان معایب آن آشکار شد . از مهمترین معایب آن شاید بی حوصلگی و عدم تمایل برای تست است و از همه مهمتر مستند نشدن صحیح فرآیند کد نویسی است .

برای حل این مشکل مفهوم Test Driven development  مطرح شد که که مخفف آن همان TDD  است .

در این روش شما ابتدا تست را می نویسید و سپس کد نویسی می کنید .!!! کمی عجیب است . اما بایک مثال واقعی بهتر متوجه می شوید . فرض کنید می خواهید خانه ای بسازید که در مقابل زلزله مقاوم باشد ، بهترین روش کدام است ، تست مصالح قبل از ساخت یا تست مصالح بعد از ساخت . جواب مشخص است اگر شما خانه را بسازید و سپس اقدام به تست کنید ممکن است تمام آن خانه خراب شود و زحمات شما بر باد شود علاوه بر آن شما نمی توانید دقیقا تشخیص دهید که علت خرابی خانه از کجا بوده است . اما اگر به روش TDD  اقدام کنید کنترل کار در همان ابتدای ساخت انجام می شوم و شما در انتهای کار خانه ای خواهید ساخت که تمام اجزای آن تست شده در یک فرآیند منظم است .

اکنون برای فهم بهتر به دوشکل زیر نگاه کنید در تصویر اول توسعه و تست بر اساس کد نویسی اول و در آخر تست انجام می شود



اما در شکل 2 بر اساس TDD  است . ابتدا تست را می نویسیم .همانطور که در شکل پایین می بینید یک حلقه مارپیچی جالبی می بینید که ابتدا تستها نوشته می شوند ترتیب اعمال ما بصورت زیر است

1-نوشتن تست  2-نوستن کدها ۳-refactor 

4-نوشتن تست بعدی



حال با توجه به شکل بالا مختصری توضیح می دهم .

1-ما برای نوشتن تست ابتدایی در واقع تستی را می نویسیم برای حالتی  که کد ما دچار خطا شود مثلا اگر تقسیم دو عدد باشد ما در تست عدد صفر را به مخرج می فرستیم تا نتیجه خطا را مشاهده کنیم در واقع ما در تست درست بودن را تست نمی کنیم به تعبیری دیگر ما  با داده ها قابل قبول تست نمی کنیم بلکه تست ما بر اساس داده ها غیر قابل قبول است تا برای آنها شرایط قابل کنترل فراهم کنیم .

 

2-کدهای خود را بر اساس تستها به گونه ای می نویسیم که بتوانند تستها را به درستی پاس کنند .

 

3-refactor  یعد از اینکه شما تست را پاس کردید ، شما به تست بعدی منتقل می شوید .یا شاید برای خوانایی و بهتر شدن کد عمل refactor  را برروی کدهای خود اعمال کنید .

 

نکته : refactor  یعنی تغییر دادن قطعه ای از کد برای خوانایی بهتر ، بدون آنکه عملکرد آن قطعه کد دچار تغییر شود .

اما برای فهم جالبتر موضوع لینک زیر را قرار دادم که دوستان می توانند برای فهم بهتر آن را مطالعه کنند .


آیا TDD در عمل امکان پذیر می باشد؟



رزومه های سرگردان !

چند وقتی است که می خواهم این مطلب را بنویسم آن هم به دلایل تجربیات خودم و از جمله گله های برخی دوستان از این موضوع

اما موضوع چیست ؟

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

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

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

 

جالبترین نکته اینجاست که چند سال پیش برای شرکتی معروف رزومه فرستادم و این شرکت یک هفته یعد برای مصاحبه دعوت کردن ، من هم مراجعه کردم و مصاحبه انجام شد ، قرار شد بعدا نتیجه را اعلام کنند ( همه میگویند بررسی می کنیم و خبر می دهیم در حالی که هیچ خبری نیست ) خلاصه ما هم یکی دو هفته منتظر شدیم ، خبری نشد ، در نتیجه با جای دیگری قرارداد بستیم و مشغول کار شدیم . تا اینکه دقیقا بعد از 10 ماه بخوانید ده ماه بله درست متوجه شدید 10 ماه آن هم شرکتی معروف دوباره با من تماس گرفتن برای مصاحبه در مورد قرارداد ، حسابی خنده ام گرفته بود که این دوستان واقعا چگونه فکر می کنند آیا فکر می کنند ما یک مشت اراذل بدبختی هستیم که به انتظار ترحم آنها نشسته ایم تا بعد از 10 ماه تماس بگیرن .

حالا که وقتی متوجه شدن که من خیلی وقته که در جای دیگری مشغول شده ام کلی ناراحت هم شدن که چرا من بی تعهد هستم . (نمی دانستم باید 10 ماه به انتظار آن معشوق بمانم ).

 

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

این شجاعت را داشته باشیم که به فردی جواب نه بگوییم تا بیهوده به انتظار ننشیند ، نه اینکه بعد از 10 ماه تازه یادمان بیفتد که دوباره تماس بگیریم .


منتظر نظرات دوستان وبلاگ نویس و خوانندگان هستیم .

نمی دانم آیا انتظار من خیلی زیاده ؟