مقدمه

در درس‌های گذشته به صورت کلی به GitHub Issues به عنوان ابزاری برای مدیریت پروژه اشاره کردیم. اکنون زمان آن است که به صورت عمیق‌تر به این مفهوم بپردازیم. Issues ستون فقرات همکاری و مدیریت وظایف در گیت‌هاب هستند. آن‌ها فقط برای گزارش «مشکلات» یا «باگ‌ها» نیستند، بلکه به عنوان واحد پایه‌ای برای هر نوع کار برنامه‌ریزی‌شده در یک پروژه عمل می‌کنند.

درک صحیح از چیستی یک Issue و یادگیری نحوه نوشتن یک Issue خوب، مهارتی کلیدی است که به ارتباط بهتر تیم، شفافیت بیشتر در فرآیند توسعه و در نهایت، به تولید نرم‌افزار با کیفیت بالاتر منجر می‌شود.

یک Issue دقیقاً چیست؟

بهترین راه برای فکر کردن به یک Issue، در نظر گرفتن آن به عنوان یک موضوع گفتگو (Conversation Thread) با یک هدف مشخص است. هر Issue یک صفحه اختصاصی دارد که در آن اعضای تیم می‌توانند در مورد یک وظیفه خاص بحث کنند، اطلاعات به اشتراک بگذارند و پیشرفت آن را پیگیری نمایند.

یک Issue می‌تواند هر یک از موارد زیر باشد:

  • گزارش باگ (Bug Report): شرح مشکلی که در نرم‌افزار وجود دارد و طبق انتظار عمل نمی‌کند.
  • درخواست قابلیت جدید (Feature Request): ایده‌ای برای یک عملکرد جدید که می‌تواند به نرم‌افزار اضافه شود.
  • وظیفه (Task): یک کار مشخص و تعریف‌شده، مانند «به‌روزرسانی مستندات API» یا «بهبود عملکرد کوئری‌های دیتابیس».
  • سوال یا بحث (Question/Discussion): محلی برای پرسیدن سوالات فنی یا بحث در مورد تصمیمات معماری پروژه قبل از نوشتن هرگونه کد.

آناتومی یک Issue خوب

یک Issue خوب، به راحتی قابل درک و پیگیری است. گیت‌هاب ابزارهای مختلفی را برای غنی‌سازی و سازماندهی Issueها در اختیار ما قرار می‌دهد.

عنوان واضح و توضیحات کامل

عنوان باید به طور خلاصه ماهیت Issue را بیان کند. اما بخش توضیحات جایی است که باید جزئیات کامل را ارائه دهید. استفاده از Markdown برای قالب‌بندی متن (ایجاد تیتر، لیست، بلوک کد و...) در این بخش بسیار توصیه می‌شود. برای یک گزارش باگ، حتماً مواردی مانند «مراحل دقیق بازتولید باگ»، «رفتار مورد انتظار» و «رفتار واقعی» را ذکر کنید. ارائه اسکرین‌شات یا لاگ خطا نیز کمک شایانی می‌کند.

برچسب‌ها (Labels) برای دسته‌بندی

برچسب‌ها برای فیلتر کردن و درک سریع ماهیت Issueها حیاتی هستند. شما می‌توانید به هر Issue یک یا چند برچسب اختصاص دهید. نمونه‌هایی از برچسب‌های رایج عبارتند از: bug، enhancement، documentation، help wanted، priority: high و good first issue.

مسئولین (Assignees) و مایلستون‌ها (Milestones)

شما می‌توانید یک یا چند نفر را به عنوان مسئول (Assignee) یک Issue تعیین کنید تا مشخص شود چه کسی روی آن کار می‌کند. همچنین می‌توانید Issueها را به یک Milestone مرتبط کنید تا آن‌ها را در راستای یک هدف بزرگتر (مانند «انتشار نسخه ۲.۰») گروه‌بندی نمایید.

استفاده از قالب‌های Issue (Issue Templates)

برای اطمینان از اینکه تمام Issueهای گزارش‌شده دارای اطلاعات لازم هستند، نگهدارندگان مخزن می‌توانند قالب‌های از پیش آماده‌شده ایجاد کنند. برای مثال، می‌توان یک قالب برای «گزارش باگ» و یک قالب دیگر برای «درخواست قابلیت جدید» طراحی کرد.

وقتی این قالب‌ها وجود داشته باشند، کاربری که می‌خواهد یک Issue جدید ایجاد کند، ابتدا از او خواسته می‌شود نوع Issue خود را انتخاب کند. سپس، بخش توضیحات با سرفصل‌های مورد نیاز (مانند «مراحل بازتولید») از قبل پر شده است. این ویژگی به طرز چشمگیری کیفیت Issueهای دریافتی را بالا برده و در زمان تیم صرفه‌جویی می‌کند.

گفتگو و همکاری در Issue‌ها

همانطور که گفته شد، هر Issue یک فضای گفتگوست. شما می‌توانید با استفاده از علامت @ دیگران را منشن کنید تا نوتیفیکیشن دریافت کنند و در بحث شرکت کنند (مثلاً: @username, what do you think about this approach?). تمام این گفتگوها ثبت می‌شود و به عنوان بخشی از مستندات تصمیم‌گیری‌های پروژه عمل می‌کند و برای افرادی که در آینده به پروژه می‌پیوندند، بسیار ارزشمند خواهد بود.