ویژگی تصویر

کتابخانه coverage در پایتون

  /  پایتون   /  کتابخانه 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، می‌توان فرآیند تست را به‌صورت خودکار و مؤثر کنترل کرد. این کار نه‌تنها از بروز خطاهای منطقی جلوگیری می‌کند، بلکه اعتماد توسعه‌دهندگان به صحت عملکرد برنامه را افزایش می‌دهد.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: