عنوان:

‫راهنمای دستورالعمل‌های سفارشی گیت‌هاب کوپایلوت در ویژوال استودیو


نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۳/۱۴ ۰۸:۰۰
آدرس: www.dntips.ir
با گسترش استفاده از کوپایلوت در تیم‌ها، چالش مهمی مطرح می‌شود: چگونه می‌توان اطمینان حاصل کرد که کدهای پیشنهادی کوپایلوت با استانداردها و شیوه‌های کدنویسی پروژه هم‌راستا هستند؟ اینجاست که قابلیت "دستورالعمل‌های سفارشی" (Custom Instructions) گیت‌هاب کوپایلوت وارد عمل می‌شود و راه حلی قدرتمند برای این چالش ارائه می‌دهد.

چالش هم‌راستایی کد با استانداردهای پروژه
هنگامی که توسعه‌دهندگان از کوپایلوت استفاده می‌کنند، ممکن است نیاز باشد که به صورت دستی، زمینه‌های خاصی مانند بسته‌های مورد استفاده، قراردادهای نام‌گذاری (naming conventions)، یا سبک‌های کدنویسی را در هر پرامپت (prompt) مشخص کنند. این فرآیند نه تنها زمان‌بر است، بلکه تضمینی وجود ندارد که همه توسعه‌دهندگان، زمینه یکسانی را ارائه دهند. این عدم هم‌راستایی می‌تواند منجر به تولید کدهای متفاوت و در نهایت کاهش یکپارچگی و کیفیت پروژه شود. به عنوان مثال، یک تیم ممکن است بر استفاده از ساختار خاصی برای مدیریت خطا در پروژه‌های .NET اصرار داشته باشد، اما بدون دستورالعمل‌های واضح، کوپایلوت می‌تواند پیشنهاداتی دهد که با این استانداردها مغایرت دارد.

معرفی دستورالعمل‌های سفارشی کوپایلوت
برای حل این مشکل، گیت‌هاب کوپایلوت قابلیتی به نام دستورالعمل‌های سفارشی را ارائه می‌دهد. این قابلیت به توسعه‌دهندگان اجازه می‌دهد تا یک فایل متنی با نام copilot-instructions.md را در مخزن (repository) پروژه خود قرار دهند. این فایل به عنوان منبعی برای کوپایلوت عمل می‌کند و آن را با استانداردهای کدنویسی، شیوه‌های تست واحد (unit test)، و بهترین شیوه‌های (best practices) خاص پروژه تغذیه می‌کند. از آنجایی که این فایل در مخزن پروژه ذخیره می‌شود، هر فردی در تیم که از کوپایلوت استفاده می‌کند، کدهایی را دریافت خواهد کرد که با استانداردهای پروژه هم‌راستا هستند. این رویکرد، یکپارچگی و هماهنگی در کدبیس (codebase) را تضمین می‌کند و نیاز به ورودی‌های مکرر و دستی از سوی توسعه‌دهندگان را از بین می‌برد.

پیاده‌سازی دستورالعمل‌های سفارشی در پروژه‌های دات‌نت
پیاده‌سازی دستورالعمل‌های سفارشی کوپایلوت یک فرآیند ساده و چند مرحله‌ای است. برای این مثال، از یک قالب پایه ASP.NET MVC در ویژوال استودیو (Visual Studio) استفاده می‌کنیم.

1. ایجاد فایل copilot-instructions.md:
در ریشه مخزن پروژه خود، یک پوشه به نام .github ایجاد کنید و سپس فایل copilot-instructions.md را داخل آن قرار دهید. ساختار فایل باید به صورت زیر باشد:
your-project-root/
├── .github/
│   └── copilot-instructions.md
└── (بقیه فایل‌ها و پوشه‌های پروژه)

2. فعال‌سازی قابلیت در ویژوال استودیو:
در ویژوال استودیو، به منوی Tools > Options > GitHub بروید و اطمینان حاصل کنید که گزینه Enable custom instructions to be loaded from .github/copilot-instructions.md files and added to requests علامت خورده است. این گزینه، ویژوال استودیو را قادر می‌سازد تا دستورالعمل‌های سفارشی شما را به درخواست‌های کوپایلوت اضافه کند.

3. افزودن دستورالعمل‌ها به فایل copilot-instructions.md:
پس از فعال‌سازی، می‌توانید دستورالعمل‌های خود را به فایل copilot-instructions.md اضافه کنید. این دستورالعمل‌ها می‌توانند شامل استانداردهای کدنویسی، قراردادهای نام‌گذاری، و شیوه‌های کدنویسی باشند. در ادامه یک نمونه از دستورالعمل‌ها آورده شده است:
# copilot-instructions.md

## استانداردهای کدنویسی (Coding Standards)

### اصول کلی (General Principles)
- **فریم‌ورک هدف:** تمام پروژه‌ها باید .NET 8.0 را هدف قرار دهند. سازگاری با این نسخه الزامی است.
- **زبان:** از زبان C# برای تمام کدها استفاده شود، مگر در موارد خاص.
- **خوانایی:** کدهای واضح و خودتوضیح‌دهنده بنویسید. از نام‌های معنی‌دار برای متغیرها، متدها و کلاس‌ها استفاده کنید.
- **سازگاری:** از قراردادهای نام‌گذاری و قالب‌بندی کد یکسان در کل راهکار (solution) پیروی کنید.
- **کامنت‌گذاری:** کامنت‌های خطی (inline comments) فقط در جایی که برای توضیح منطق پیچیده ضروری است، اضافه شوند.
- **مدیریت خطا (Error Handling):** از مدیریت استثناهای ساختاریافته (structured exception handling) استفاده کنید. از پنهان کردن استثناها (swallowing exceptions) خودداری کرده؛ آن‌ها را ثبت (log) کرده یا مجدداً پرتاب (rethrow) کنید.
- **اصول SOLID:** برای کدهای قابل نگهداری و توسعه‌پذیر، به اصول طراحی SOLID پایبند باشید.
- **تزریق وابستگی (Dependency Injection):** تزریق از طریق سازنده (constructor injection) برای وابستگی‌ها ارجحیت دارد.
- **Async/Await:** از الگوهای برنامه‌نویسی ناهمگام (asynchronous programming patterns) در موارد مناسب، به ویژه برای عملیات وابسته به ورودی/خروجی (I/O-bound operations) استفاده کنید.
- **اعداد جادویی (Magic Numbers):** از اعداد جادویی پرهیز کنید؛ از ثابت‌های نام‌گذاری شده (named constants) یا شمارش‌گرها (enums) استفاده کنید.
- **سازماندهی فایل:** هر فایل باید شامل یک کلاس باشد. فایل‌ها را در پوشه‌های مناسب بر اساس ویژگی (feature) یا لایه (layer) سازماندهی کنید.

### قراردادهای نام‌گذاری (Naming Conventions)
- **کلاس‌ها و واسط‌ها (Interfaces):** PascalCase (مثال: `UserService`، `IUserRepository`)
- **متدها و خصوصیات (Properties):** PascalCase (مثال: `GetUserById`)
- **متغیرها و پارامترها:** camelCase (مثال: `userId`)
- **ثابت‌ها (Constants):** PascalCase (مثال: `DefaultTimeout`)
- **متدهای تست واحد:** از نام‌های توصیفی که سناریو و نتیجه مورد انتظار را نشان می‌دهند، استفاده کنید (مثال: `GetUserById_ReturnsUser_WhenUserExists`)

### سبک کد (Code Style)
- **آکولادها (Braces):** از سبک Allman (آکولادها در خط جدید) استفاده کنید.
- **تورفتگی (Indentation):** از 4 فاصله (spaces) برای هر سطح تورفتگی استفاده کنید.
- **طول خط:** طول خطوط را به 120 کاراکتر محدود کنید.
- **استفاده از عبارت `using`:** عبارت‌های `using` را خارج از فضای نام (namespace) قرار دهید و `using`های استفاده‌نشده را حذف کنید.

---

## استفاده از کوپایلوت (Copilot Usage)

- **هنگام تولید یا اصلاح کد، به این استانداردها پایبند باشید.**
- **الگوها و قراردادهای موجود در راهکار را ترجیح دهید.**
- **کدی تولید کنید که آماده استفاده باشد و به طور یکپارچه در ساختار فعلی جای گیرد.**
- **هرگونه انحراف از این استانداردها را در درخواست‌های پول (pull requests) یا بررسی‌های کد (code reviews) مستند کنید.**

تست و اعتبارسنجی دستورالعمل‌های سفارشی
پس از ذخیره فایل copilot-instructions.md، می‌توانید عملکرد آن را آزمایش کنید. به عنوان مثال، یک متد جدید به HomeController خود در یک پروژه ASP.NET MVC اضافه کنید که از استانداردهای تعریف شده پیروی نمی‌کند:
public IActionResult edit(int UserId)
{
    return View();
}
حالا، روی این متد راست کلیک کرده و گزینه "Ask Copilot" را انتخاب کنید. از کوپایلوت بپرسید که آیا این کد با استانداردهای کدنویسی شما هم‌راستا است یا خیر. همانطور که در تجربه عملی مشاهده می‌شود، کوپایلوت با استفاده از دستورالعمل‌های ارائه شده، به شما اطلاع می‌دهد که کد به طور کامل با استانداردها هم‌راستا نیست و یک مثال اصلاح‌شده را ارائه می‌دهد:
// نمونه کد اصلاح شده توسط کوپایلوت بر اساس دستورالعمل‌ها
public IActionResult Edit(int userId) // "Edit" PascalCase، "userId" camelCase
{
    // ... منطق مربوطه ...
    return View();
}
این قابلیت تضمین می‌کند که هر پاسخ از کوپایلوت، چه برای تولید کد جدید و چه برای بازسازی کد موجود، همیشه با استانداردهای پروژه شما هم‌راستا خواهد بود.

توسعه دستورالعمل‌ها برای تست واحد
دستورالعمل‌های سفارشی را می‌توان فراتر از استانداردهای کدنویسی گسترش داد. به عنوان مثال، می‌توانید شیوه‌های تست واحد را نیز به آن اضافه کنید تا کوپایلوت هنگام نوشتن تست‌ها نیز به شما کمک کند.
---

## استانداردهای تست واحد (Unit Test Standards)

### اصول کلی
- **فریم‌ورک تست:** از NUnit و NSubstitute در صورت نیاز برای پروژه استفاده کنید.
- **نام‌گذاری تست:** از نام‌های متد توصیفی استفاده کنید: `MethodName_StateUnderTest_ExpectedBehavior`.
- **ساختار تست:** در تمام تست‌ها از الگوی Arrange-Act-Assert (AAA) پیروی کنید.
- **ایزولاسیون:** هر تست باید مستقل باشد و به نتیجه تست‌های دیگر وابسته نباشد.
- **ماکینگ (Mocking):** برای وابستگی‌های خارجی (مانند APIها) از ماک (mocks) یا فیک (fakes) استفاده کنید تا اطمینان حاصل شود تست‌ها قطعی (deterministic) هستند.

استفاده از کوپایلوت برای ایجاد دستورالعمل‌ها در پروژه‌های موجود
ایجاد دستورالعمل‌های اولیه برای یک پروژه موجود و بزرگ می‌تواند زمان‌بر باشد. در این موارد، می‌توانید از خود کوپایلوت برای تسریع فرآیند استفاده کنید! به سادگی از کوپایلوت بخواهید که یک فایل copilot-instructions.md را بر اساس شیوه‌ها و استانداردهای موجود در پروژه شما ایجاد کند. این قابلیت به طور قابل توجهی زمان اولیه تنظیم را کاهش می‌دهد و به تیم‌ها اجازه می‌دهد تا به سرعت از مزایای دستورالعمل‌های سفارشی بهره‌مند شوند.

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


مشاهده مطلب اصلی