گذار از تولید کد به مهندسی عاملمحور
نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۶/۰۹ ۰۸:۴۹
آدرس: www.dntips.ir
چکیده: ظهور دستیاران هوش مصنوعی مبتنی بر عامل (Agentic AI) مانند ابزارهای کار با مخزن کد (مانند Claude Code و GitHub Copilot Workspace)، پارادایم توسعه نرمافزار را از «تولید قطعهکد ایزوله» به «تحلیل، برنامهریزی و اجرای مستقل در بستر مخزن کد» تغییر داده است. این مقاله به بررسی شیوه استفاده بهینه از هوش مصنوعی برای عیبیابی، بهینهسازی کارایی و نگهداری معماری در سامانههای مبتنی بر ASP.NET Core میپردازد. با تکیه بر متدولوژی «اول برنامهریزی، سپس پیادهسازی» (Plan-First Workflow) و اعمال ساختاریافتهی قراردادهای توسعه تیمی از طریق پروندههای پیکربندی زمینه (مانند CLAUDE.md)، نشان داده میشود که چگونه تخصص مهندس نرمافزار، نقش هوش مصنوعی را از یک تولیدکننده کد ساده به یک همکار پویا در چرخه عیبیابی و بازبینی کد ارتقا میدهد."یک اینترفیس به نام IOrderService بساز و این متد را اضافه کن."End-point مربوط به گزارش سفارشها (Orders) برای حسابهایی با سابقه بالا با افت عملکرد شدید مواجه شده است. بدون اعمال هیچ تغییری، ابتدا مسیر کامل درخواست (Request Pipeline) را شامل Controller، لایه Application/MediatR، کوئریهای EF Core و نگاشتها بررسی کن و ریشه افت کارایی را گزارش بده.
[ فاز ۱: کاوش و مدلسازی فرضیه ] ──> [ فاز ۲: تایید برنامه اقدام و تست ] ──> [ فاز ۳: پیادهسازی مقید و اجرای تستها ]
فایلی را ویرایش نکن. گزارشی شامل موارد زیر ارائه بده: ۱. ساختار فراخوانی متدها و وابستگیها در مسیر این درخواست، ۲. کوئریهای صادرشده به دیتابیس (بررسی رفتارهای N+1 یا Lack of Projection)، ۳. فرضیه اصلی در خصوص گلوگاه کارایی، ۴. پیشنهاد کمریسکترین تغییر ممکن به همراه نقاط شکست احتمالی (Breaking Risks)
// کد شناساییشده توسط عامل در مسیر پردازش
var orders = await _dbContext.Orders
.Include(o => o.Items)
.Where(o => o.CustomerId == customerId)
.ToListAsync(cancellationToken);
// سپس نگاشت دستی در حافظه انجام گرفته است:
var result = orders.Select(o => new OrderDto(o.Id, o.TotalAmount, o.Items.Count)).ToList();Select یا بهینهسازی کوئری بدون تغییر اینترفیسهای لایه بالاتر):// تغییر پیشنهادی و تایید شده توسط برنامهنویس
var result = await _dbContext.Orders
.Where(o => o.CustomerId == customerId)
.Select(o => new OrderDto(
o.Id,
o.TotalAmount,
o.Items.Count
))
.AsNoTracking()
.ToListAsync(cancellationToken);تغییرات تایید شدند. تغییر را با شرایط زیر پیادهسازی کن:
- تغییر صرفاً به متد هدف محدود باشد؛ کدهای نامرتبط را بازآرایی (Refactor) نکن.
- یک آزمون یکپارچهسازی (Integration Test) با استفاده از WebApplicationFactory برای پوشش این سناریو اضافه کن.
- تستهای مرتبط را با دستور `dotnet test` اجرا کن.
- در صورت بروز خطا، علت ریشهای را بررسی کن و هرگز با حذف یا تضعیف تستها مشکل را دور نزن.
| ویژگی | تولید کد متنی (Traditional CodeGen) | مهندسی عاملمحور (Agentic Engineering) |
| بستر اجرا | ایزوله در جعبهمتن چت | دسترسی به ساختار درختی پروژه و ترمینال |
| آگاهی از بافتار (Context) | محدود به کدهای کپیشده توسط کاربر | دسترسی به کل Solution، پروژهها و ارجاعات |
| حلقه بازخورد (Feedback Loop) | دستی (توسط برنامهنویس) | خودکار (تغییر کد -> اجرای تست/بیلد -> اصلاح) |
| نقش توسعهدهنده | کپیکننده و دیباگکننده خروجی | هدایتکننده استراتژی و تصمیمگیرنده نهایی |
CLAUDE.md)CLAUDE.md یا .github/copilot-instructions.md) است. این فایل به مثابه «معماری و فرهنگ کدنویسی خوانا برای ماشین» عمل میکند:# راهنمای مهندسی سامانه (Architecture & Conventions) ## معماری و ساختار - از الگوی Clean Architecture و لایهبندی Clean/CQRS با کتابخانه MediatR پیروی کنید. - کنترلرها (Controllers) یا اندپوینتهای Minimal API باید صرفاً نقش هدایتکننده داشته باشند و هیچ منطق تجاری در آنها پیاده نشود. - در کوئریهای خواندنی EF Core همواره از `.AsNoTracking()` و Projection مستقیم (`.Select()`) استفاده کنید. ## بستهها و ابزارها - بدون هماهنگی و توجیه فنی، بسته NuGet جدیدی به فایلهای `.csproj` اضافه نکنید. - مدیریت لاگها باید ساختاریافته (Structured Logging) و با استفاده از الگوهای پیشفرض `ILogger` باشد. ## کیفیت و آزمونپذیری - هیچ اندپوینت جدیدی بدون نوشتن تست یکپارچگی (با استفاده از `WebApplicationFactory<Program>`) پذیرفته نمیشود. - پیش از اعلام پایان کار، اجرای دستور `dotnet test` الزامی است.
تغییرات اعمالشده در Commit اخیر را به عنوان یک مهندس ارشد نرمافزار بازبینی کن.
مستقیماً بر روی این موارد تمرکز داشته باش:
- رخدادهای پیشبینینشده در همزمانی (Concurrency / Race Conditions)
- مدیریت نشت حافظه (Memory Allocation) و رفتارهای ناخواسته در نگاشتها
- کنترل صحیح CancellationToken در تمام متدهای Asynchronous
- مسایل امنیتی بالقوه (Injections, IDOR)
- موارد نادیدهگرفتهشده در آزمونها (Edge Cases)
بدون اعمال هیچ تغییری، صرفاً گزارش نقد را ارائه کن.