الاختبار وتصحيح الأخطاء
سير عمل الاختبار وتصحيح الأخطاء مع Verdent
يساعدك Verdent for VS Code على كتابة اختبارات شاملة وتصحيح المشكلات من خلال دورات متعددة المراحل من التوليد والتشغيل والإصلاح، وتحليل الأخطاء، وتحسينات تلقائية لتغطية الاختبار. يمكنه توليد اختبارات وحدة واختبارات تكامل واختبارات شاملة من طرف إلى طرف تتوافق مع إطار وأسلوب الاختبار المستخدم في مشروعك.
ما ستتعلمه
- توليد اختبارات وحدة تغطي الحالات الحدية والسلوك المتوقع
- العمل مع جميع أطر الاختبار الرئيسية (Jest وPytest وJUnit وغيرها)
- إنشاء اختبارات تكامل تتحقق من سير عمل يشمل عدة مكونات
- تحسين تغطية الاختبار عبر تحديد واختبار مسارات الكود غير المغطاة
- تصحيح المشكلات باستخدام تحليل رسائل الأخطاء وتتبع التنفيذ
- تشخيص الأخطاء من تتبعات المكدس وسجلات الأخطاء والسلوك غير المتوقع
المتطلبات الأساسية
قبل الاختبار وتصحيح الأخطاء باستخدام Verdent:
- Visual Studio Code مع تثبيت إضافة Verdent
- قاعدة كود أو مساحة عمل مفتوحة في VS Code
- خطة اشتراك فعّالة في Verdent مع أرصدة متاحة
- إطار اختبار مهيأ في مشروعك (اختياري لتوليد الاختبارات)
كتابة اختبارات الوحدة
يولّد Verdent اختبارات وحدة تتوافق مع إطار وأسلوب الاختبار المستخدم في مشروعك. فهو يحلل الاختبارات الحالية لفهم أنماطك، ثم يولّد اختبارات مع الإعداد والتأكيدات والمحاكاة المناسبة.
مثال:
Write unit tests for the calculateDiscount functionسيقوم Verdent بما يلي:
- فحص تنفيذ الدالة
calculateDiscount - تحديد معاملات الإدخال وقيم الإرجاع
- تحليل الاختبارات الحالية لمطابقة قواعدك (بنية الاختبار، أسلوب التأكيدات، أنماط التسمية)
- توليد اختبارات تغطي:
- المسار السليم: مدخلات صالحة مع مخرجات متوقعة
- الحالات الحدية: القيم الحدية، الصفر، الأرقام السالبة، القيم القصوى
- المدخلات غير الصالحة: null، undefined، أنواع خاطئة
- السلوك المتوقع: التحقق من منطق العمل
بنية الاختبار المولّدة:
ينشئ Verdent اختبارات تتبع أنماط مشروعك:
- تنظيم مجموعة الاختبارات: كتل describe، فئات الاختبار، أو بنية الوحدات
- الإعداد والتنظيف: خطافات before/after مطابقة لاختباراتك الحالية
- التأكيدات: باستخدام مكتبة التأكيد الخاصة بمشروعك (expect وassert وshould وغيرها)
- المحاكاة: مطابقة أنماط المحاكاة لديك (jest.mock وsinon وunittest.mock)
- قواعد التسمية: أسماء اختبارات تتبع أسلوبك المعتمد
دورات التوليد والتشغيل والإصلاح متعددة المراحل:
من أجل اختبار شامل، يستخدم Verdent دورات متعددة المراحل:
- التوليد: إنشاء مجموعة اختبارات أولية
- التشغيل: تنفيذ الاختبارات للتحقق من عملها
- الإصلاح: إصلاح الاختبارات الفاشلة أو تحسين التغطية
- التكرار: التكرار حتى تنجح الاختبارات وتصبح التغطية كافية
يضمن هذا أن الاختبارات لا تُكتب فقط، بل تعمل فعلًا بشكل صحيح مع قاعدة الكود لديك.
يحلل Verdent اختباراتك الحالية لمطابقة قواعدك. كلما كانت أنماط اختباراتك الحالية أكثر اتساقًا، كانت الاختبارات المولّدة من Verdent أكثر توافقًا مع أسلوب مشروعك.
أطر الاختبار المدعومة
يدعم Verdent جميع أطر الاختبار الرئيسية عبر لغات برمجة ومجموعات تقنية مختلفة دون الحاجة إلى إعدادات إضافية.
أطر اختبار الوحدة:
test('sum returns correct result', () => {
expect(sum(2, 3)).toBe(5);
});const assert = require('assert');
describe('sum', () => {
it('returns correct result', () => {
assert.strictEqual(sum(2, 3), 5);
});
});import { describe, it, expect } from 'vitest';
it('sum returns correct result', () => {
expect(sum(2, 3)).toBe(5);
});describe('sum', () => {
it('returns correct result', () => {
expect(sum(2, 3)).toEqual(5);
});
});اختبارات خاصة بالإطار:
- React Testing Library - اختبار مكونات React يركّز على المستخدم
- Vue Test Utils - مكتبة الاختبار الرسمية لـ Vue.js
الاختبار من طرف إلى طرف:
- Cypress - اختبار شامل ومكونات من طرف إلى طرف
- Playwright - اختبار من طرف إلى طرف عبر متصفحات متعددة
- Puppeteer - اختبار Chrome بدون واجهة
- Pytest - إطار اختبار Python الأكثر شيوعًا
- unittest - إطار اختبار Python المدمج
- nose2 - يوسّع unittest بإضافات
- doctest - اختبارات مضمّنة في docstrings
يولّد Verdent اختبارات مع fixtures مناسبة، والمعاملة، وأنماط التأكيد المطابقة لأسلوب اختبار Python لديك.
- JUnit - إطار اختبار Java القياسي (JUnit 4، JUnit 5)
- TestNG - إطار اختبار بميزات متقدمة
- Mockito - إطار محاكاة لـ Java
- AssertJ - مكتبة تأكيدات سلسة
ينشئ Verdent اختبارات مع التعليقات التوضيحية وأساليب دورة الحياة والتأكيدات وفق قواعد اختبار Java.
- RSpec (Ruby) - إطار تطوير موجّه بالسلوك
- PHPUnit (PHP) - إطار اختبار الوحدة لـ PHP
- Go testing (Go) - حزمة الاختبار المدمجة في Go
- xUnit (C#/.NET) - إطار اختبار لـ .NET
- Catch2 (C++) - إطار اختبار حديث لـ C++
يتكيف Verdent مع أنماط الاختبار الخاصة بلغتك، ويولّد اختبارات تتوافق مع قواعد مشروعك.
يتعرف Verdent على إطار الاختبار الخاص بك من إعدادات مشروعك واختباراتك الحالية، ويولّد تلقائيًا اختبارات تتوافق مع إعدادك.
توليد اختبارات التكامل
يولّد Verdent اختبارات تكامل تتحقق من كيفية عمل عدة مكونات أو خدمات أو وحدات معًا. فهو ينشئ اختبارات تحاكي سير العمل الحقيقي بما في ذلك تفاعلات API، وعمليات قاعدة البيانات، وتدفقات المصادقة، ورحلات المستخدم متعددة الخطوات.
مثال:
Write integration tests for the user registration flowيولّد Verdent اختبارات تتحقق من التدفق الكامل:
- إرسال النموذج: يرسل المستخدم نموذج التسجيل ببيانات صالحة
- التحقق: يتحقق الخادم من تنسيق البريد الإلكتروني، وقوة كلمة المرور، واكتمال البيانات
- الإدراج في قاعدة البيانات: يُنشأ سجل المستخدم في قاعدة البيانات
- إرسال البريد الإلكتروني: يُرسل بريد التأكيد (محاكى أو فعلي)
- تسجيل الدخول الناجح: يمكن للمستخدم الجديد تسجيل الدخول فورًا ببيانات اعتماده
بنية اختبار التكامل:
ينشئ Verdent اختبارات تكامل تتضمن:
- إعداد الاختبار: تزويد قاعدة البيانات بالبيانات، وتهيئة الخدمات، وإنشاء بيانات اختبار
- محاكاة سير العمل: عمليات متعددة الخطوات بالتسلسل
- التحقق من الحالة: فحص حالة قاعدة البيانات، واستجابات API، والآثار الجانبية
- محاكاة الخدمات الخارجية: خدمات البريد الإلكتروني، بوابات الدفع API، والتكاملات مع أطراف ثالثة
- تنظيف بعد الاختبار: تنظيف بيانات الاختبار، التراجع عن قاعدة البيانات، إيقاف الخدمات
أمثلة على سيناريوهات الاختبار:
Write integration tests for the checkout and payment processيختبر Verdent:
- إضافة عناصر إلى سلة التسوق
- تطبيق رموز الخصم
- حساب الإجماليات مع الضريبة والشحن
- معالجة الدفع (مع بوابة دفع محاكاة)
- إنشاء سجل طلب في قاعدة البيانات
- إرسال بريد تأكيد
- تحديث المخزون
عزل الاختبارات:
يضمن Verdent عزل اختبارات التكامل بشكل صحيح:
- تبدأ كل اختبار بحالة قاعدة بيانات نظيفة
- تُحاكى استدعاءات الخدمات الخارجية لمنع الآثار الجانبية
- يمكن تشغيل الاختبارات بأي ترتيب دون اعتماديات
- يحدث التنظيف حتى في حال فشل الاختبارات
تستفيد اختبارات التكامل من بيئات اختبار معزولة، ويمكن لـ Verdent المساعدة في إعداد بيانات ثابتة لقاعدة البيانات ومحاكاة الخدمات الخارجية.
تتحقق اختبارات التكامل من أن المكونات تعمل معًا بشكل صحيح. وهي أكثر تعقيدًا من اختبارات الوحدة، لكنها توفر ثقة أعلى بأن سير العمل الواقعي يعمل كما هو متوقع.
تحسين تغطية الاختبار
يحلل Verdent قاعدة الكود لديك لتحديد الدوال والفروع والحالات الحدية غير المختبرة، ثم يولّد اختبارات لتحسين التغطية. فهو يفحص مجموعة اختباراتك الحالية ويحدد الثغرات حيث لا تُختبر مسارات الكود.
مثال:
Analyze test coverage and write tests for uncovered code paths in the payment moduleسيقوم Verdent بما يلي:
- تحليل الاختبارات الحالية: فحص ما يُختبر حاليًا
- تحديد ثغرات التغطية: العثور على دوال محددة، وفروع شرطية، ومسارات معالجة الأخطاء، وحالات حدية تفتقر إلى اختبارات
- توليد الاختبارات الناقصة: إنشاء اختبارات تستهدف الكود غير المغطى
- التحقق من تحسّن التغطية: تشغيل الاختبارات للتأكد من زيادة التغطية
ما يحدده Verdent:
- الدوال غير المختبرة: دوال بلا أي تغطية اختبارية على الإطلاق
- الفروع الشرطية: عبارات if/else حيث لا يُختبر أحد الفرعين
- مسارات معالجة الأخطاء: كتل try/catch أو ردود نداء الأخطاء دون اختبارات فشل
- الحالات الحدية: القيم الحدية، معالجة null/undefined، وتحويل الأنواع
- نقاط التكامل: استدعاءات API، وعمليات قاعدة البيانات، وتفاعلات الخدمات الخارجية
مثال على تحسين التغطية:
Improve test coverage for the UserService classيحدد Verdent:
- لدى
getUserByIdاختبارات للمعرّفات الصالحة لكن ليس للمعرّفات غير الصالحة updateUserينقصها اختبارات لفشل التحققdeleteUserينقصها اختبارات لفحوصات التفويض- مسارات معالجة الأخطاء في
createUserغير مختبرة
ثم يولّد اختبارات تستهدف هذه الثغرات تحديدًا، مما يرفع التغطية من 65% إلى 95%.
مقاييس التغطية:
يساعدك Verdent على الوصول إلى نسب تغطية أعلى واكتشاف أخطاء محتملة في الكود غير المختبر سابقًا:
- تغطية الأسطر: نسبة أسطر الكود التي نفّذتها الاختبارات
- تغطية الفروع: نسبة الفروع الشرطية التي جرى اختبارها
- تغطية الدوال: نسبة الدوال التي لديها اختبار واحد على الأقل
- تغطية العبارات: نسبة العبارات التي نُفّذت
التصحيح باستخدام Verdent
يساعد Verdent في التصحيح عبر تحليل رسائل الأخطاء، وتتبع تدفق التنفيذ، وتحديد الأسباب الجذرية، واقتراح الإصلاحات. الصق سجلات الأخطاء، أو صف السلوك غير المتوقع، أو اطلب من Verdent التحقيق في مشكلات محددة.
صف ما هو خاطئ وما كنت تتوقعه:
This function returns undefined instead of the user object. Debug it.سيقوم Verdent بما يلي:
- قراءة تنفيذ الدالة
- تتبع تدفق التنفيذ
- تحديد أين ينحرف مسار الكود (عبارة return مفقودة، شرط غير صحيح، مشكلة في async/await)
- اقتراح إصلاح مع شرح
- اقتراح حالات اختبار لمنع تكرار المشكلة
مثال:
The login form redirects to the home page even when credentials are invalidسيقوم Verdent بما يلي:
- فحص منطق إرسال نموذج تسجيل الدخول
- تتبع تدفق المصادقة
- تحديد الخطأ (يحدث إعادة التوجيه قبل اكتمال التحقق غير المتزامن)
- اقتراح إصلاح (انتظار التحقق قبل إعادة التوجيه)
اطلب تحليل الأداء:
The product search is slow when the database has 10,000+ productsسيقوم Verdent بما يلي:
- تحليل تنفيذ استعلام البحث
- تحديد عدم الكفاءة (استعلامات N+1، فهرس قاعدة بيانات مفقود، خوارزمية غير فعالة)
- اقتراح تحسين (إضافة فهرس لقاعدة البيانات، تجميع الاستعلامات، تخزين النتائج مؤقتًا)
يساعد تصحيح الأداء في تحديد الاختناقات في الخوارزميات، أو استعلامات قاعدة البيانات، أو استجابات API التي تبطئ تطبيقك.
فهم كيفية تنفيذ الكود:
Why does this API endpoint return a 500 error when the email parameter is missing?سيقوم Verdent بما يلي:
- تتبع معالجة الطلب من نقطة النهاية إلى التحقق ثم قاعدة البيانات
- تحديد مكان حدوث الخطأ (الوصول إلى خاصية عنصر غير معرّف)
- شرح سبب حدوث الخطأ (فحص null مفقود قبل الوصول إلى الخاصية)
- اقتراح إصلاح وقائي (التحقق من المعاملات قبل استخدامها)
يساعدك تتبع تدفق التنفيذ على فهم المسار الذي يسلكه كودك ومكان انحرافه عن السلوك المتوقع.
الصق رسائل الأخطاء أو تتبعات المكدس مباشرة في المحادثة. يحلل Verdent الخطأ، ويحدد موقع الكود المسبب للمشكلة، ويشرح ما حدث مع مسارات الملفات وأرقام الأسطر المحددة.
التشخيص من رسائل الأخطاء والسجلات
الصق رسائل الأخطاء أو تتبعات المكدس أو ملفات السجل مباشرة في المحادثة. يحلل Verdent الخطأ، ويحدد ملف المصدر ورقم السطر، ويشرح السبب، ويقترح إصلاحًا.
الصق رسائل الأخطاء وتتبعات المكدس:
TypeError: Cannot read property 'name' of undefined
at UserProfile.render (UserProfile.jsx:45)
at processComponent (react-dom.js:2103)الصق هذا في Verdent:
I'm getting this error: [paste stack trace]سيقوم Verdent بما يلي:
- تحديد نوع الخطأ (TypeError من الوصول إلى null/undefined)
- تحديد السطر الدقيق (
UserProfile.jsx:45) - قراءة الكود في ذلك الموقع
- شرح سبب حدوثه (عنصر user غير معرّف قبل تحميل البيانات)
- اقتراح إصلاحات:
- إضافة فحص null:
if (!user) return <Loading /> - استخدام optional chaining:
user?.name - ضمان تحميل البيانات قبل عرض المكون
- إضافة فحص null:
الصق ملفات السجل أو مخرجات وحدة التحكم للتحليل:
Analyze these logs and tell me why the API requests are failing:
[paste 50 lines of log output]سيقوم Verdent بما يلي:
- فحص السجلات بحثًا عن أنماط الأخطاء
- تحديد فشل المصادقة، أو انتهاء مهلة الشبكة، أو أخطاء قاعدة البيانات
- تتبع تسلسل الأحداث المؤدية إلى الفشل
- اقتراح إصلاحات بناءً على نمط الخطأ
يساعد تحليل السجلات في تحديد الأنماط عبر حالات فشل متعددة وفهم تسلسل الأحداث المؤدية إلى الأخطاء.
للمشكلات المعقدة، يستخدم Verdent تصحيحًا متعدد الخطوات:
- تحليل سجلات الأخطاء لتحديد نقطة الفشل
- قراءة الكود ذي الصلة لفهم التنفيذ
- تتبع تدفق التنفيذ لإيجاد مكان الخلل
- اقتراح إصلاحات مع أمثلة كود
- توليد اختبارات لمنع تكرار المشكلة
مثال:
The shopping cart total is sometimes incorrect. Here are the error logs: [paste logs]سيقوم Verdent بما يلي:
- تحليل السجلات وتحديد وقت حدوث الخطأ (عند تطبيق رموز الخصم)
- قراءة منطق حساب الخصم
- تحديد الخطأ (يُحسب الخصم قبل الضريبة، وليس بعدها)
- اقتراح إصلاح (إعادة ترتيب خطوات الحساب)
- اقتراح حالات اختبار (سلة مع خصم، سلة مع ضريبة، سلة مع كليهما)
أفضل الممارسات
ولّد الاختبارات مبكرًا
اكتب الاختبارات أثناء تطوير الميزات، وليس بعد الانتهاء منها. يمكن لـ Verdent توليد اختبارات فور إنشاء دوال أو مكونات جديدة.
استخدم الاختبارات الحالية كدليل أسلوب
يطابق Verdent أنماط الاختبار في مشروعك. حافظ على بنية اختبار متسقة كي يولّد Verdent اختبارات متوافقة مع قواعدك.
اطلب اختبارات للحالات الحدية صراحةً
اطلب من Verdent اختبار الشروط الحدية، وسيناريوهات الأخطاء، والمدخلات غير المعتادة: "اكتب اختبارات تشمل الحالات الحدية للمدخلات غير الصالحة والقيم الحدية."
الصق رسائل الأخطاء مباشرة
لا تُعِد صياغة الأخطاء. الصق تتبع المكدس كاملًا للحصول على تشخيص دقيق وحل أسرع.
صف السلوك المتوقع مقابل الفعلي
عند التصحيح، اذكر بوضوح ما توقعت حدوثه وما حدث فعليًا. يساعد هذا السياق Verdent على تحديد السبب الجذري.
استخدم الاختبار متعدد المراحل للميزات المعقدة
بالنسبة للميزات الحساسة، اطلب توليد اختبارات شاملة بدورات متعددة المراحل: "ولّد اختبارات شاملة لوحدة الدفع وتحقق من نجاحها جميعًا."
اختبر بعد إعادة الهيكلة
بعد إعادة هيكلة الكود، اطلب اختبارات للتحقق من الحفاظ على الوظائف: "ولّد اختبارات للتحقق من أن وحدة المصادقة المُعاد هيكلتها تعمل بشكل صحيح."
اجمع بين التصحيح وتوليد الاختبارات
بعد إصلاح خطأ، اطلب اختبارًا لمنع تكراره: "اكتب اختبارًا يضمن عدم حدوث هذا الخطأ مرة أخرى."