دسته بندی تست ها
اولین چیزی که در مورد تست ها باید بدانید این است که قرار است چه چیزی را تست کنند؟ چیزهایی که معمولا با تست ها بررسی میکنیم سطوح مختلفی دارند. مقالات زیادی برای دسته بندی تست ها نیز وجود دارند که هرکدام ساختارها و نام گذاری های خاص خود را دارند. به صورت کلی تست هایی که بخش بزرگتری از عملکرد یک برنامه را تست میکنند با تست هایی که عملکرد یک تابع یا یک کلاس را بررسی میکنند با یکدیگر فرق دارند. و تست هایی که عملکرد کل برنامه را بررسی میکنند نیز با هردو مورد قبل فرق دارند. مهم ترین تست ها عبارتند از:
- تست های واحد( Unit tests ): تست هایی که بخش های کوچکی از کد را validate می کنند. مثلا تنها یک function با ورودی های مشخصی را validate میکنند. این بخش های کوچکتر نیز کنار بخش های دیگری کار میکنند که هرکدام توسط Unit test های خود validate شده اند.
- تست های ترکیبی( Integration tests ): این تست ها یا ارتباطات بین توابع و عملکردهای مختلف برنامه را به صورت یکجا validate می کنند( integration tests without environment ) و یا ارتباط بین یک برنامه با چند برنامه ی دیگر را که در کنار هم اجرا می شود(مثلا در معماری میکروسرویسی یا برنامه نویسی ماژولار) را به صورت یکجا validate می کنند( integration tests with the environment ).
- تست های عملکرد(یا رضایت کاربر)( Functional یا end-to-end یا User Acceptance): این تست ها بالاترین سطح تست ها هستند و تمام عملکرد برنامه را به صورت یکجا validate می کنند.
تست ها میتوانند دسته بندی های جزئی تری نیز داشته باشند. در مورد هرکدام از موارد زیر سرچ کنید:
در کنار این هرم تست( Testing Pyramid ) را نیز جست و جو کنید.
اولویت و اهمیت Unit test ها بیشتر از دیگر تست هاست. این تست ها کمترین میزان وابستگی و پیچیدگی را دارند و سریع تر اجرا می شوند. هرچقدر به تست های جامع تر و سطح بالاتر نزدیک تر شویم، پیچیدگی بیشتری به تست ها اضافه می شوند و زمان بیشتری برای اجرای آنها طول میکشد. حتی گاهی نیاز داریم که برای اجرای تست های پیچیده واقعا برنامه را در حالت های شبیه سازی شده ی اجرا قرار دهیم و با عدم عملکرد یک بخش ساده (مثلا یک object storage یا mail server در برنامه ی backend) ممکن است test به سادگی fail شود.