کتابخانه coverage در پایتون
کتابخانه Coverage در پایتون یکی از ابزارهای مهم و کاربردی برای تحلیل و اندازهگیری میزان پوشش تست (Test Coverage) در پروژههای نرمافزاری است. این کتابخانه به توسعهدهندگان کمک میکند تا بفهمند چه بخشهایی از کد در طول اجرای تستها اجرا شدهاند و کدام بخشها هنوز پوشش داده نشدهاند. هدف اصلی این ابزار، بهبود کیفیت نرمافزار و اطمینان از تست کامل منطق برنامه است.
مفهوم پوشش کد (Code Coverage) چیست؟
پوشش کد به درصد خطوطی از برنامه گفته میشود که در زمان اجرای تستها اجرا شدهاند. هرچه این درصد بیشتر باشد، یعنی تستهای شما بخش بیشتری از کد را پوشش دادهاند و احتمال وجود باگ کمتر است. با استفاده از کتابخانه Coverage.py، میتوان این میزان را بهصورت دقیق محاسبه کرد.
انواع پوشش کد
- Line Coverage: بررسی میکند که چند درصد از خطوط کد اجرا شدهاند.
- Branch Coverage: بررسی شاخههای مختلف شرطها (if/else) و میزان تست آنها.
- Function Coverage: نشان میدهد چه تعداد از توابع فراخوانی شدهاند.
- Statement Coverage: مشابه Line Coverage اما با تمرکز بر دستورهای اجرایی.
نصب کتابخانه Coverage
pip install coverageبرای نصب این ابزار، کافی است از دستور بالا در محیط ترمینال یا CMD استفاده کنید. این دستور آخرین نسخه از کتابخانه را از PyPI دریافت و نصب میکند.
شروع کار با Coverage
پس از نصب، میتوان از طریق خط فرمان یا داخل کد پایتون از آن استفاده کرد. معمولاً روش خط فرمان سادهتر است.
اجرای تستها با Coverage
coverage run my_tests.pyدر این دستور، فایل my_tests.py اجرا میشود و Coverage میزان خطوط اجرا شده را ثبت میکند. برای مشاهده نتایج باید گزارش ایجاد کنید.
نمایش گزارش در ترمینال
coverage reportاین دستور گزارشی متنی از درصد پوشش کد را در ترمینال نمایش میدهد. مثلاً ممکن است خروجی مشابه زیر باشد:
Name Stmts Miss Cover
--------------------------------------
main.py 50 10 80%
utils.py 30 0 100%
--------------------------------------
TOTAL 80 10 87%در این مثال، فایل main.py فقط ۸۰٪ پوشش دارد و باید تستهای بیشتری برای خطوط باقیمانده نوشته شود.
تولید گزارش HTML
coverage htmlبا اجرای این دستور، گزارش کامل بهصورت فایلهای HTML در پوشه htmlcov ایجاد میشود. این فایلها شامل نمودارها و رنگبندیهایی هستند که بخشهای پوششدادهشده (سبز) و پوششندادهشده (قرمز) را نمایش میدهند.
ادغام Coverage با unittest
اگر از ماژول unittest استفاده میکنید، میتوانید تستها را با دستور زیر اجرا کنید:
coverage run -m unittest discoverدستور بالا تمام فایلهای تست در پروژه را پیدا و اجرا کرده و سپس پوشش آنها را بررسی میکند.
ادغام Coverage با pytest
در پروژههایی که از pytest استفاده میکنند، Coverage میتواند بهصورت مستقیم با آن ترکیب شود. برای این کار باید افزونه مخصوص را نصب کنید:
pip install pytest-covسپس کافی است تستها را با دستور زیر اجرا کنید:
pytest --cov=.در اینجا گزینه –cov=. به pytest میگوید تا پوشش کل پوشه فعلی را اندازهگیری کند.
استفاده از Coverage در داخل کد پایتون
اگر بخواهید بهصورت برنامهنویسی (نه فقط از خط فرمان) از Coverage استفاده کنید، میتوانید از API آن بهره ببرید:
import coverage
cov = coverage.Coverage()
cov.start()
# Run your code or tests here
import my_module
my_module.run_tests()
cov.stop()
cov.save()
cov.report()در این کد، ابتدا یک شیء Coverage ساخته میشود و پس از اجرای تستها، عملیات متوقف شده و گزارش نمایش داده میشود.
تجزیه و تحلیل نتایج Coverage
نتایج Coverage به شما کمک میکند نقاط ضعف تستها را شناسایی کنید. برای مثال اگر تابعی اصلاً در گزارش نمایش داده نشده باشد، یعنی هیچ تستی آن را اجرا نکرده است. این هشدار مهمی برای افزایش دقت تستهاست.
نکته:
- پوشش ۱۰۰٪ به معنی نبود باگ نیست؛ فقط نشان میدهد که همه خطوط اجرا شدهاند، اما ممکن است منطق درونی هنوز ایراد داشته باشد.
- بهتر است روی شاخهها (branch coverage) تمرکز کنید تا اطمینان حاصل شود تمام مسیرهای منطقی تست شدهاند.
پارامترهای مفید در Coverage
| گزینه | توضیح |
|---|---|
| –omit | حذف فایلها یا پوشههای خاص از گزارش |
| –include | تمرکز فقط روی مسیرهای مشخصشده |
| –fail-under | اگر پوشش کمتر از درصد مشخص باشد، اجرای تستها را با خطا متوقف میکند |
| –branch | فعالسازی تحلیل شاخهها |
نمونه:
coverage run --branch --omit="tests/*" -m unittest
coverage report --fail-under=90در این مثال، فایلهای تست از تحلیل حذف شدهاند و اگر پوشش کمتر از ۹۰٪ باشد، فرآیند با خطا پایان مییابد.
بهترین شیوهها در استفاده از Coverage
- پوشش کد را در CI/CD (مثل GitHub Actions یا Jenkins) ادغام کنید.
- گزارشهای HTML را بررسی کنید تا بخشهای قرمز (کدهای پوششندادهشده) را شناسایی کنید.
- از ترکیب Coverage با ابزارهای linting و static analysis برای کنترل کیفی بهتر استفاده کنید.
- پوشش ۸۰–۹۰٪ معمولاً کافی است؛ دستیابی به ۱۰۰٪ اغلب غیرضروری و پرهزینه است.
خطاهای رایج در Coverage
- ModuleNotFoundError: وقتی فایل یا ماژول اشتباه وارد شده باشد.
- No data to report: اگر Coverage قبل از اجرای تستها آغاز نشده باشد.
- Incorrect paths: در صورتی که پوشه پروژه به درستی شناسایی نشده باشد.
جمعبندی فنی
کتابخانه Coverage یکی از ابزارهای ضروری برای توسعهدهندگان حرفهای پایتون است که به آنها کمک میکند کیفیت کد را با دادههای دقیق اندازه بگیرند. این ابزار در کنار تستهای خودکار، یکی از ارکان اصلی توسعه مبتنی بر تست (TDD) محسوب میشود.
با ترکیب Coverage با ابزارهایی مثل pytest و unittest، میتوان فرآیند تست را بهصورت خودکار و مؤثر کنترل کرد. این کار نهتنها از بروز خطاهای منطقی جلوگیری میکند، بلکه اعتماد توسعهدهندگان به صحت عملکرد برنامه را افزایش میدهد.
آیا این مطلب برای شما مفید بود ؟




