- بواسطة x32x01 ||
لو بتستخدم أدوات الذكاء الاصطناعي في كتابة الكود، فـ Test Driven Development (TDD) بقى من المهارات المهمة جدًا لأي Software Engineer.
الفكرة ببساطة إنك ما تبدأش بكتابة الكود مباشرة. الأول تفهم الـ Business Context، وتحدد الـ Use Cases والـ Scenarios والـ Edge Cases، وبعدها تكتب Tests واضحة تحدد السلوك المطلوب. ثم تستخدم الكود لتنفيذ هذه المتطلبات بأقل تعقيد ممكن.
وده مهم بشكل خاص مع AI؛ لأن الأداة ممكن تكتب كود بسرعة جدًا، لكن السرعة في كتابة الكود مش معناها إن الكود هو الحل الصحيح.
بشكل مبسط، الدورة المعتادة في TDD تكون:
لكن المشكلة إن كتابة الكود ليست هي الجزء الأصعب دائمًا.
الجزء الأصعب هو تحديد:
بدل ما تقول لأداة AI: "اكتب لي نظام حجز"، الأفضل أن تحدد لها الـ Use Cases والـ Scenarios والـ Constraints والـ Tests التي يجب أن ينجح فيها الكود.
بكده أنت بتحدد ما الذي يجب أن يفعله البرنامج، وتترك للأداة جزءًا من مهمة تنفيذ الحل.
تخيل إنك بتطور نظام لشركة فيها حجوزات.
قبل ما تكتب أي كود، لازم تعرف مثلًا:
لما تحاول تحويلها إلى Tests، هتكتشف بسرعة الأماكن اللي أنت مش فاهم فيها النظام بشكل كافٍ.
وده من أهم أدوار TDD: تحويل فهمك للمشكلة إلى سلوك قابل للاختبار.
مثلًا: "المستخدم يدخل رقم صحيح، والنظام يرجع النتيجة."
لكن ماذا لو:
وده بيساعدك على اكتشاف المشاكل في تصميم الحل قبل ما تتحول إلى Bugs داخل النظام.
بدل ما تطلب منها: "اكتب لي الكود كاملًا."
ابدأ بتحديد المطلوب:
أنت تحدد السلوك المطلوب، والـ AI يساعدك في التنفيذ.
الكود ممكن:
بعد ما تحصل على الحل، اسأل نفسك:
الهدف هو أبسط كود يحقق الـ Requirements بشكل صحيح وقابل للصيانة.
المشكلة إنك كتبت كود أكثر مما تحتاج.
وده بيظهر بشكل أكبر مع أدوات AI، لأنها تقدر تقترح حلولًا كبيرة جدًا لمشكلة بسيطة.
ممكن تلاقي نفسك بعد فترة بتعمل الآتي:
"احذف الجزء ده."
"ممكن نشيل الـ Helper ده."
"ليه عندنا Class كامل للوظيفة دي؟"
"الـ Function دي ممكن تكون أبسط."
وهنا تظهر مهارة مهمة جدًا: معرفة ما الذي لا تحتاج إلى كتابته أصلًا.
كلما كان الـ Requirements والـ Tests أوضح، أصبح من الأسهل تقييم الكود الذي ينتجه AI بدل قبول كل ما يكتبه.
TDD مش معناه إنك لازم تختبر كل سطر كود أو تكتب عشرات الاختبارات لمجرد زيادة التغطية.
الأهم هو اختبار السلوك المهم للنظام.
ركز على:
لما الأداة تقدر تكتب الكود بسرعة، تصبح قيمة المطور أكبر في قدرته على:
وده يمكن تلخيصه في فكرة بسيطة:
AI يستطيع مساعدتك في كتابة الكود، لكن أنت من يحدد ما يجب أن يفعله الكود أصلًا.
الفكرة ببساطة إنك ما تبدأش بكتابة الكود مباشرة. الأول تفهم الـ Business Context، وتحدد الـ Use Cases والـ Scenarios والـ Edge Cases، وبعدها تكتب Tests واضحة تحدد السلوك المطلوب. ثم تستخدم الكود لتنفيذ هذه المتطلبات بأقل تعقيد ممكن.
وده مهم بشكل خاص مع AI؛ لأن الأداة ممكن تكتب كود بسرعة جدًا، لكن السرعة في كتابة الكود مش معناها إن الكود هو الحل الصحيح.
ما هو Test Driven Development؟
Test Driven Development أو TDD هو أسلوب لتطوير البرمجيات يعتمد على كتابة الاختبارات قبل كتابة الكود الذي ينفذ الوظيفة المطلوبة.بشكل مبسط، الدورة المعتادة في TDD تكون:
- تكتب Test يصف السلوك المطلوب.
- تشغل الـ Test وتجد أنه يفشل.
- تكتب أقل قدر ممكن من الكود لجعل الـ Test ينجح.
- تحسن وتنظف الكود بدون تغيير السلوك المطلوب.
- تنتقل إلى السيناريو التالي.
لماذا TDD مهم مع استخدام AI في البرمجة؟
أدوات AI أصبحت قادرة على كتابة كمية كبيرة من الكود خلال وقت قصير جدًا.لكن المشكلة إن كتابة الكود ليست هي الجزء الأصعب دائمًا.
الجزء الأصعب هو تحديد:
- ماذا يجب أن يفعل النظام؟
- ماذا يحدث في الحالات غير المتوقعة؟
- ما الـ Business Rules التي يجب الالتزام بها؟
- ما الذي يجب أن يحدث عندما تكون البيانات ناقصة أو غير صحيحة؟
- ما الحالات التي يجب رفضها؟
- وما الحالات التي يجب قبولها؟
بدل ما تقول لأداة AI: "اكتب لي نظام حجز"، الأفضل أن تحدد لها الـ Use Cases والـ Scenarios والـ Constraints والـ Tests التي يجب أن ينجح فيها الكود.
بكده أنت بتحدد ما الذي يجب أن يفعله البرنامج، وتترك للأداة جزءًا من مهمة تنفيذ الحل.
TDD يجبرك تفهم الـ Business Context
من أهم فوائد TDD إنك ما تقدرش تكتب Test جيد لو أنت مش فاهم المشكلة أصلًا.تخيل إنك بتطور نظام لشركة فيها حجوزات.
قبل ما تكتب أي كود، لازم تعرف مثلًا:
- هل يسمح النظام بأكثر من حجز لنفس المورد في نفس الوقت؟
- ماذا يحدث لو انتهى الحجز في نفس لحظة بداية حجز آخر؟
- هل يمكن تعديل الحجز بعد بدايته؟
- ماذا يحدث إذا أرسل المستخدم تاريخًا غير صحيح؟
- هل المستخدم يقدر يلغي الحجز في أي وقت؟
- هل توجد صلاحيات مختلفة بين المستخدم والمدير؟
لما تحاول تحويلها إلى Tests، هتكتشف بسرعة الأماكن اللي أنت مش فاهم فيها النظام بشكل كافٍ.
وده من أهم أدوار TDD: تحويل فهمك للمشكلة إلى سلوك قابل للاختبار.
التفكير في Edge Cases قبل كتابة الكود
من الأخطاء الشائعة إن المطور يفكر فقط في السيناريو الطبيعي.مثلًا: "المستخدم يدخل رقم صحيح، والنظام يرجع النتيجة."
لكن ماذا لو:
- الرقم يساوي صفر؟
- الرقم سالب؟
- القيمة فارغة؟
- البيانات غير موجودة؟
- المستخدم ليس لديه صلاحية؟
- الطلب مكرر؟
- هناك بيانات متعارضة؟
وده بيساعدك على اكتشاف المشاكل في تصميم الحل قبل ما تتحول إلى Bugs داخل النظام.
كيف تستخدم TDD مع AI بشكل عملي؟
ممكن تعتبر الـ Tests والـ Use Cases بمثابة حدود واضحة لأداة AI.بدل ما تطلب منها: "اكتب لي الكود كاملًا."
ابدأ بتحديد المطلوب:
- اشرح الـ Business Rules.
- حدد الـ Use Cases.
- حدد الـ Edge Cases.
- اكتب الـ Tests التي تمثل هذه الحالات.
- تأكد أن الـ Tests تعبر فعلًا عن الـ Requirements.
- بعد ذلك اطلب تنفيذ الكود الذي يجعل هذه الـ Tests تنجح.
- راجع الكود ونظفه بعد الوصول إلى الحل.
أنت تحدد السلوك المطلوب، والـ AI يساعدك في التنفيذ.
لا تجعل AI يكتب الكود بالكيلو
من أكبر مشاكل استخدام AI في البرمجة إنك ممكن تحصل على كمية ضخمة من الكود بسرعة جدًا.الكود ممكن:
- يعمل فعلًا.
- يمرر بعض الاختبارات.
- يبدو منظمًا.
- لكنه يكون أكبر من اللازم.
- أو يحتوي على Abstractions غير ضرورية.
- أو يكرر منطق موجود بالفعل.
- أو يحل مشكلة لم تكن موجودة أصلًا.
بعد ما تحصل على الحل، اسأل نفسك:
- هل الكود فعلًا محتاج كل ده؟
- هل فيه أجزاء يمكن حذفها؟
- هل فيه Logic مكرر؟
- هل الـ Abstraction ضروري؟
- هل التصميم أبسط من كده؟
- هل الكود واضح لشخص آخر سيقرأه بعد سنة؟
الهدف هو أبسط كود يحقق الـ Requirements بشكل صحيح وقابل للصيانة.
من كتابة الكود إلى تنظيف الكود
في البرمجة، أحيانًا المشكلة مش إنك مش قادر تكتب الكود.المشكلة إنك كتبت كود أكثر مما تحتاج.
وده بيظهر بشكل أكبر مع أدوات AI، لأنها تقدر تقترح حلولًا كبيرة جدًا لمشكلة بسيطة.
ممكن تلاقي نفسك بعد فترة بتعمل الآتي:
"احذف الجزء ده."
"ممكن نشيل الـ Helper ده."
"ليه عندنا Class كامل للوظيفة دي؟"
"الـ Function دي ممكن تكون أبسط."
وهنا تظهر مهارة مهمة جدًا: معرفة ما الذي لا تحتاج إلى كتابته أصلًا.
كلما كان الـ Requirements والـ Tests أوضح، أصبح من الأسهل تقييم الكود الذي ينتجه AI بدل قبول كل ما يكتبه.
هل TDD يعني كتابة Tests لكل شيء؟
لا.TDD مش معناه إنك لازم تختبر كل سطر كود أو تكتب عشرات الاختبارات لمجرد زيادة التغطية.
الأهم هو اختبار السلوك المهم للنظام.
ركز على:
- Business Rules.
- الحالات الحرجة.
- Edge Cases المهمة.
- النتائج المتوقعة.
- الحالات التي يمكن أن تسبب مشاكل حقيقية للمستخدم.
الخلاصة
استخدام AI في البرمجة لا يقلل أهمية الـ Software Engineer، لكنه يغير نوع المهارات التي تحتاجها.لما الأداة تقدر تكتب الكود بسرعة، تصبح قيمة المطور أكبر في قدرته على:
- فهم الـ Business Context.
- تحديد الـ Requirements.
- التفكير في الـ Use Cases.
- اكتشاف الـ Edge Cases.
- كتابة Tests جيدة.
- مراجعة الحلول.
- تبسيط التصميم.
- حذف الكود غير الضروري.
وده يمكن تلخيصه في فكرة بسيطة:
AI يستطيع مساعدتك في كتابة الكود، لكن أنت من يحدد ما يجب أن يفعله الكود أصلًا.
