انواع تست‌ها در برنامه‌ نویسی و توسعه نرم افزار

حتما اگر برنامه نویس بوده باشید به موجود اعصاب خورد کنی به نام باگ برخورده‌اید و قطعا اگر این باگ سمت کاربر و زمانی که کاربر با برنامه تعامل می‌کند رخ بدهد می‌تواند تجربه کاربری را ضربه و یا حتی آن کاربر بار آخری باشد که به وب‌سایت و یا اپ شما سر می‌زند. در ادمه سه نوع تست را به شما معرفی خواهیم کرد که به شما کمک می‌کند باگ‌هایتان را آسان‌تر و بهتر برطرف کنید و همچنین استفاده هر کدام را در ادامه خواهیم گفت. تی دی دی (TDD) چیست؟ در ابتدا بهتر است متد TDD را معرفی کنیم که مخفف: test-driven-development است و به نوعی نمی‌توان اسمش را متد گذاشت و بهتر است بگوییم یکی از اجزای پروسه تولید نرم افزار است.تی دی دی (TDD) عبارت است از ترکیب TFD یا همان Test First Design و Refactor. یعنی چه؟ یعنی ما اول قبل از اینکه شروع به کدنویسی بکنیم اول تست‌ها رو طراحی می‌کنیم و بعد کد نویسی می‌کنیم و بعد ریفاکتور می‌کنیم‌.قبل از اینکه بریم تو بحر TDD اجازه بدید Refactor رو یه شرح کوچولو بدم‌:ریفاکتور عبارتست از پروسه بهبود طراحی کدهای موجود بدون اینکه رفتار کدها تغییر بکند. مثلا کلاس‌بندی کد‌ها و یا خوانا کردن کد‌ها و کلا هر کاری که مربوط به طراحی کدها باشد.تی دی دی (TDD) شامل 5 مرحله می‌باشد‌:1- اول یک تست نوشته می‌شود‌.2- تست نوشته شده آزمایش می‌شود و چون کدی برای این تست نوشته نشده اشت پس نتیجه تست Fail است‌.3- به اندازه کافی و تاکید می‌کنم فقط به اندازه کافی کد می‌نویسیم که فقط این تست را Pass بکنیم‌.4- تست نوشته شده در مرحله اول آزمایش می‌گردد اگر پاس شود حرکت به مرحله بعدی و اگر نشود برگشت به مرحله قبلی و نوشتن اندکی دیگر کد.5- ریفاکتور.بهترین کار بکارگیری TDD در تولید نرم افزار‌های بزرگ است چرا که قبل از بزرگ شدن نرم افزار به شما باگ‌ها را گزارش می‌کند و شما آن‌ها را حل میکنید و فکر کنم خودتان بفهمید چقدر کارتان آسان‌تر می‌شود (اگر نرم افزار بزرگ شود و حجم کد‌ها سنگین قطعا تست کردن آن هم سنگین و دشوار خواهد بود). Joe Birch, a Senior Android Engineer at Buffer:"Following TDD has not only allowed us to write simpler, more understandable code but has allowed us to think more about what we are implementing before actually implementing it. دنبال کردن TDD و بکارگیری آن فقط ساده نوشتن و کد قابل فهم و مناسب را برای ما فراهم نکرده است بلکه فکر کردن درباره اینکه چه چیزی را در حال پیاده‌سازی آن هستیم قبل از اینکه واقعا پیاده‌سازی‌اش کنیم به ما می‌دهد. چرا تست نرم افزار مهم است؟اگر فکر می‌کنید که شرکت شما و یا خود شما اگر در حال پیاده‌سازی نرم افزاری هستید و وقت برای تست ندارید به این مثال توجه کنید که شما یک نرم افزاری را نوشته‌اید بدون تست و اصول و این نرم افزار را خودتان که برنامه نویس هستید تست می‌کنید و می‌بینید خطا‌های بسیار زیادی وجود دارد. الان بین آن همه کد و نوشته‌هایتان چکار میکنید؟ (فکر کنید این نرم افزار بزرگ بود و شما در یک شرکت کار می‌کردید و قطعا اوضاع خیلی بدتر می‌شد).پس همه ما می‌دانیم که تست نرم‌افزار بسیار مهم است اما سوال اینجاست که دلیل این اهمیت چیست؟ در زیر می‌توانید چندین دلیل مختلف را برای این موضوع مشاهده کنید:تست نرم‌افزار به ما کمک می‌کند تا بتوانیم مشکلات، نواقص و خطاهایی که قابلیت شناسایی در روند توسعه ندارند را پیدا کنیم.برای اینکه مطمئن شوید که خروجی درست را دریافت می‌کنید، تست اپلیکیشن‌ها و نرم افزارها بسیار مهم است.برای در نظر گرفتن کیفیت نرم افزار، Software Testing به شما این توانایی را می‌دهد تا بتوانید کیفت محصول نهایی را بررسی کنید و از مناسب بودن آن مطمئن شوید.تست نرم افزار به شما کمک می‌کند تا میزان رضایت مشتریان را درک کنید و اعتماد‌پذیری آن‌ها را بررسی نمایید. برای داشتن اپلیکیشن یا نرم افزاری با کارایی بالا، بهره‌گیری از Software Testing بسیار مسئله مهمی است.تست نرم افزار به شما این قابلیت را می‌دهد که نرم افزارهایی با کیفیت بالا بدون هزینه زیاد تولید کنید. همچنین تستینگ به شما سازگاری و همخوانی در بدنه نرم افزار را می‌دهد. انواع رویکرد تستدو رویکرد برای تست نرم افزار داریم که هر کدام دارای انواع و مراحل خاصی می باشد که باید به ترتیب و در زمان خود انجام گیرد. این دو رویکرد تست جعبه سیاه (black-box testing) و تست جعبه سفید (white-box testing) می باشد.تست جعبه سیاه (Black-box Testing)در این رویکرد‌، تست تمامی مکانیسم‌های داخلی یک سیستم نادیده گرفته می‌شود و روی خروجی تولید شده تمرکز می‌شود.به این رویکرد تست functional نیز می‌گویند.تست جعبه سفید (White-box Testing)در این نوع تست با مکانیسم داخلی و متدهای یک سیستم سرو کار داریم. به این نوع تست structural تست نیز گفته می‌شود.انواع تست‌ها در برنامه نویسی و توسعه نرم افزار انواع مختلفی از تست وجود دارند که در ادامه آن ها را مشاهده می کنید: یونیت تستینگ (Unit Testing) در این نوع تست ما یک واحد و یا یک گروه از واحد‌های مرتبط با هم را تست می‌کنیم. این نوع تست زیر مجموعه White-box Testing است.اینتگریشن تستینگ (Integration Testing)این نوع تست به ما این امکان را می‌دهد که چند نوع کامپننت مختلف را کنار یکدیگر تست کنیم. در این صورت حتی ما می‌توانیم وابستگی‌های میان سخت افزار و نرم افزار را نیز تست کنیم. این دسته از تست‌ها زیر مجموعه black box هستند.فانکشنال تستینگ (Functional Testing)در این تست اطمینان حاصل می‌شود که عملکرد برنامه به درستی است.توجه شود که در این نوع تست برخلاف آزمون واحد ما می‌توانیم عملکرد یک سیستم را تست کنیم و نه فقط یک واحد را.این تست زیر مجموعه black box هستند.سیستم تستینگ (System Testing)این نوع تست به ما اجازه می‌دهد که از عملکرد برنامه در محیطهای مختلف اطمینان حاصل کنیم(مثل سیستم عامل های مختلف). این تست زیر مجموعه black box تست‌ها است.استرس تستینگ (Stress Testing)این نوع تست عملکرد برنامه را در شرایط نا مطلوب مورد بررسی قرار می‌دهد. این تست زیر مجموعه black box تست‌ها است.پرفورمنس تستینگ (Performance Testing)تست عملکرد و کارایی که در مجموعه black box تست‌ها جای میگیرد به ما این اطمینان را می‌دهد که برنامه مان عملکرد و کارایی لازم را در یک مدت زمان مشخص داراست.یوزیبیلیتی تستینگ (Usability Testing)این تست از دیدگاه مشتری انجام می‌شود و در واقع مشخص کننده فاکتورهای زیر است:آیا برنامه کاربر پسند است؟آیا برنامه ساده و قابل یادگیری است؟آیا برنامه جذاب طراحی شده است؟و …این نوع تست زیر مجموعه black box تست‌ها است.اکسپتنس تستینگ (Acceptance Testing)این نوع تست معمولا از طرف مشتری انجام می‌شود.هدف آن، مشخص کردن این است که آیا برنامه نیازهای مشتری را پاسخ می‌دهد و آیا برنامه همان چیزی که مشتری می‌خواهد هست یا خیر.رگرشن تستینگ (Regression Testing)این نوع تست به منظور صحت عملکرد سیستم بعد از تغییرات استفاده می‌شود و زیر مجموعه black box تست‌ها است.بتا تستینگ (Beta Testing)تستی است که توسط کاربر نهایی یا یک تیم خارج از تیم توسعه انجام می‌شود.هدف تست بتا پوشش دادن خطاهای غیر منتظره است.این تست زیر مجموعه black box تست‌ها است.نتیجه‌گیری در یک دهه اخیر ما پیشرفت‌ها و رشد بسیار سریعی از دنیای توسعه نرم افزار را شاهد بودیم. به همین دلیل است که تست نرم افزار به بخشی چالش برانگیز برای توسعه نرم افزار تبدیل شده است. این چالش باعث شده است که موقعیت‌های شغلی بسیاری در بازار به وجود بیاید که می‌توان آن‌ها را با عناوینی مانند Software Tester ،Testing Engineer و ... مشاهده کنیم. مطمئن بودن و کیفیت دو وجه بسیار مهم در ساخت یک نرم افزار هستند که باید همواره در نظر گرفته شوند.منبع 1: http://bit.ly/2VV9ce5 منبع 2: http://bit.ly/2JeX41I منبع 3: http://bit.ly/2Jyy7xmبرای مطالعه پست‌های بیشتر ما را در وبلاگ کارادمی و یا در ویرگول دنبال کنید.