Test Coverage

یک مفهوم مهم و قابل بحث در تست نویسی test coverage است. نسبت مقداری از کد که توسط تست ها استفاده می شود به کل کدها را test coverage مینامیم و آن را با درصد نشان می دهیم. رسیدن به 100% coverage شاید جالب باشد اما ضروری نیست! هرچقدر که کد بیس بزرگتر باشد بهتر است که بیشتر به 100% نزدیک باشیم. به صورت کلی اهمیت این مسئله تنها به تصمیم توسعه دهندگان برای وقت گذاشتن برای تست ها بستگی دارد.


در زیر test coverage پروژه های مختلف پایتونی را میبینید:

پایدانتیک: حدود 96%

https://github.com/pydantic/pydantic

فست ای پی آی: حدود 99%

https://github.com/tiangolo/fastapi

جنگو: حدود 75%

https://github.com/django/djangoproject.com

تنسورفلو: تمام نسخه های اصلی 5 تست User Acceptance را پاس می کنند(همیشه 100%):

https://github.com/tensorflow/tensorflow


رسیدن به 100% coverage همیشه به معنای بدون باگ بودن برنامه نیست! میتوانیم هزاران تست بنویسیم که هیچکدام به درستی برنامه را ارزیابی نکنند! پس بهتر است که اولویت را برای نوشتن تست های درست بگذاریم به جای اینکه به فکر 100% coverage باشیم!

هدف از نوشتن تست ها دو چیز است:

  • اطمینان حاصل کردن از درست رفتار کردن برنامه در مواجهه با ورودی های کاربر
  • بررسی شرایط خاص عملکرد موضوع مورد تست(تابع، ترکیب چند تابع یا کل برنامه) برای ورودی های خاص و شرایط عجیب.

به کمک تست ها باید از صحت عملکرد برنامه در شرایط مختلف مطمئن باشیم، نه که فقط به 100% coverage دست پیدا کنیم.