هل من الممكن تقديم التطوير المبني على الاختبار (TDD) في مشروع ناضج؟[مغلق]

StackOverflow https://stackoverflow.com/questions/107919

  •  01-07-2019
  •  | 
  •  

سؤال

  • لنفترض أننا أدركنا قيمة TDD بعد فوات الأوان.لقد نضج المشروع بالفعل، وبدأ عدد كبير من العملاء في استخدامه.
  • لنفترض أن الاختبارات الآلية المستخدمة هي في الغالب اختبارات وظيفية/نظامية، وهناك قدر كبير من اختبارات واجهة المستخدم الرسومية الآلية.
  • لنفترض أن لدينا طلبات ميزات جديدة وتقارير أخطاء جديدة (!).لذا فإن قدرًا كبيرًا من التطوير لا يزال مستمرًا.
  • لاحظ أنه سيكون هناك بالفعل الكثير من كائنات الأعمال مع عدم وجود اختبار للوحدة أو القليل منها.
  • الكثير من التعاون/العلاقات بينهما، والتي يتم اختبارها مرة أخرى فقط من خلال اختبار وظيفي/نظام على مستوى أعلى.لا يوجد اختبار التكامل في حد ذاته.
  • قواعد بيانات كبيرة موجودة مع الكثير من الجداول وطرق العرض وما إلى ذلك.فقط لإنشاء مثيل لكائن عمل واحد، هناك بالفعل قدر كبير من الرحلات ذهابًا وإيابًا لقاعدة البيانات.

كيف يمكننا تقديم TDD في هذه المرحلة؟

يبدو أن السخرية هي الطريق الصحيح.لكن مقدار السخرية الذي يتعين علينا القيام به هنا يبدو أكثر من اللازم.يبدو أن هناك حاجة إلى تطوير بنية تحتية معقدة لنظام محاكاة يعمل مع الأشياء الموجودة (BO، وقواعد البيانات، وما إلى ذلك).

هل يعني ذلك أن TDD هي منهجية مناسبة فقط عند البدء من الصفر؟أنا مهتم بمعرفة الاستراتيجيات الممكنة لإدخال TDD في منتج ناضج بالفعل.

هل كانت مفيدة؟

المحلول

من المحتمل أن يؤدي إنشاء بنية تحتية وهمية معقدة إلى إخفاء المشكلات الموجودة في التعليمات البرمجية الخاصة بك.أوصي بأن تبدأ باختبارات التكامل، مع قاعدة بيانات اختبارية، حول مناطق قاعدة التعليمات البرمجية التي تخطط لتغييرها.بمجرد حصولك على ما يكفي من الاختبارات للتأكد من أنك لن تكسر أي شيء إذا قمت بإجراء تغيير، يمكنك البدء في إعادة بناء الكود لجعله أكثر قابلية للاختبار.

انظر أيضًا كتاب مايكل فيذرز الممتاز العمل بفعالية مع التعليمات البرمجية القديمة, إنه أمر لا بد منه لأي شخص يفكر في إدخال TDD في قاعدة التعليمات البرمجية القديمة.

نصائح أخرى

أعتقد أنه من الممكن تمامًا إدخال TDD في تطبيق موجود، في الواقع لقد قمت بذلك مؤخرًا بنفسي.

من الأسهل ترميز وظائف جديدة بطريقة TDD وإعادة هيكلة الكود الحالي لاستيعاب ذلك.بهذه الطريقة تبدأ باختبار قسم صغير من التعليمات البرمجية الخاصة بك ولكن التأثيرات تبدأ في الانتشار عبر قاعدة التعليمات البرمجية بأكملها.

إذا كان لديك خطأ ما، فاكتب اختبار وحدة لإعادة إنتاجه، مع إعادة هيكلة الكود حسب الضرورة (ما لم يكن الجهد يستحق ذلك حقًا).

شخصيًا، لا أعتقد أن هناك أي حاجة إلى الجنون ومحاولة إدخال الاختبارات التحديثية على النظام الحالي لأن ذلك يمكن أن يكون مملاً للغاية دون قدر كبير من الفائدة.

باختصار، ابدأ صغيرًا وسيصبح مشروعك مصابًا بالاختبارات بشكل متزايد.

نعم يمكنك ذلك.من وصفك، فإن المشروع في حالة جيدة - قدر كبير من أتمتة الاختبارات الوظيفية هو وسيلة للذهاب!في بعض الجوانب يكون أكثر فائدة من اختبار الوحدة.تذكر أن TDD != اختبار الوحدة، الأمر كله يتعلق بالتكرارات القصيرة ومعايير القبول القوية.

يرجى تذكر أن وجود مشروع حالي ومقبول يجعل الاختبار أسهل في الواقع - تطبيق العمل هو أفضل مواصفات المتطلبات.لذا فأنت في وضع أفضل من شخص لديه قصاصة من الورق للعمل بها.

ما عليك سوى البدء في العمل على متطلباتك الجديدة/إصلاحات الأخطاء باستخدام TDD.تذكر أنه ستكون هناك تكاليف إضافية مرتبطة بتبديل المنهجية (تأكد من أن عملائك على علم بذلك!) وربما تتوقع قدرًا كبيرًا من التردد من أعضاء الفريق الذين اعتادوا على "الطرق القديمة الجيدة".

لا تلمس الأشياء القديمة إلا إذا كنت في حاجة لذلك.إذا كان لديك طلب تحسين سيؤثر على العناصر الموجودة، فاحسب وقتًا إضافيًا للقيام بأشياء الإعداد الإضافية.

أنا شخصياً لا أرى قيمة كبيرة في تقديم بنية تحتية معقدة للنماذج - بالتأكيد هناك طريقة لتحقيق نفس النتائج في وضع خفيف الوزن ولكن من الواضح أن ذلك يعتمد على ظروفك

إحدى الأدوات التي يمكن أن تساعدك في اختبار التعليمات البرمجية القديمة (بافتراض أنك لن تتمكن من\لن يكون لديك الوقت لإعادة هيكلتها، هي Typemock Isolator:typemock.com يسمح بحقن التبعيات في التعليمات البرمجية الحالية دون الحاجة إلى استخراج واجهات ، وذلك لأنه لا يستخدم تقنيات الانعكاس القياسية (الوكيل الديناميكي وما إلى ذلك) ولكنه يستخدم واجهات برمجة تطبيقات Profiler بدلاً من ذلك.لقد تم استخدامه لاختبار التطبيقات التي تعتمد على Sharepoint وHTTPContext وغيرها من المناطق التي بها مشاكل.أنصحك بإلقاء نظرة.(أنا أعمل كـ DEV في تلك الشركة ، لكن هذه هي الأداة الوحيدة التي لا تجبرك على إعادة تشكيل رمز القديم الحالي ، مما يوفر لك الوقت والمال) وأود أن أوصي بشدة "العمل بفعالية مع الرمز القديم" لمزيد من التقنيات.

روي

نعم يمكنك ذلك.لا تفعل كل ذلك مرة واحدة، ولكن قم بتقديم ما تحتاجه فقط لاختبار الوحدة عندما تلمسها.

يمكنك أيضًا البدء بمزيد من اختبارات القبول عالية المستوى والمضي قدماً من هناك (ألق نظرة على فيتنس لهذا).

سأبدأ ببعض اختبارات التكامل الأساسية.سيحصل هذا على موافقة من بقية الموظفين.ثم ابدأ في فصل أجزاء التعليمات البرمجية الخاصة بك التي لها تبعيات.اعمل على استخدام حقن التبعية لأنه سيجعل الكود الخاص بك أكثر قابلية للاختبار.تعامل مع الأخطاء باعتبارها فرصة لكتابة تعليمات برمجية قابلة للاختبار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top