تست نویسی چیه و به چه دردی میخوره ؟

بررسی مفهوم تست نویسی به همراه مزایا و چالش ها تست نویسی ، یکی از بخش های جدانشدنی ساخت نرم افزاره ، با تست نویسی ، میتونیم تا حدودی ، اشکالات نرم افزاری که ساختیمو ، قبل از انتشار در مارکت ها یا تحویل دادن پروژه ، شناسایی کنیم ، این کار اگه به شکل اصولی انجام بشه ، هم از نظر هزینه ای ، هم از نظر کارایی ، خیلی به نفعمونه ، چون دیباگ کردن نرم افزار ، وقتی پروژه تحویل داده شده و در حال اجرا هستش به مراتب هزینه و زمان بیشتری بیشتری میطلبه ، همچنین اعتبار ما به عنوان برنامه نویس خدشه دار میکنه ، حالا در ادامه همراه من باش تا بهت بگم جریان چیه اصن . فرآیند تست نویسی چطوری انجام میشه ؟ نحوه انجام فرآیند تست نویسیهر برنامه از چندین واحد تشکیل شده ، که هر واحد یه کار خاص انجام میده ، حالا میخوایی ببینی ، هر کدوم از این اجزا کاری که باید انجام بدن ، انجام میدن یا نه ؟؟ برای این کار از مفهوم Unit Testing استفاده میشه ، توی این مفهوم هر بخش از برنامه ما یه واحد یا Unit به حساب میاد و کد هایی نوشته میشه که اون Unit تست کنند ، وقتی که توی اون تست موفق بودیم ، به اصطلاح تستمون Pass میشه ، و ما تونستیم واحد مورد نظرمونو از نظر کارایی تست کنیم . حالا اگر ما بیاییم و به ازای هر بخش قابل تست برنامه ، کد تست هم بنویسیم در واقع مفهوم تست نویسی به خوبی توی پروژمون انجام دادیم و یه مزیت خیلی بزرگ برای یه برنامه نویسه ، هر چند که معمولا برنامه نویس ها از تست نویسی خوششون نمیاد !!مثال برنامه نویسی : مثال برنامه نویسی تست نویسی فرض کن داری یه برنامه ماشین حساب مینویسی ، یه چیزی مثل ماشین حساب ویندوز مثلا ، خوب این آقای ماشین حساب ، جمع داره ، ضرب داره ، تقسیم داره ، تفریق داره ، هر کدوم از این موارد ، میشن یه واحد یا یدونه Unit حالا ما وقتی کار برنامه نویسی هر واحدی تموم کردیم ، باید یه کد کوچیکم بنویسیم که این واحد از نظر سلامت چک کنه ، به این کار ما میگن Unit Testing . حالا شاید بگید خوب این چه کاریه ، خودمون تستش میکنیم دیگه ، اگه بخوایی خودت تست کنی برنامتو ، تست دستی انجام میدی ، که اگه برنامت بزرگ باشه ، گور خودتو کندی ?? حالا توی این مثال ماشین حساب برنامه شما ، برنامه کوچیکیه به خاطر همین شاید تست کردنش توسط خودتون آسون باشه ، ولی اگه برنامتون خیلی بزرگ تر باشه و بخوایید در کمترین زمان ممکن بفهمید چه اشکالاتی داره ، تا برای انتشار آمادش کنید ، اون موقع ارزش استفاده از Test ها دو چندان میشه . چرا باید تست نویسی انجام بدیم ؟ بررسی دلایل انجام تست نویسیبا استفاده از مفهوم تست نویسی ، میتونیم اشکالات برناممون خیلی سریع پیدا کنیم و دیگه وقت زیادی صرف بررسی کل برنامه نکنیم که ببینیم اشکال از کجاست ، مخصوصا اینکه در برنامه های بزرگ ، موارد بسیار زیادی برای تست هست که اگه بخواییم همه این موارد ، تکی تکی و به شکل دستی تست کنیم ، کارمون بعد از کار معدن ، سخت ترین کار دنیا میشه . من یادمه قبلا برای تست عملیات ذخیره یه سری اطلاعات روی هاست ، هر بار ، خودم اطلاعات وارد میکردم و میدیدم مشکلی داره یا نه ، مثلا فک کن یه فرمی داری ۱۰۰ المان داره که باید پر بشن ، حالا میخوایی ببینی آیا این فرمه به درستی سیو میشه تو دیتابیست یا نه ، خب مشخصه این که بخوایی بیایی هر بار خودت اطلاعات وارد کنی و این موضوع چک کنی خیییلی کار زمان بری ، حالا فکرشو بکن توی پروژه های بزرگ دها مورد از این ها داریم ما ، خب چرا این کار بکنیم ، در صورتی که میتونیم با یک بار تست نویسی اون قسمت ، هزار بار بتونیم تست کنیم ، اونم به شکل اتوماتیک و در چند ثانیه ؟ میتونیم قبل از اینکه برنامه به دست کاربر برسه ، اشکالات سیستم شناسایی کنیم ، تا برنامه با حداقل باگ و حداکثر کارایی ، تحویل بدیم و وقت و هزینه زیادی صرف پشتیبانی و باگ یابی نکنیم علاوه بر این اعتبار خودمون یا شرکتمونو این جوری تا حد زیادی بالا میبریم . در بسیاری از مواقع اولین باگ ما میتونه اخرین باگ ما باشه و اگر بخش های مهمی از سیستم ما ، مثلا بخش پرداخت دچار باگ های بد باشه ، میتونه تبعات حقوقی و غیر حقوقی زیادی برامون داشته باشه توی این پروژه ها ، حتما باید تست نویسی انجام بدیم . سیستمی که ما نوشتیم ، همیشه یه وضعیت ثابت نداره ، ممکنه نت کاربر قطع بشه ، ممکنه افزونه های کروم یا موزیلا باعث از کار افتادن قسمت خاصی از کدامون بشن و در کل ، یک برنامه باید در همه شرایط تست کرد ، واسه این که بتونیم این کار خیلی سریع و مداوم انجام بدیم ، باید از تست نویسی استفاده کرده باشیم . یه مورد مهم دیگه اینکه برنامه نویس چون با تست نویسی ، اون بخشی که کد زده ، کاملا بررسی میکنه ، درک بالایی از اون تیکه کد داره ، چون عملکردش کاملا بررسی کرده ، پس اگه بخواد تغییراتی توی اون تیکه به وجود بیاره خیلی راحت تر میتونه اینکار بکنه . مورد بعدی اینکه اگر ماژولار کد بزنیم ، Unit هامون به همراه تست هایی که نوشتیم میتونم هر جای دیگه که خواستیم استفاده کنیم پس درواقع با تست نویسی یه تیکه کد سالم و تست شده داری که میتونی توی پروژه های دیگه ازش استفاده کنی . یه برنامه نویس چطور تست نویسی میکنه ؟ نحوه انجام تست نویسیاقای برنامه نویسه ، که‌ داره ماژولار کد میزنه ، وقتی کد اصلی مینویسه ، یه کد تستم مینویسه که وظیفش اینه که صحت و سلامت اون کد اصلی تست کنه ، این کدای تستی که مینویسه ، در مرحله انتشار نرم افزار پاک میشن و فقط در مرحله توسعه نرم افزاره . حالا این کدا کجا مینویسه ، این برنامه نویس گلمون ؟ معمولا برای تست نویسی از یک فریمورک Unit Test استفاده میشه که مثلا برای php فریمورک Php Unit استفاده میشه . یکی از بزرگترین مزیت هایی که در استفاده از این فریمورک ها هست ، اینه که در مواقعی که یک تست شکست میخوره ، گزارش کاملی بهت میده . چالش های تست نویسی چیه ؟ چالش های تست نویسی !!تست نویسی ، نمیتونه همه اشکالات و باگ های موجود در برنامه تشخیص بده کلا تست نویسی فقط یک بخش از تست نرم افزاره اینجوری نیست که با انجام تست نویسی و پاس کردن تست های مربوطه کللللا برنامه بدون اشکالی داشته باشیم ، باید حتما تست های دیگه هم انجام بدیم . همه بخش های برنامتو نمیتونی تست کنی ، بعضی از قسمت ها قابلیت پیاده سازی به شکل تست ندارند و برای تست اون قسمت ها باید به شکل دستی وارد عمل بشینتیجه گیری ؟ تست و ارزیابی جز جدا نشدنی کار ما برنامه نویسا ، پس در هر صورت تست باید در هر زمان و هر شرایطی که ما اراده کنیم در کمترین زمان ممکن انجام بشه ، منتها اگه تست بخواد دستی انجام بشه ، مشکلات زیادی داره که گفتم بهتون ، پس بهتره تست نویسی خیلی جدی بگیریم و حتما توی پروژه هامون ازش استفاده کنیم ، با انجام این کار ، هم برنامه هایی که میسازیم ، هم خودمون ، از نظر کیفی چندین گام بزرگ به جلو حرکت میکنیم . خب دوستان این پست هم به اتمام رسید ، اگه دوست داشتید منو توی لینکدین و ایستاگرام دنبال کنید @danial_sanaee تا دیدار بعدی فعلا خدانگهدار .