إنتقل إلى المحتوى الرئيسي

تحليل التأثير

فهم التأثيرات المتتالية لتغييرات الكود قبل إجرائها.

ما هو تحليل التأثير؟

يجيب تحليل التأثير على السؤال: "إذا غيرت هذا الملف، ماذا سيتأثر أيضاً؟"

هذا يساعدك على:

  • التخطيط للتغييرات بعناية أكبر
  • تحديد الاختبارات المطلوبة
  • تجنب الأعطال غير المتوقعة
  • تقدير الجهد للتغييرات

تشغيل تحليل التأثير

واجهة الويب

  1. حدد مشروعاً
  2. انقر على ملف في التصور
  3. انقر تحليل التأثير

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 موقع استدعاء)

أفضل الممارسات

قبل إجراء التغييرات

  1. شغّل تحليل التأثير على الملفات التي تخطط لتعديلها
  2. راجع سلسلة التبعيات - افهم نطاق التأثير
  3. حدد الاختبارات المتأثرة - تأكد من تحديثها
  4. تحقق من التبعيات الدائرية - تضخم التأثير

تقليل التأثير

  1. استخدم الواجهات - اعتمد على التجريد
  2. طبق مبادئ SOLID - المسؤولية الواحدة تحد من التأثير
  3. افصل الوحدات - قلل التبعيات المباشرة
  4. اكتب طبقات 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