لقد أتيحت لي الفرصة مؤخرًا للتعمق في برنامج Early، وهو وكيل ذكاء اصطناعي مصمم لإنشاء اختبار الوحدة تلقائيًا. باعتباري شخصًا يعمل بانتظام مع TypeScript وExpressoTS Framework، كنت حريصًا على رؤية كيف يمكن لـ Early تبسيط سير العمل الخاص بي. قررت اختبار ملحق vscode الذي قاموا ببنائه على مكتبة NPM الجديدة التي كنت أقوم بتطويرها والتي تسمى @expressots/share.
أول ما أدهشني في وقت مبكر هو قدرته على إنشاء اختبارات الوحدة تلقائيًا لقاعدة التعليمات البرمجية الحالية الخاصة بي. بدلاً من صياغة الاختبارات من الصفر، يمكنني التركيز على تحسين الاختبارات التي تم إنشاؤها وتحسين قوة الكود الخاص بي وقابليته للاختبار. أدى هذا التحول إلى تسريع عملية التطوير بشكل كبير. الجانب الآخر المثير للاهتمام الذي لاحظته هو أن 83% من الكود الذي تم إنشاؤه لم أجري أي تعديل، لقد نجح الأمر خارج الصندوق وزاد من تغطية الكود الخاص بي. وفر لي الكثير من الوقت.
في 8.5 ساعة فقط، تمكنت من:
كانت حقيقة قدرتي على إنجاز كل هذا في يوم واحد أمرًا رائعًا. السيناريو المثالي في اختبار الوحدة هو القيام بذلك أثناء تطوير وظائفك فعليًا. لقد فعلت ذلك بعد أن كان لدي مكتبة بالفعل، لذلك كانت بعض التعديلات ضرورية لجعل الكود قابلاً للاختبار.
الإنشاء التلقائي لاختبارات حالة الحافة. على سبيل المثال، تم إنشاء اختبارات الوحدة للسيناريوهات التي تتضمن سلاسل فارغة، حتى عندما كانت المعلمات مطلوبة:
export function printSuccess(message: string, component: string): void { stdout.write(chalk.green(`${message}:`, chalk.bold(chalk.white(`[${component}] ✔️\n`)))); }
في البداية، لم أكن لأقوم بإنشاء اختبارات للسلاسل الفارغة في مثل هذه الوظيفة المباشرة. ومع ذلك، عزز نهج إيرلي ممارسات البرمجة الدفاعية، مما دفعني إلى التعامل مع الحالات المتطورة التي ربما كنت قد تجاهلتها.
أثناء تحسين الاختبارات التي تم إنشاؤها، واجهت مشكلة عدم تطابق النوع:
المشكلة: jest.fn() لا تُرجع أيًا منها، لكن Process.exit لا تُرجع أبدًا، مما يؤدي إلى عدم تطابق النوع في TypeScript.
الحل: قم بتعديل النموذج ليتوافق مع توقيعprocess.exit، مع ضمان صحة النوع.
دفعني هذا الاكتشاف إلى تعديل الكود الخاص بي لتحسين أمان الكتابة، مع تسليط الضوء على كيف يمكن لـ Early المساعدة في تحديد المشكلات الدقيقة التي قد تمر دون أن يلاحظها أحد.
على الرغم من التجربة الإيجابية بشكل عام، واجهت بعض التحديات التي، إذا تمت معالجتها، يمكن أن تعزز سهولة استخدام Early:
استخدام Jest 29.7
expect(Compiler.loadConfig()).rejects.toThrowError("process.exit() was called with code 1");
// نسخة مصححة
expect(Compiler.loadConfig()).rejects.toThrow("process.exit() was called with code 1");
ملاحظة: قد يكون إنشاء اختبارات لكل إدخال ممكن، بما في ذلك السلاسل الفارغة، أمرًا مبالغًا فيه في بعض الأحيان.
اقتراح: تقديم خيارات لتخصيص مستوى إنشاء الاختبار، مما يسمح للمطورين بالاشتراك في اختبارات البرمجة الدفاعية حسب الحاجة.
رؤية نتائج الاختبار: اضطررت إلى التبديل بين Early وJest لمعرفة الاختبارات التي نجحت أو فشلت.
حالة شجرة الملف: ينهار التسلسل الهرمي للمشروع في وقت مبكر عند التبديل مرة أخرى من التطبيقات الأخرى، مما يتطلب مني إعادة فتح المجلدات بشكل متكرر.
اقتراح: قم بتحسين واجهة المستخدم لعرض نتائج الاختبار في وقت مبكر، مما يعكس بنية Jest. سيؤدي الحفاظ على حالة شجرة الملفات أيضًا إلى تحسين تجربة المستخدم.
ملاحظة: يمكن أن يؤدي استخدام أي نوع في النماذج إلى عدم تطابق الكتابة وربما أخطاء في القناع.
اقتراح: قم بتحسين الإنشاء الوهمي لاستخدام التوقيعات الدقيقة، وتعزيز أمان الكتابة بشكل أفضل وتقليل الحاجة إلى التصحيحات اليدوية.
بشكل عام، كانت تجربتي مع إيرلي إيجابية للغاية. أدت الأداة إلى تسريع عملية اختبار الوحدة بشكل كبير، مما سمح لي بالتركيز على تحسين الاختبارات بدلاً من كتابتها من الصفر. كما شجعني ذلك على النظر في الحالات المتطورة وتحسين قوة الكود الخاص بي.
مجالات التحسين بسيطة نسبيًا وتدور حول تحسين سهولة الاستخدام والتخصيص. معالجة هذه الأمور من شأنها أن تجعل الأداة حليفًا أكثر قوة في تطوير البرمجيات.
مجد للفريق المبكر على عملهم الممتاز! أنا متحمس لرؤية كيفية تطور الأداة وسأكون سعيدًا بمواصلة تقديم التعليقات للمساعدة في تحسينها بشكل أكبر.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3