التطوير القائم على الاختبار
تطوير البرمجيات الموجه بالاختبار ( TDD ) هو طريقة لكتابة التعليمات البرمجية تتضمن كتابة حالة اختبار آلية على مستوى الوحدة تفشل، ثم كتابة ما يكفي من التعليمات البرمجية لجعل الاختبار ينجح، ثم إعادة هيكلة كل من التعليمات البرمجية للاختبار والتعليمات البرمجية للإنتاج، ثم تكرار ذلك مع حالة اختبار جديدة أخرى.
تتمثل الطرق البديلة لكتابة الاختبارات الآلية في كتابة جميع أكواد الإنتاج قبل البدء في كتابة أكواد الاختبار، أو كتابة جميع أكواد الاختبار قبل البدء في كتابة أكواد الإنتاج. أما مع منهجية تطوير البرمجيات القائمة على الاختبار (TDD)، فيتم كتابة كليهما معًا، مما يقلل من وقت تصحيح الأخطاء. [ 1 ]
يرتبط تطوير البرمجيات القائم على الاختبار (TDD) بمفاهيم البرمجة التي تعتمد على الاختبار أولاً في البرمجة المتطرفة ، والتي بدأت في عام 1999، [ 2 ] ولكنها حظيت مؤخراً باهتمام عام أكبر في حد ذاتها. [ 3 ]
يطبق المبرمجون هذا المفهوم أيضاً لتحسين وتصحيح الأخطاء في التعليمات البرمجية القديمة التي تم تطويرها باستخدام تقنيات أقدم. [ 4 ]
تاريخ
صرح مهندس البرمجيات كينت بيك ، الذي يُنسب إليه الفضل في تطوير أو "إعادة اكتشاف" هذه التقنية [ 5 ] ، في عام 2003 أن منهجية تطوير البرمجيات القائمة على الاختبار (TDD) تشجع على التصاميم البسيطة وتوحي بالثقة. [ 6 ]
كان الوصف الأصلي لمنهجية تطوير البرمجيات الموجهة بالاختبار (TDD) في كتاب قديم عن البرمجة. ينص الكتاب على أنك تأخذ شريط الإدخال، وتكتب يدويًا شريط الإخراج الذي تتوقعه، ثم تبرمج حتى يتطابق شريط الإخراج الفعلي مع الإخراج المتوقع. بعد أن كتبتُ أول إطار عمل xUnit بلغة Smalltalk، تذكرتُ ما قرأتُه وجرّبتُه. كان ذلك هو أصل منهجية TDD بالنسبة لي. عندما أشرح منهجية TDD للمبرمجين القدامى، غالبًا ما أسمع: "بالتأكيد. كيف يُمكنك البرمجة بطريقة أخرى؟" لذلك أُشير إلى دوري على أنه "إعادة اكتشاف" منهجية TDD.
دورة الترميز

تختلف خطوات تطوير البرمجيات الموجهة بالاختبار (TDD) قليلاً باختلاف المؤلفين من حيث العدد والوصف، ولكنها بشكل عام كما يلي. تستند هذه الخطوات إلى كتاب " تطوير البرمجيات الموجهة بالاختبار من خلال الأمثلة" [ 6 ] ومقال كينت بيك حول "تطوير البرمجيات الموجهة بالاختبار" [ 8 ] .
- 1. اذكر سيناريوهات استخدام الميزة الجديدة
- اذكر الاحتمالات المتوقعة في السلوك الجديد. "هناك الحالة الأساسية، ثم ماذا لو انتهت مهلة هذه الخدمة؟ وماذا لو لم يكن المفتاح موجودًا في قاعدة البيانات بعد؟..." يمكن للمطور اكتشاف هذه المواصفات من خلال الاستفسار عن حالات الاستخدام وقصص المستخدم . من أهم مزايا منهجية التطوير القائمة على الاختبار (TDD) أنها تجعل المطور يركز على المتطلبات قبل كتابة التعليمات البرمجية. وهذا على عكس الممارسة المعتادة، حيث تُكتب اختبارات الوحدة بعد كتابة التعليمات البرمجية.
- 2. اكتب اختبارًا لأحد العناصر في القائمة
- اكتب اختبارًا آليًا ينجح إذا تم استيفاء الشرط المحدد في السلوك الجديد.
- 3. قم بتشغيل جميع الاختبارات. من المتوقع أن يفشل الاختبار الجديد لأسباب متوقعة .
- هذا يُظهر أن الكود الجديد ضروري بالفعل للميزة المطلوبة. ويؤكد أن بيئة الاختبار تعمل بشكل صحيح. كما يستبعد احتمال أن يكون الاختبار الجديد معيبًا وسينجح دائمًا.
- 4. اكتب أبسط كود يجتاز الاختبار الجديد
- يُسمح باستخدام أكواد غير أنيقة وكتابة أكواد ثابتة . سيتم تحسين الكود في الخطوة السادسة. لا ينبغي إضافة أي كود يتجاوز الوظائف التي تم اختبارها.
- 5. يجب أن تجتاز جميع الاختبارات الآن
- في حال فشل أي منها، قم بإصلاح الاختبارات الفاشلة بأقل قدر من التغييرات حتى تنجح جميعها.
- 6. أعد هيكلة الكود حسب الحاجة مع ضمان استمرار اجتياز جميع الاختبارات
- يُعاد هيكلة الكود لتحسين سهولة قراءته وصيانته. وعلى وجه الخصوص، يجب إزالة بيانات الاختبار المُضمنة في الكود المُستخدم في الإنتاج. ويضمن تشغيل مجموعة الاختبارات بعد كل عملية إعادة هيكلة عدم تعطل أي من الوظائف الحالية. أمثلة على إعادة الهيكلة:
- نقل الكود إلى المكان الذي ينتمي إليه منطقياً
- إزالة التعليمات البرمجية المكررة
- صنع الأسماء وتوثيقها ذاتيًا
- تقسيم الأساليب إلى أجزاء أصغر
- إعادة ترتيب التسلسلات الهرمية للوراثة
- يكرر
- كرر العملية، بدءًا من الخطوة 2، مع كل اختبار في القائمة حتى يتم تنفيذ جميع الاختبارات واجتيازها.
ينبغي أن تكون كل الاختبارات صغيرة وأن تُجرى عمليات الإيداع بشكل متكرر. إذا فشل الكود الجديد في بعض الاختبارات، يمكن للمبرمج التراجع أو الرجوع إلى النسخة السابقة بدلاً من الإفراط في تصحيح الأخطاء .
عند استخدام المكتبات الخارجية ، من المهم عدم كتابة اختبارات صغيرة جدًا بحيث تختبر المكتبة نفسها فقط، [ 3 ] إلا إذا كان هناك سبب للاعتقاد بأن المكتبة بها أخطاء أو أنها ليست غنية بالميزات بما يكفي لتلبية جميع احتياجات البرنامج قيد التطوير.
العمل القائم على الاختبار
تم اعتماد منهجية تطوير البرمجيات الموجهة بالاختبار (TDD) خارج نطاق تطوير البرمجيات، في فرق المنتجات والخدمات على حد سواء، كعمل قائم على الاختبار . [ 9 ] ولضمان نجاح الاختبار، يجب تطبيقه على المستويين الجزئي والكلي. يجب اختبار كل دالة في فئة، وكل قيمة بيانات مُدخلة، ورسالة سجل، ورمز خطأ، بالإضافة إلى نقاط بيانات أخرى. [ 10 ] على غرار منهجية TDD، تقوم الفرق غير البرمجية بتطوير فحوصات مراقبة الجودة (QC) (عادةً ما تكون اختبارات يدوية وليست آلية) لكل جانب من جوانب العمل قبل البدء. تُستخدم فحوصات مراقبة الجودة هذه لتوجيه التصميم والتحقق من صحة النتائج المرتبطة به. يتم تطبيق الخطوات الست لتسلسل TDD مع تغييرات دلالية طفيفة.
- "إضافة علامة صح" تحل محل "إضافة اختبار"
- "تشغيل جميع الفحوصات" يحل محل "تشغيل جميع الاختبارات"
- "قم بالعمل" يحل محل "اكتب بعض التعليمات البرمجية"
- "تشغيل جميع الفحوصات" يحل محل "تشغيل الاختبارات"
- "تنظيف العمل" يحل محل "إعادة هيكلة الكود"
- "يكرر"
أسلوب التطوير
تتعدد جوانب استخدام منهجية التطوير الموجه بالاختبار، ومنها على سبيل المثال مبدأ "البساطة هي الأفضل" ( KISS ) ومبدأ " لن تحتاج إلى ذلك " (YAGNI). فمن خلال التركيز على كتابة الكود اللازم لاجتياز الاختبارات فقط، يمكن أن تكون التصاميم أكثر وضوحًا ودقةً مما تُحققه الطرق الأخرى. [ 6 ] وفي كتابه "التطوير الموجه بالاختبار بالأمثلة" ، يقترح كينت بيك أيضًا مبدأ " تظاهر بالمعرفة حتى تتقنها ".
لتحقيق مفهوم تصميم متقدم، كنمط تصميم مثلاً ، تُكتب اختبارات تُحاكي ذلك التصميم. قد يبقى الكود أبسط من النمط المستهدف، ولكنه مع ذلك يجتاز جميع الاختبارات المطلوبة. قد يبدو هذا مُربكاً في البداية، ولكنه يسمح للمطور بالتركيز فقط على ما هو مهم.
كتابة الاختبارات أولاً: ينبغي كتابة الاختبارات قبل كتابة الوظائف المراد اختبارها. وقد ذُكر أن لهذا النهج فوائد عديدة، فهو يضمن كتابة التطبيق مع مراعاة سهولة اختباره، إذ يتعين على المطورين التفكير في كيفية اختبار التطبيق منذ البداية بدلاً من إضافتها لاحقاً. كما يضمن كتابة اختبارات لكل ميزة. إضافةً إلى ذلك، تؤدي كتابة الاختبارات أولاً إلى فهم أعمق وأسرع لمتطلبات المنتج، وتضمن فعالية كود الاختبار، وتحافظ على التركيز المستمر على جودة البرمجيات . [ 11 ]
عند كتابة التعليمات البرمجية التي تركز على الميزات أولاً، يميل المطورون والمؤسسات إلى دفع المطور نحو الميزة التالية، حتى أنهم قد يهملون الاختبار تمامًا. قد لا يتم تجميع أول اختبار في منهجية تطوير البرمجيات القائمة على الاختبار (TDD) في البداية، لأن الفئات والأساليب التي يتطلبها قد لا تكون موجودة بعد. ومع ذلك، يعمل هذا الاختبار الأول كبداية لمواصفات قابلة للتنفيذ. [ 12 ]
تفشل كل حالة اختبار مبدئيًا: هذا يضمن فعالية الاختبار وقدرته على اكتشاف الأخطاء. بمجرد التأكد من ذلك، يمكن تنفيذ الوظائف الأساسية. وقد أدى هذا إلى ظهور "مبدأ التطوير الموجه بالاختبار"، وهو "أحمر/أخضر/إعادة هيكلة"، حيث يشير الأحمر إلى الفشل والأخضر إلى النجاح . يكرر التطوير الموجه بالاختبار باستمرار خطوات إضافة حالات اختبار فاشلة، واجتيازها، وإعادة هيكلة الكود. إن الحصول على نتائج الاختبار المتوقعة في كل مرحلة يعزز فهم المطور للكود، ويزيد من ثقته بنفسه، ويرفع إنتاجيته.
رؤية الكود
في تطوير البرمجيات الموجه بالاختبار، يثير كتابة الاختبارات قبل التنفيذ تساؤلات حول اختبار الطرق الخاصة مقابل الاختبار فقط من خلال الواجهات العامة . يؤثر هذا الخيار على تصميم كل من كود الاختبار وكود الإنتاج.
عزل الاختبار
يعتمد تطوير البرمجيات الموجه بالاختبارات بشكل أساسي على اختبارات الوحدات نظرًا لدورة إعادة البناء السريعة (الاختبارات الأولية، الاختبارات النهائية، إعادة البناء). تُنفذ هذه الاختبارات بسرعة من خلال تجنب حدود العمليات، واتصالات الشبكة، والتبعيات الخارجية. مع أن ممارسي تطوير البرمجيات الموجه بالاختبارات يكتبون أيضًا اختبارات التكامل للتحقق من تفاعلات المكونات، إلا أن هذه الاختبارات الأبطأ تُفصل عن اختبارات الوحدات الأكثر تكرارًا. كما أن اختبار وحدات متكاملة متعددة معًا يُصعّب تحديد مصدر الأعطال.
عندما يعتمد الكود قيد التطوير على تبعيات خارجية، يشجع منهج تطوير البرمجيات الموجه بالاختبار (TDD) على استخدام بدائل الاختبار للحفاظ على اختبارات وحدة سريعة ومعزولة. [ 13 ] يتضمن النهج المعتاد استخدام واجهات لفصل التبعيات الخارجية وتنفيذ بدائل الاختبار لأغراض الاختبار.
بما أن نماذج الاختبار البديلة لا تثبت الارتباط بالمكونات الخارجية الحقيقية، فإن ممارسي منهجية تطوير البرمجيات الموجهة بالاختبار (TDD) يُكملون اختبارات الوحدة باختبارات التكامل على المستويات المناسبة. وللحفاظ على سرعة التنفيذ وموثوقيته، يتم التركيز على الاختبارات على مستوى الوحدة مع تقليل الاختبارات الأبطأ على المستويات الأعلى.
حافظ على صغر حجم الوحدة
في منهجية تطوير البرمجيات الموجهة بالاختبار (TDD)، تُعرَّف الوحدة عادةً بأنها فئة، أو مجموعة من الدوال المترابطة تُسمى غالبًا وحدة نمطية. ويُزعم أن الحفاظ على صغر حجم الوحدات يوفر فوائد بالغة الأهمية، منها:
- تقليل جهد تصحيح الأخطاء - عند اكتشاف حالات فشل الاختبار، فإن وجود وحدات أصغر يساعد في تتبع الأخطاء.
- الاختبارات ذاتية التوثيق – حالات الاختبار الصغيرة أسهل في القراءة والفهم. [ 11 ]
يمكن أن تؤدي الممارسات المتقدمة لتطوير البرمجيات الموجه بالاختبار إلى تطوير البرمجيات الموجه باختبارات القبول (ATDD) وتحديد المواصفات بالأمثلة ، حيث تُحوّل المعايير التي يحددها العميل تلقائيًا إلى اختبارات قبول، والتي بدورها تُوجّه عملية تطوير البرمجيات التقليدية الموجهة باختبارات الوحدة (UTDD). [ 14 ] تضمن هذه العملية للعميل آليةً آليةً لتحديد ما إذا كان البرنامج يلبي متطلباته. مع ATDD، يصبح لدى فريق التطوير هدفٌ محددٌ يسعى لتحقيقه، ألا وهو اختبارات القبول، مما يُبقي تركيزهم مُنصبًا باستمرار على ما يريده العميل فعلاً من كل قصة مستخدم.
أفضل الممارسات
هيكل الاختبار
يضمن التصميم الفعال لحالة الاختبار إتمام جميع الإجراءات المطلوبة، ويُحسّن من سهولة قراءة حالة الاختبار، ويُسهّل عملية التنفيذ. كما يُساعد الهيكل المتسق في بناء حالة اختبار موثقة ذاتيًا. يتكون الهيكل الشائع لحالات الاختبار من: (1) الإعداد، (2) التنفيذ، (3) التحقق، و(4) التنظيف.
- الإعداد: ضع الوحدة قيد الاختبار (UUT) أو نظام الاختبار ككل في الحالة المطلوبة لتشغيل الاختبار.
- التنفيذ: قم بتشغيل/توجيه وحدة الاختبار لتنفيذ السلوك المستهدف والتقاط جميع المخرجات، مثل القيم المُعادة ومعاملات الإخراج. عادةً ما تكون هذه الخطوة بسيطة للغاية.
- التحقق: تأكد من صحة نتائج الاختبار. قد تشمل هذه النتائج مخرجات صريحة تم التقاطها أثناء التنفيذ أو تغييرات الحالة في وحدة الاختبار.
- التنظيف: استعادة وحدة الاختبار أو نظام الاختبار ككل إلى حالته قبل الاختبار. تسمح هذه الاستعادة بتنفيذ اختبار آخر مباشرةً بعد هذا الاختبار. في بعض الحالات، وللحفاظ على المعلومات لتحليل حالات فشل الاختبار المحتملة، يجب أن يبدأ التنظيف الاختبار مباشرةً قبل تشغيل إعداد الاختبار. [ 11 ]
أفضل الممارسات الفردية
من أفضل الممارسات التي يمكن اتباعها فصل منطق الإعداد والإنهاء المشتركين إلى خدمات دعم اختبار تستخدمها حالات الاختبار المناسبة، مع التركيز على النتائج الضرورية فقط للتحقق من صحة الاختبار، وتصميم اختبارات مرتبطة بالوقت تسمح بالتسامح مع التنفيذ في أنظمة تشغيل غير فورية. يقلل السماح بهامش تأخير بنسبة 5-10% من احتمالية النتائج السلبية الخاطئة في تنفيذ الاختبار. كما يُنصح بالتعامل مع كود الاختبار بنفس الاهتمام الذي يُولى لكود الإنتاج. يجب أن يعمل كود الاختبار بشكل صحيح في كلتا الحالتين (الإيجابية والسلبية)، وأن يدوم لفترة طويلة، وأن يكون سهل القراءة والصيانة. يمكن للفرق الاجتماع ومراجعة الاختبارات وممارسات الاختبار لتبادل التقنيات الفعالة واكتشاف الممارسات الخاطئة. [ 15 ]
الممارسات التي يجب تجنبها، أو "الأنماط المضادة"
- إن وجود حالات اختبار تعتمد على حالة النظام التي تم التلاعب بها من حالات الاختبار التي تم تنفيذها مسبقًا (أي، يجب عليك دائمًا بدء اختبار الوحدة من حالة معروفة ومُهيأة مسبقًا).
- التبعيات بين حالات الاختبار. مجموعة الاختبارات التي تعتمد فيها حالات الاختبار على بعضها البعض تكون هشة ومعقدة. لا ينبغي افتراض ترتيب التنفيذ. إعادة هيكلة حالات الاختبار الأولية أو بنية وحدة الاختبار الأساسية تُسبب سلسلة من التأثيرات المتزايدة الانتشار في الاختبارات المرتبطة بها.
- الاختبارات المترابطة. قد تتسبب الاختبارات المترابطة في سلسلة من النتائج السلبية الخاطئة. يؤدي فشل حالة اختبار مبكرة إلى فشل حالة اختبار لاحقة حتى لو لم يكن هناك خطأ فعلي في وحدة الاختبار، مما يزيد من جهود تحليل العيوب وتصحيحها.
- اختبار التنفيذ الدقيق أو التوقيت أو الأداء.
- بناء "أنظمة استدلال شاملة المعرفة". نظام الاستدلال الذي يُجري عمليات فحص أكثر من اللازم يكون أكثر تكلفة وأكثر هشاشة مع مرور الوقت. هذا الخطأ الشائع خطير لأنه يتسبب في استنزاف خفي ولكنه شامل للوقت في جميع مراحل المشروع المعقد. [ 15 ]
- تفاصيل تنفيذ الاختبار.
- الاختبارات بطيئة التشغيل.
المقارنة والتمييز
TDD و ATDD
تطوير البرمجيات الموجه بالاختبار (TDD) مرتبط بتطوير البرمجيات الموجه باختبار القبول (ATDD)، ولكنه يختلف عنه. [ 16 ] يُعد TDD في الأساس أداةً للمطورين تُساعدهم على إنشاء وحدات برمجية مكتوبة جيدًا (دالة، أو فئة، أو وحدة نمطية) تُنفذ مجموعة من العمليات بشكل صحيح. أما ATDD فهو أداة تواصل بين العميل والمطور والمختبر لضمان تحديد المتطلبات بدقة. يتطلب TDD أتمتة الاختبارات، بينما لا يتطلبها ATDD، مع أن الأتمتة تُساعد في اختبارات الانحدار . غالبًا ما يُمكن اشتقاق الاختبارات المستخدمة في TDD من اختبارات ATDD، نظرًا لأن وحدات التعليمات البرمجية تُنفذ جزءًا من المتطلبات. يجب أن تكون اختبارات ATDD سهلة القراءة للعميل، بينما لا يُشترط ذلك في اختبارات TDD.
TDD و BDD
يجمع تطوير البرمجيات الموجه بالسلوك (BDD ) بين ممارسات تطوير البرمجيات الموجه بالاختبار (TDD) وتطوير البرمجيات الموجه بالاختبار القائم على الاختبار (ATDD). [ 17 ] يتضمن هذا النهج كتابة الاختبارات أولاً، ولكنه يركز على الاختبارات التي تصف السلوك، بدلاً من الاختبارات التي تختبر وحدة تنفيذية. توفر أدوات مثل JBehave و Cucumber و Mspec و Specflow صيغًا تسمح لمالكي المنتجات والمطورين ومهندسي الاختبار بتحديد السلوكيات معًا، والتي يمكن ترجمتها بعد ذلك إلى اختبارات مؤتمتة.
برنامج لتقنية تطوير البرمجيات القائمة على الاختبار (TDD)
توجد العديد من أطر وأدوات الاختبار المفيدة في تطوير البرمجيات القائم على الاختبار (TDD).
أطر عمل xUnit
قد يستخدم المطورون أطر اختبار بمساعدة الحاسوب ، والتي تُعرف مجتمعةً باسم xUnit (المشتقة من SUnit، التي أُنشئت عام 1998)، لإنشاء حالات الاختبار وتشغيلها تلقائيًا. توفر أطر xUnit إمكانيات التحقق من صحة الاختبار باستخدام التأكيدات، بالإضافة إلى إمكانية إعداد تقارير النتائج. تُعد هذه الإمكانيات بالغة الأهمية للأتمتة، إذ تنقل عبء التحقق من صحة التنفيذ من عملية معالجة لاحقة مستقلة إلى عملية مُدمجة في تنفيذ الاختبار نفسه. يتيح إطار التنفيذ الذي توفره هذه الأطر إمكانية التنفيذ التلقائي لجميع حالات اختبار النظام أو مجموعات فرعية منها، إلى جانب ميزات أخرى. [ 18 ]
نتائج TAP
قد تقبل أطر الاختبار مخرجات اختبار الوحدة في بروتوكول اختبار أي شيء غير المرتبط بلغة معينة والذي تم إنشاؤه في عام 1987.
تطوير البرمجيات القائم على الاختبار للأنظمة المعقدة
يتطلب تطبيق منهجية التطوير الموجه بالاختبار (TDD) على الأنظمة الكبيرة بنيةً معيارية، ومكونات محددة بواجهات منشورة، وهيكلة نظام منضبطة مع تعظيم استقلالية المنصة. تُؤدي هذه الممارسات المُثبتة إلى زيادة قابلية الاختبار وتُسهّل تطبيق أتمتة البناء والاختبار. [ 11 ]
التصميم من أجل قابلية الاختبار
تتطلب الأنظمة المعقدة بنيةً تلبي مجموعةً من المتطلبات. ومن أهم هذه المتطلبات دعم الاختبار الكامل والفعال للنظام. ويؤدي التصميم المعياري الفعال إلى مكونات تتشارك في سمات أساسية لنجاح منهجية التطوير القائمة على الاختبار (TDD).
- يضمن التماسك العالي أن توفر كل وحدة مجموعة من القدرات ذات الصلة، ويجعل اختبارات تلك القدرات أسهل في الصيانة.
- يسمح الاقتران المنخفض باختبار كل وحدة بشكل فعال على حدة.
- تعمل الواجهات المنشورة على تقييد الوصول إلى المكونات وتكون بمثابة نقاط اتصال للاختبارات، مما يسهل إنشاء الاختبارات ويضمن أعلى دقة بين تكوين وحدة الاختبار ووحدة الإنتاج.
تُعدّ نمذجة السيناريوهات تقنيةً أساسيةً لبناء بنية معيارية فعّالة، حيث يتم إنشاء مجموعة من مخططات التسلسل، يركز كل منها على سيناريو تنفيذي واحد على مستوى النظام. يوفر نموذج السيناريوهات أداةً ممتازةً لوضع استراتيجية التفاعلات بين المكونات استجابةً لمحفز محدد. يعمل كل نموذج من نماذج السيناريوهات هذه كمجموعة غنية من المتطلبات للخدمات أو الوظائف التي يجب أن يوفرها المكون، كما يحدد ترتيب تفاعل هذه المكونات والخدمات معًا. يمكن لنمذجة السيناريوهات أن تُسهّل بشكل كبير بناء اختبارات التطوير الموجه بالاختبار (TDD) لنظام معقد. [ 11 ]
إدارة الاختبارات للفرق الكبيرة
في الأنظمة الكبيرة، يتضاعف تأثير ضعف جودة المكونات نتيجةً لتعقيد التفاعلات. هذا التضاعف يجعل فوائد منهجية التطوير القائمة على الاختبار (TDD) تتراكم بشكل أسرع في المشاريع الضخمة. مع ذلك، قد يُصبح تعقيد إجمالي الاختبارات مشكلةً بحد ذاته، مما يُقلل من المكاسب المُحتملة. قد يبدو الأمر بسيطًا، لكن الخطوة الأولى الأساسية هي إدراك أن كود الاختبار هو أيضًا جزءٌ لا يتجزأ من البرمجيات، ويجب إنتاجه وصيانته بنفس الدقة التي يُصان بها كود الإنتاج.
يُعد إنشاء وإدارة بنية برمجيات الاختبار ضمن نظام معقد بنفس أهمية بنية المنتج الأساسية. تتفاعل برامج تشغيل الاختبار مع وحدة الاختبار، وبدائل الاختبار ، وإطار عمل اختبار الوحدة. [ 11 ]
المزايا والعيوب
أظهرت الدراسات التجريبية لتطوير البرمجيات الموجه بالاختبار (TDD) نتائج متباينة. تشير المراجعات عمومًا إلى أن TDD يُحسّن بعض مقاييس جودة البرمجيات، لكن تأثيره على الإنتاجية أقل اتساقًا. فقد وجدت دراسة تحليلية شاملة أجريت عام 2013 وشملت 27 دراسة تأثيرًا إيجابيًا طفيفًا على الجودة الخارجية، وتأثيرًا ضئيلًا أو معدومًا على الإنتاجية بشكل عام، مع تحقيق مكاسب أكبر في الجودة وانخفاضات أكبر في الإنتاجية في الدراسات الصناعية. [ 19 ] وخلصت مراجعة منهجية أجريت عام 2016 للدراسات المنشورة بين عامي 1999 و2014 إلى أن معظم الدراسات أشارت إلى تحسينات في جودة البرمجيات الداخلية والخارجية، لكن نتائج الإنتاجية تباينت بين البيئات الأكاديمية والصناعية. [ 20 ]
خلص تحليل مقارن للدراسات التجريبية إلى أن منهجية التطوير القائمة على الاختبار (TDD) قد تقلل من العيوب المُدخلة وتؤدي إلى كود أكثر قابلية للصيانة، بينما قد يكون بعض الكود المُنفذ أصغر حجمًا أو أقل تعقيدًا. [ 21 ] ومع ذلك، وجدت تجربة صناعية مع مطورين محترفين أن تأثير منهجية التطوير القائمة على الاختبار يعتمد بشكل كبير على خصائص المهمة، وخلصت إلى أن هناك حاجة إلى مزيد من الأدلة قبل تحديد ما إذا كانت منهجية التطوير القائمة على الاختبار أفضل أم أسوأ من التطوير التدريجي الذي يعتمد على الاختبار أخيرًا في البيئات الصناعية. [ 22 ] ووجدت دراسة لاحقة لخصائص عملية التطوير القائمة على الاختبار أن تحسينات الجودة والإنتاجية كانت مرتبطة بشكل أكبر بخطوات التطوير الصغيرة والموحدة أكثر من ارتباطها بترتيب الاختبار أولًا نفسه. [ 23 ]
الفوائد المحتملة
تُتيح منهجية التطوير الموجه بالاختبار (TDD) الحصول على تغذية راجعة سريعة أثناء عملية التطوير، حيث يقوم المطور بتشغيل مجموعة متنامية من الاختبارات الآلية بشكل متكرر. وهذا يُسهّل اكتشاف الأخطاء فور ظهورها، ويدعم إعادة هيكلة الكود من خلال توفير آلية أمان للتغييرات السلوكية. [ 24 ] ولأن الاختبارات تُكتب قبل كتابة كود الإنتاج، يجب على المطور مراعاة السلوك والواجهة المطلوبين للكود قبل التنفيذ. وهذا يُشجع على استخدام وحدات برمجية أصغر، وترابط أقل ، وواجهات أوضح، خاصةً عند كتابة الاختبارات بناءً على السلوك العام بدلاً من تفاصيل التنفيذ. [ 24 ] [ 21 ]
يميل تطوير البرمجيات الموجه بالاختبار (TDD) أيضًا إلى إنتاج مجموعة من الاختبارات الآلية كمنتج ثانوي للتطوير. يمكن أن تكون هذه الاختبارات مفيدة في عمليات التكامل المستمر ، حيث تُختبر التغييرات بشكل متكرر قبل دمجها أو إصدارها. وبهذا المعنى، قد يُحسّن TDD الثقة في التغييرات اللاحقة، على الرغم من أن اجتياز اختبارات الوحدة لا يُثبت بحد ذاته صحة البرنامج. [ 19 ] [ 20 ]
القيود
لا يُعدّ تطوير البرمجيات الموجه بالاختبار (TDD) بديلاً عن أشكال اختبار البرمجيات الأخرى . ولأنّ TDD يُمارس عادةً من خلال اختبار الوحدات ، فقد لا يختبر بشكلٍ كافٍ السلوك الذي يعتمد على واجهات المستخدم، أو قواعد البيانات، أو الأنظمة الموزعة، أو الأجهزة، أو التوقيت، أو خصائص الأمان، أو التفاعلات بين المكونات. غالبًا ما تتطلب هذه المجالات اختبارات تكامل إضافية ، أو اختبارات نظام ، أو اختبارات قبول، أو اختبارات سهولة الاستخدام، أو غيرها من أساليب الاختبار المتخصصة.
قد تشترك الاختبارات المكتوبة خلال منهجية تطوير البرمجيات القائمة على الاختبار (TDD) في نفس المفاهيم الخاطئة الموجودة في كود الإنتاج. فإذا أساء المطور فهم أحد المتطلبات، فقد يتضمن كل من الاختبار والتنفيذ نفس الافتراض الخاطئ، مما يؤدي إلى نجاح الاختبار بينما يظل البرنامج معيبًا. وبالتالي، قد يُوهم العدد الكبير من الاختبارات الناجحة بشعور زائف بالأمان إذا كانت الاختبارات غير مكتملة، أو ضيقة النطاق للغاية، أو تركز على تفاصيل التنفيذ بدلًا من السلوك الظاهر للعيان.
تُضيف الاختبارات الآلية تكاليف صيانة. فالاختبارات المرتبطة ارتباطًا وثيقًا بتفاصيل التنفيذ الداخلية، أو التي تستخدم محاكاة مفرطة، أو تعتمد على افتراضات توقيت غير دقيقة، أو تحتوي على تعليمات برمجية مكررة، قد يصعب صيانتها. [ 25 ] في بعض السياقات، لا سيما في المشاريع المعقدة القائمة أو المشاريع ذات الخبرة المحدودة في الاختبارات الآلية، قد يؤدي الوقت اللازم لكتابة الاختبارات وصيانتها إلى انخفاض الإنتاجية على المدى القصير. [ 22 ] [ 20 ]
مؤتمر
عُقد المؤتمر الأول لتقنية تطوير البرمجيات الموجهة بالاختبار (TDD) خلال شهر يوليو 2021. [ 26 ] تم تسجيل المؤتمرات على موقع يوتيوب [ 27 ]
انظر أيضاً
مراجع
- ↑ بارسا، سعيد؛ زكري نصر آبادي، مرتضى؛ تورهان، بوراك (2025-01-01). "التطوير القائم على قابلية الاختبار: تحسين كفاءة التطوير القائم على الاختبار" . معايير وواجهات الحاسوب . 91 103877. doi : 10.1016/j.csi.2024.103877 . ISSN 0920-5489 .
- ↑ لي كوبلاند (ديسمبر 2001). "البرمجة المتطرفة" . كمبيوتر وورلد. مؤرشف من الأصل في 5 يونيو 2011. تم الاسترجاع في 11 يناير 2011 .
- 1 2 نيوكيرك، جيه دبليو وفورونتسوف، إيه إيه. تطوير البرمجيات الموجه بالاختبار في مايكروسوفت دوت نت ، مطبعة مايكروسوفت، 2004.
- ↑ فيذرز، م. العمل بفعالية مع التعليمات البرمجية القديمة، برنتيس هول، 2004
- ↑ كينت بيك (11 مايو 2012). "لماذا يشير كينت بيك إلى "إعادة اكتشاف" تطوير البرمجيات القائم على الاختبار؟" . تم الاطلاع عليه في 1 ديسمبر 2014 .
- 1 2 3 بيك، كينت (8 نوفمبر 2002). تطوير البرمجيات الموجه بالاختبارات من خلال الأمثلة . فاسيم: أديسون ويسلي. ISBN 978-0-321-14653-3.
- ↑ كينت بيك (11 مايو 2012). "لماذا يشير كينت بيك إلى "إعادة اكتشاف" تطوير البرمجيات القائم على الاختبار؟" . تم الاطلاع عليه في 1 ديسمبر 2014 .
- ↑ بيك، كينت (11 ديسمبر 2023). "كانون تي دي دي" . تصميم البرمجيات: الترتيب أولاً؟ تم الاسترجاع في 22 أكتوبر 2024 .
- ↑ ليبورن، إي. (2013) توجيه المنظمة الرشيقة: نهج لين لإدارة الأعمال . لندن: دار نشر حوكمة تكنولوجيا المعلومات: 176-179.
- ↑ موهان، غاياتري. "اختبار المكدس الكامل" . www.thoughtworks.com . تم الاسترجاع في 7 سبتمبر 2022 .
- 1 2 3 4 5 6 "ورقة عمل حول منهجية التطوير القائمة على الاختبار الفعّالة للأنظمة المدمجة المعقدة" (ملف PDF) . شركة باثفايندر سوليوشنز. مؤرشفة من النسخة الأصلية (ملف PDF) بتاريخ 16 مارس 2016.
- ↑ "التطوير الموجه بالاختبارات الرشيقة" . أجايل شيربا. 2010-08-03 . تم الاطلاع عليه بتاريخ 2012-08-14 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ فاولر، مارتن (1999). إعادة هيكلة الكود - تحسين تصميم الكود الحالي . بوسطن: أديسون ويسلي لونغمان، إنك. ISBN 0-201-48567-2.
- ↑ كوسكيلا، ل. "التطوير الموجه بالاختبار: التطوير الموجه بالاختبار واختبار القبول الموجه بالاختبار لمطوري جافا"، منشورات مانينغ، 2007
- ١ ٢ تطوير البرمجيات الموجه بالاختبار (TDD) للأنظمة المعقدة - مقدمة على يوتيوب من باثفايندر سوليوشنز
- ↑ تطوير البرمجيات الرشيق القائم على اختبار القبول: برمجيات أفضل من خلال التعاون . بوسطن: أديسون ويسلي بروفيشنال. 2011. ISBN 978-0-321-71408-4.
- ↑ "BDD" . مؤرشف من الأصل بتاريخ 2015-05-08 . تم الاطلاع عليه بتاريخ 2015-04-28 .
- ↑ "ورقة عمل حول منهجية التطوير القائمة على الاختبار الفعّالة للأنظمة المعقدة والمدمجة" . شركة باثفايندر سوليوشنز. مؤرشفة من الأصل بتاريخ 20 أغسطس 2013. تم الاطلاع عليها بتاريخ 27 نوفمبر 2012 .
- 1 2 رفيق، يحيى؛ ميشيتش، فويسلاف ب. (2013). "آثار تطوير البرمجيات الموجه بالاختبار على الجودة الخارجية والإنتاجية: تحليل تلوي". معاملات IEEE في هندسة البرمجيات . 39 (6): 835-856 . doi : 10.1109/TSE.2012.28 .
- 1 2 3 بيسي، ويلسون؛ نيتو، AGSS؛ إيمر، MCFP (2016). "آثار تطوير البرمجيات القائم على الاختبار على الجودة الداخلية والخارجية والإنتاجية: مراجعة منهجية". تكنولوجيا المعلومات والبرمجيات . 74 : 45-54 . doi : 10.1016/j.infsof.2016.02.004 .
- 1 2 ماكينن، سيمو؛ مونش، يورغن (2014). "آثار تطوير البرمجيات الموجه بالاختبار: تحليل مقارن للدراسات التجريبية". جودة البرمجيات. مناهج قائمة على النماذج لهندسة البرمجيات والأنظمة المتقدمة . سلسلة محاضرات في معالجة معلومات الأعمال. المجلد 166. سبرينغر. الصفحات 155-169 . doi : 10.1007/978-3-319-03602-1_10 .
- توسون ، أ.؛ دييستي، أ.؛ فوتشي، د.؛ فيغاس، س.؛ تورهان، ب.؛ إردوغموس، هـ.؛ سانتوس، أ.؛ أويفو، م.؛ تورو، ك.؛ يارفينين، ج.؛ جوريستو، ن. (2017). "تجربة صناعية حول آثار تطوير البرمجيات القائم على الاختبار على الجودة الخارجية والإنتاجية". هندسة البرمجيات التجريبية . 22 (6): 2763-2805 . doi : 10.1007/s10664-016-9490-0 .
- ↑ فوتشي، دافيد؛ إردوغموس، هاكان؛ تورهان، بوراك؛ أويفو، ماركو؛ يوريستو، ناتاليا (2017). "تحليل عملية التطوير القائمة على الاختبار: هل يهم حقًا الاختبار أولًا أم أخيرًا؟". معاملات IEEE في هندسة البرمجيات . 43 (7): 597-614 . arXiv : 1611.05994 . doi : 10.1109/TSE.2016.2616877 .
- 1 2 بيك، كينت (2003). تطوير البرمجيات الموجه بالاختبار: بالأمثلة . أديسون-ويسلي. ISBN 978-0321146533.
- ↑ ميسزاروس، جيرارد (2007). أنماط اختبار xUnit: إعادة هيكلة كود الاختبار . أديسون-ويسلي. ISBN 978-0131495050.
- ↑ بوناردزيك، أليكس. "المؤتمر الدولي الأول لتطوير البرمجيات الموجه بالاختبار (TDD)" . مؤتمر TDD . تم الاطلاع عليه بتاريخ 20 يوليو 2021 .
- ↑ المؤتمر الدولي الأول لتقنية TDD - السبت 10 يوليو 2021 ، مؤرشف من الأصل بتاريخ 21 ديسمبر 2021 ، تم الاطلاع عليه بتاريخ 20 يوليو 2021
روابط خارجية
- TestDrivenDevelopment على ويكي ويكي ويب
- برتراند ماير (سبتمبر 2004). "اختبار أم مواصفات؟ اختبار ومواصفات؟ اختبار من المواصفات!" . مؤرشف من الأصل بتاريخ 9 فبراير 2005.
- اختبار فريق Microsoft Visual Studio من خلال منهجية تطوير البرمجيات القائمة على الاختبار (TDD).
- اكتب اختبارات وحدة قابلة للصيانة ستوفر عليك الوقت والجهد
- تحسين جودة التطبيقات باستخدام منهجية التطوير القائمة على الاختبار (TDD)
- مؤتمر تطوير البرمجيات الموجه بالاختبار
- البرمجة المتطرفة
- فلسفات تطوير البرمجيات
- عملية تطوير البرمجيات
- اختبار البرمجيات
