سلام خدمت همه برنامه نویسان عزیز مطلبی که میخوایم امروز در موردش صحبت کنیم در مورد نوشتن تست های خودکار برای کد ها می باشد. در ابتدا به مقدمه ای بر چیست و چرایی تست ها می پردازیم و سپس دست به کد میشیم و چند تا مثال خوب رو حل میکنیم. صنعت نرم افزار از ابتدای پیدایش به دلیل پیچیدگی ماهیت خود نیاز به تست را در خود احساس می کرد. در ابتدا این تست ها توسط نیروی انسانی و به صورت دستی انجام می شد. ( در حال حاضر این روش هنوز منسوخ نشده و بسیاری از شرکت ها هنوز این کار رو انجام میدن ). تست کردن نرم افزار توسط نیرو های انسانی معایبی داشت از جمله
1- زمان بر بودن : این مورد در نرم افزارهای بزرگ بیشتر نمود پیدا میکرد تا جایی که تیم تست چند روز را صرف تست نسخه جدید نرم افزار میکرد 2- امکان بروز خطای انسانی 3- هزینه بر بودن 4- در صورت پیدا کردن مشکل گزارش به تیم فنی ارائه می شد و پس از برطرف کردن مشکل پروسه تست مجدد باید تکرار می شد
کم کم مهندسان به فکر ارائه راه حلی برای حل این مشکل افتادند که منجر به، به وجود آمدن کتابخونه هایی برای انجام تست ها به صورت خودکار شد.
تست ها به طور کلی به سه دسته تقسیم شدند که به هرم تست معروف شدند. ( شکل 1 )
1- End to end (UI) 2- Integration(Acceptance) 3- Unit
End to End :
این تست ها که با نام های دیگری نیز مانند UI tests یا GUI tests شناخته می شوند یک نرم افزار را از ابتدا تا انتها تست می کنند
به طور مثال پروسه ثبت نام کاربر شامل : پر کردن فرم ثبت نام ، کلیک بر روی دکمه ثبت نام و انتظاری که بعد از زدن دکمه ثبت نام داریم.
نرم افزار Selenium یک از نرم افزارهای مطرح می باشد که می تواند در این زمینه به شما کمک زیادی بکند.
مزایا :
1- یک پروسه را به طور کامل تست می کند 2- پروسه ارتباط با کاربر نهایی را تضمین و بهینه می کند. 3- چرخه Business logic ها را کنترل می کند
معایب :
1- تست های بسیار شکننده ای می باشد 2- کند هستند 3- هزینه بردار هستند
چه میزانی باید در پروژه هامون از این تست ها استفاده کنیم :
طبق صحبت های آقای ... در این مقاله میزان 10 درصد برای End to end و 20 درصد برای Integration test و 70 درصد برای Unit test از کل تست های ما را شامل می شوند.
Integration test :
ارتباط و نحوه کارکرد چند واحد با یکدیگر را تست می کند. مطاله بیشتر
به این نوع تست ها تست API نیز گفته می شود.
مزایا
1- سریعتر از تست های End to end می باشند. 2- یک پروسه را به جز لایه UI در بر می گیرد. ( ارتباط بین کامپوننت ها )
معایب
1- زمان بر بودن
Unit test :
یک واحد را به طور جدا و کاملا مستقل تست می کند. مطالعه بیشتر
تست های یونیت به طور کلی بیشترین تست های ما را شامل می شوند. در این نوع تست ها وابستگی های آن ها شبیه سازی می شوند که برای این کار ها از Test double ها استفاده می شود.
مزایا :
1- فیدبک های سریع. 2- کیفیت های کد را بهتر میکنند. 3- بیسار موثر در پیدا کردن آسان باگ ها. 4- هزینه های ساخت نرم افزار را کاهش می دهند. 5- مرجعی برای داکیومنت نرم افزار می باشند. 6- به برنامه نویس های دیگر در فهم نرم افزار کمک زیادی می کنند. 7- افزایش سرعت در Develop