هل التطوير المبني على الاختبار جيد للمبتدئين؟[مغلق]

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

  •  02-07-2019
  •  | 
  •  

سؤال

توسيع هذا السؤال حول كيف تعلمت المرور من وصف المشكلة للكود ذكر شخصان TDD.

هل سيكون من الجيد للمبتدئين الدخول في TDD (وتجنب العادات السيئة في المستقبل؟) أم أن الأمر سيكون معقدًا للغاية بالنسبة لمرحلة فهم ما هي لغة البرمجة؟

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

المحلول

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

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

نصائح أخرى

أتمنى لو كان TDD موجودًا عندما كنت أتعلم البرمجة لأول مرة، وأنني تعلمتها قبل أن أترسخ في "الطريقة القديمة" بحيث أصبح من الصعب جدًا بالنسبة لي أن أتعلم TDD...

تجربة قواعد TDD الكل

أعتقد أيضًا أن TDD سيكون مفيدًا جدًا في المراحل الأولى من التعلم.أدركت بعد فوات الأوان أن ذلك سيساعدني في التعامل مع المشكلات في ضوء مختلف تمامًا.

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

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

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

def self.learn_tdd_and_programming_together?
  if you_have_tdd_mentor_sitting_next_to_you?
    "go for it"
  else
    if language.ruby?
      "it's possible, there is quite a bit of good stuff out 
      there that could give you a chance of learning programming 
      with TDD from the start. It's sort of in the ruby culture"
    elsif language.dot_net?
      "learn TDD after you learn the basics of .NET"  
    end
  end
end

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

أنا أعتقد ذلك تعليق يوضح أنه يمكن أن يكون أمرًا جيدًا جدًا للمبتدئين أن يتعلموا بشكل مباشر.

شعاري في البرمجة هو:

  1. قم بتشغيله - البرنامج يحل المشكلة
  2. اجعل الأمر صحيحًا - تم تصميم البرنامج بشكل نظيف وهناك قدر صغير من الازدواجية
  3. اجعلها سريعة - مُحسّنة (إذا لزم الأمر)

يتعامل التطوير القائم على الاختبار مع الأولين.

أعتقد أنه يجب تعليم المبتدئين TDD حتى يعرف كيفية تشغيل البرامج.IMHO، عندها فقط يمكن تدريس تقنيات التصميم الجيدة.

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

نعم!قطعاً.

أعتقد أنه ليس من الجيد لشخص يتعلم البرمجة فقط.كيف سيعرف هذا الشخص ما يجب تأكيده؟:P TDD مخصص للتصميم وليس للاختبار.بمجرد أن يعرف الشخص كيفية البرمجة، سيكون من الجيد البدء في دراسة نهج TDD.

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

من المزايا المهمة لـ TDD تحديد النضج.في البرمجة الخوارزمية البسيطة، إذا توصلت إلى عدة سيناريوهات يمكن من خلالها تأكيد الصحة بسهولة، فمن السهل تعدادها في اختبار الوحدة والاستمرار في البرمجة حتى تعمل جميعها.

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

ومع ذلك، إذا كان بإمكانك الإدلاء ببيان بسيط حول الصحة، وكان من السهل كتابته، فاكتبه بالتأكيد في الكود.

قد تلاحظ أيضًا أنه إذا لم يتم وصف بيان الصحة البسيط بسهولة، فقد لا تفهم مشكلتك بشكل كامل.

حظ سعيد...

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

الكود هو كود سواء كان هو الشيء الذي تحاول نشره، أو اختبارًا.

إن تعلم TDD في البداية له قيمة كبيرة.إنها واحدة من تلك المهارات التي يجب أن تكون عادة.هناك الكثير منا يفهم ويحب قيمة tdd ولكن سنوات من البرمجة غرست بعض العادات التي قد يكون من الصعب كسرها لاحقًا.

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

نأمل أن يساعدك استخدام TDD في الوصول إلى تصميم قابل للاختبار.والتصميم القابل للاختبار يكون من الناحية النظرية مغلفًا جيدًا ويجب أن يلتزم بالمبدأ المفتوح المغلق.

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

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