الخطوات التي يجب اتخاذها لدمج اختبار الوحدة ببطء في المشروع

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

سؤال

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

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

أعتذر إذا كانت معرفتي معيبة ولا ينبغي أن تكون هناك مشكلة على الإطلاق.أنا جديد على هذا :)

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

المحلول

<وأ href = "http://www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052/ref=sr_1_1؟ie=UTF8&s=books&qid=1221917700&sr=8-1" يختلط = "noreferrer"> العمل على نحو فعال مع رمز تراث من الريش مايكل

ومن الصعب معرفة ما إذا كان تنفيذ نمط مصنع سوف تفعل أي شيء طيب، يعتمد على ما رمز يقوم به:)

نصائح أخرى

العمل بفعالية مع الكود القديم بواسطة Michael Feathers (متوفر أيضًا في Safari إذا كان لديك اشتراك) يعد مصدرًا ممتازًا لمهمتك.يعرّف المؤلف الكود القديم بأنه كود بدون اختبارات الوحدة، ويقدم إرشادات عملية حول ذلك الكثير من الأساليب المحافظة - الضرورية لأنك تعمل بدون شبكة أمان - لإخضاع التعليمات البرمجية للاختبار.جدول المحتويات:

  • جزء:أنا آليات التغيير
    • الفصل 1.تغيير البرامج
      • أربعة أسباب لتغيير البرمجيات
      • تغيير محفوف بالمخاطر
    • الفصل 2.العمل مع ردود الفعل
      • ما هو اختبار الوحدة؟
      • اختبار المستوى الأعلى
      • أغطية الاختبار
      • خوارزمية تغيير الكود القديم
    • الفصل 3.الاستشعار والفصل
      • المتعاونون المزيفون
    • الفصل 4.نموذج التماس
      • ورقة ضخمة من النص
      • طبقات
      • أنواع التماس
    • الفصل 5.أدوات
      • أدوات إعادة الهيكلة الآلية
      • كائنات وهمية
      • أحزمة اختبار الوحدة
      • أحزمة الاختبار العامة
  • جزء:ثانيا تغيير البرمجيات
    • الفصل 6.ليس لدي الكثير من الوقت ويجب أن أغيره
      • طريقة تنبت
      • تنبت الطبقة
      • طريقة الالتفاف
      • التفاف الطبقة
      • ملخص
    • الفصل 7.يستغرق الأمر إلى الأبد لإجراء التغيير
      • فهم
      • الوقت الضائع
      • كسر التبعيات
      • ملخص
    • الفصل 8.كيف يمكنني إضافة ميزة؟
      • التطوير القائم على الاختبار (TDD)
      • البرمجة بالفرق
      • ملخص
    • الفصل 9.لا أستطيع إدخال هذا الفصل ضمن أداة الاختبار
      • حالة المعلمة المزعجة
      • حالة التبعية الخفية
      • حالة فقاعة البناء
      • حالة التبعية العالمية المزعجة
      • حالة الرهيبة تشمل التبعيات
      • حالة معلمة البصل
      • حالة المعلمة المستعارة
    • الفصل 10.لا أستطيع تشغيل هذه الطريقة في أداة الاختبار
      • حالة الطريقة الخفية
      • حالة ميزة اللغة "المفيدة".
      • حالة التأثير الجانبي غير القابل للاكتشاف
    • الفصل 11.أحتاج إلى إجراء تغيير.ما هي الطرق التي يجب أن أختبرها؟
      • التفكير في التأثيرات
      • التفكير إلى الأمام
      • انتشار التأثير
      • أدوات لاستدلال التأثير
      • التعلم من تحليل التأثير
      • تبسيط اسكتشات التأثير
    • الفصل 12.أحتاج إلى إجراء العديد من التغييرات في منطقة واحدة.هل يجب علي كسر التبعيات لجميع الفئات المعنية؟
      • نقاط الاعتراض
      • الحكم على التصميم بنقاط الضغط
      • قرصة نقطة الفخاخ
    • الفصل 13.أحتاج إلى إجراء تغيير ، لكنني لا أعرف اختبارات كتابة اختبارات التوصيف
      • توصيف الطبقات
      • الاختبار المستهدف
      • إرشادي لكتابة اختبارات التوصيف
    • الفصل 14.الاعتماد على المكتبات يقتلني
    • الفصل 15.تطبيقي هو جميع مكالمات API
    • الفصل 16.لا أفهم الكود جيدًا بما يكفي لتغييره
      • ملاحظات/رسم
      • ترميز القائمة
      • إعادة هيكلة الصفر
      • حذف الرمز غير المستخدم
    • الفصل 17.طلبي ليس له هيكل
      • رواية قصة النظام
      • عارية اتفاقية حقوق الطفل
      • التدقيق في المحادثة
    • الفصل 18.رمز الاختبار الخاص بي في الطريق
      • اصطلاحات تسمية الفئة
      • موقع الاختبار
    • الفصل 19.مشروعي ليس موجهًا للكائنات.كيف أقوم بإجراء تغييرات آمنة؟
      • قضية سهلة
      • حالة صعبة
      • إضافة سلوك جديد
      • الاستفادة من التوجه الكائن
      • كل شيء موجه نحو الكائنات
    • الفصل 20.هذا الفصل كبير جدًا ولا أريد أن يكبر
      • رؤية المسؤوليات
      • تقنيات أخرى
      • تحرك للأمام
      • بعد استخراج الطبقة
    • الفصل 21.أقوم بتغيير نفس الرمز في كل مكان
      • الخطوات الأولى
    • الفصل 22.أحتاج إلى تغيير طريقة مونستر ولا أستطيع كتابة اختبارات لها
      • أصناف من الوحوش
      • معالجة الوحوش من خلال دعم إعادة البناء الآلي
      • تحدي إعادة الهيكلة اليدوية
      • إستراتيجية
    • الفصل 23.كيف أعرف أنني لا أكسر أي شيء؟
      • تحرير Hyperware
      • تحرير هدف واحد
      • الحفاظ على التوقيعات
      • اتكئ على المترجم
    • الفصل 24.نحن نشعر بالإرهاق.لن يتحسن الأمر
  • جزء:III تقنيات كسر التبعية
    • الفصل 25.تقنيات كسر التبعية
      • التكيف المعلمة
      • كائن أسلوب الخروج
      • اكتمال التعريف
      • تغليف المراجع العالمية
      • فضح الطريقة الثابتة
      • استخراج وتجاوز المكالمة
      • استخراج وتجاوز طريقة المصنع
      • استخراج وتجاوز Getter
      • منفذ الاستخراج
      • واجهة الاستخراج
      • تقديم مفوض المثيل
      • تقديم أداة الضبط الثابتة
      • استبدال الارتباط
      • معلمة منشئ
      • طريقة المعلمة
      • إضفاء الطابع الأولي على المعلمة
      • ميزة السحب لأعلى
      • دفع التبعية إلى الأسفل
      • استبدل الوظيفة بمؤشر الوظيفة
      • استبدل المرجع العالمي بـ Getter
      • فئة فرعية وطريقة التجاوز
      • استبدال متغير المثيل
      • إعادة تعريف القالب
      • إعادة تعريف النص
  • زائدة:إعادة بناء التعليمات البرمجية
    • طريقة الاستخراج

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

وبطبيعة الحال، حتى هذا صعب عندما لا يناسب بنية المشروع إلى قابلية الاختبار.

وأفضل توصيتي سيكون أعتبر في خطوات صغيرة.

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

وبمجرد الانتهاء من ذلك العمل، يمكنك أن تبدأ ببطء لإضافة المزيد.

والمفتاح هو ببطء. وكما قلت، فإنه من السهل لجعل القانون القديم معفاة من اختبار لتبدأ. يمكنك دائما العودة إليها لاحقا مرة واحدة فريقك وقد استفادت فكرة وحدة اختبار وأصبح أفضل في كتابتها.

وماذا عن كتابة سلسلة من الاختبارات الصندوق الأسود حول قطع رئيسية من وظائف في التعليمات البرمجية؟ منذ أن أذكر لكم أنه مشروع ASP.NET، يمكنك استخدام إطار مثل WaitN أو <أ href ل = "http://seleniumhq.org/" يختلط = "نوفولو noreferrer"> السيلينيوم لأتمتة متصفح ويب. وهذا يوفر لك مجموعة الأساسي من الوظائف التي يجب أن تظل ثابتة بغض النظر عن مدى التغييرات التعليمات البرمجية.

وعندما يكون لديك عدد مريح من الاختبارات اختبار وظيفة رفيعة المستوى من المشروع الخاص بك، وكنت ثم تبدأ الغوص إلى رمز، وكما يذكر سيمون P. ستيفنز، والعمل <م> ببطء . الاستيلاء على (مجانا!) نسخة من ريفاكتور! ل Visual الأساسية، لذلك عليك أن تكون قادرة على أداء تلقائيا بعض إعادة الهيكلية الأساسية، مثل طريقة استخراج. يمكنك أن تزيد بشكل كبير قابلية الاختبار من دون تغيير أي وظيفة فقط من خلال تقسيم حتى قطع أكبر من التعليمات البرمجية إلى أجزاء أصغر حجما وأكثر قابلة للاختبار.

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