تحليل التأثير
فهم التأثيرات المتتالية لتغييرات الكود قبل إجرائها.
ما هو تحليل التأثير؟
يجيب تحليل التأثير على السؤال: "إذا غيرت هذا الملف، ماذا سيتأثر أيضاً؟"
هذا يساعدك على:
- التخطيط للتغييرات بعناية أكبر
- تحديد الاختبارات المطلوبة
- تجنب الأعطال غير المتوقعة
- تقدير الجهد للتغييرات
تشغيل تحليل التأثير
واجهة الويب
- حدد مشروعاً
- انقر على ملف في التصور
- انقر تحليل التأثير
CLI
> /analyze src/services/user.ts
API
curl -X POST https://api.archicore.io/api/v1/projects/:id/analyze \
-H "Authorization: Bearer مفتاح_API_الخاص_بك" \
-d '{"path": "src/services/user.ts"}'
فهم النتائج
تحليل التأثير لـ src/services/user.ts
╭─────────────────────────────────────── ──╮
│ التبعيات المباشرة (5) │
├─────────────────────────────────────────┤
│ → src/utils/crypto.ts │
│ → src/db/models/user.ts │
│ → src/config/auth.ts │
│ → src/types/user.ts │
│ → src/utils/validation.ts │
╰─────────────────────────────────────────╯
╭─────────────────────────────────────────╮
│ المعتمدون - سيتأثرون (8) │
├─────────────────────────────────────────┤
│ ← src/controllers/auth.ts │
│ ← src/controllers/profile.ts │
│ ← src/controllers/admin.ts │
│ ← src/middleware/auth.ts │
│ ← src/services/session.ts │
│ ← src/api/routes/users.ts │
│ ← tests/user.test.ts │
│ ← tests/auth.test.ts │
╰─────────────────────────────────────────╯
مستوى المخاطر: متوسط
الاختبارات المتأثرة: 2
مستويات التأثير
| المستوى | الوصف | الإجراء |
|---|---|---|
| منخفض | معتمدون قليلون، تغيير معزول | تابع مع المراجعة القياسية |
| متوسط | معتمدون متعددون، مخاطر معتدلة | يُنصح باختبارات شاملة |
| عالي | معتمدون كثيرون، وحدة أساسية | اختبارات مكثفة، ضع في الاعتبار النشر التدريجي |
| حرج | يؤثر على المسارات الحرجة | مراجعة إضافية، يُنصح بـ feature flags |
محاكاة التغييرات
معاينة تأثير تغيير مقترح:
> /simulate
صف تغييرك: إضافة معامل جديد إلى UserService.getUser()
نتائج المحاكاة:
الملفات التي تحتاج تحديثات:
1. src/controllers/auth.ts:34 - يستدعي getUser()
2. src/controllers/profile.ts:12 - يستدعي getUser()
3. src/services/session.ts:45 - يستدعي getUser()
الاختبارات التي تحتاج تحديثات:
1. tests/user.test.ts - 5 حالات اختبار تستدعي getUser()
2. tests/auth.test.ts - 3 حالات اختبار تستدعي getUser()
الجهد المقدر: متوسط (8 ملفات، 15 موقع استدعاء)
أفضل الممارسات
قبل إجراء التغييرات
- شغّل تحليل التأثير على الملفات التي تخطط لتعديلها
- راجع سلسلة التبعيات - افهم نطاق التأثير
- حدد الاختبارات المتأثرة - تأكد من تحديثها
- تحقق من التبعيات الدائرية - تضخم التأثير
تقليل التأثير
- استخدم الواجهات - اعتمد على التجريد
- طبق مبادئ SOLID - المسؤولية الواحدة تحد من التأثير
- افصل الوحدات - قلل التبعيات المباشرة
- اكتب طبقات facade - أخفِ تفاصيل التنفيذ
مثال: إعادة هيكلة آمنة
// قبل: تبعية مباشرة
// تغيير User يؤثر على جميع المستهلكين
class UserController {
constructor(private userService: UserService) {}
}
// بعد: تبعية على الواجهة
// تغيير تنفيذ UserService لا يؤثر على المستهلكين
interface IUserService {
getUser(id: string): Promise<User>;
}
class UserController {
constructor(private userService: IUserService) {}
}
تكامل CI/CD
أضف تحليل التأثير إلى خط الأنابيب الخاص بك:
# .gitlab-ci.yml
impact-analysis:
script:
- archicore analyze --changed-files
- if [ $IMPACT_LEVEL == "critical" ]; then
echo "تم اكتشاف تأثير حرج - يتطلب مراجعة إضافية";
exit 1;
fi