الاختبار ليس للمبتدئين

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

ولكن على الرغم من كل حبي للاختبار ، لا أوصي به للمبتدئين.

يبدو البرية ، أليس كذلك؟ في هذه المقالة ، سأوضح وجهة نظري بمزيد من التفصيل ، لكن النقطة برمتها ، في النهاية ، تنقسم إلى نقطتين:

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

أفهم أن هذه ، من حيث المبدأ ، نقطة واحدة. في أي حال ، لقد قسمتها إلى قسمين من أجل تسهيل فهمها.

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

المبتدئين يفتقرون إلى المعرفة لكتابة أي شيء آخر غير أبسط الاختبارات


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

تأكيد هذا من غير المرجح أن يتطلب أي جهد ، فقط انظر إلى الكود المكتوب بواسطة المبتدئ.

الذهاب تطبيق الويب؟ من المؤكد أنهم يكتبون استعلامات SQL في كل مكان وفي كل مكان في الشفرة ، ويكاد يكون الاتصال بقاعدة البيانات مضمونًا ليتم تخزينه في متغير عمومي.

تطبيق القضبان؟ بالتأكيد سترى منطق العمل في طرق العرض وأطنان من الاختناقات المنطقية في وحدات التحكم.

PHP تطبيق الويب؟ لن أفاجأ إذا كان كل المنطق موجودًا في ملف php واحد - تحليل النماذج ، التفاعل مع قاعدة البيانات ، إلخ.

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

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

نتيجةً لذلك ، بالنسبة للمبتدئين ، فإن أبسط الاختبارات مثل هذه تبدو منطقية:

func Add(a, b int) int { return a+b } // And a test... func TestAdd(t *testing.T) { got := Add(2, 4) want := 6 if got != want { t.Errorf("Add() = %d; want %d", got, want) } } 

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

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

محاولة تدريب المهارات اللازمة لكتابة اختبارات واقعية أثناء تعلم البرمجة أمر صعب للغاية


كما في السابق ، أريدك أن تفكر في الكود الذي كتبه مبتدئ ، لكن هذه المرة أريدك أن تتذكر بعض البرامج الأولى التي كتبتها.

إذا كنت مثلي ، فقد يبدو تطبيق الويب الأول الخاص بك كما يلي:

 <p> <?php // This may not work. I don't know PHP anymore. $name = $_GET['name']; echo "Hello, " . $name; ?> </p> 

عمل فني ، أليس كذلك؟

الآن تخيل أنك كتبت هذا الرمز لأول مرة وشخص يخبرك أنه يجب عليك اختباره. وعليك استخدام React. والإطار. أوه ، ولن يؤذيك تعديل قرص قاعدة البيانات وربما GraphQL للعمل معها.

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

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

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

في الواقع ، لا أعتقد أن الاختبارات هي السبب ، المشكلة الحقيقية هي أننا نعتقد اعتقادا راسخا أنه يجب عليك أن تتعلم البرمجة والاختبار وبناء المواقع ومليون الأشياء الأخرى في نفس الوقت. لا أعرف حقًا كيف حدث هذا ، لكنني أظن أن جزءًا من المشكلة هو أننا لا نكلف أنفسنا عن التفكير في تكلفة دراسة كل هذا. مبتدئ يسأل "ماذا علي أن أتعلم؟" ونبدأ "تعلم الاختبار ، والرد ، graphql ونذهب ، ولكن استخدم المكتبة القياسية فقط ..."

لا ، لا ، ومرة ​​أخرى لا. توقف فقط.



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

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

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

لكن ماذا لو أردت معرفة كيفية الاختبار؟! (ومليون شخص آخر "ماذا لو")


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

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

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

Source: https://habr.com/ru/post/ar451118/


All Articles