كيفية جعل المبرمجين المبتدئين يكتبون الاختبارات؟[مغلق]

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

  •  08-06-2019
  •  | 
  •  

سؤال

لدينا مبرمج مبتدئ لا يكتب ما يكفي من الاختبارات.
يجب أن أزعجه كل ساعتين، "هل كتبت اختبارات؟"
لقد حاولنا:

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

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

هل تعرف المزيد من الدوافع؟

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

المحلول

هذا هو واحد من أصعب الأشياء لكى يفعل.الحصول على شعبك ل احصل عليه.

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

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

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

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

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

نصائح أخرى

قم بمراجعة الكود قبل كل التزام (حتى لو كان "لقد قمت بتغيير اسم المتغير هذا لمدة دقيقة واحدة")، وكجزء من مراجعة الكود، قم بمراجعة أي اختبارات للوحدة.

لا تقم بالتوقيع على الالتزام حتى يتم إجراء الاختبارات.

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

بالنسبة لي، بدأت أصر على أن يتم التعبير عن كل خطأ أجده وأصلحه كاختبار:

  1. "هممم، هذا ليس صحيحا..."
  2. البحث عن مشكلة محتملة
  3. اكتب اختبارًا وأظهر فشل الكود
  4. إصلاح المشكلة
  5. أظهر أن الرمز الجديد قد نجح
  6. قم بالتكرار إذا استمرت المشكلة الأصلية

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

(أنا لا أعيش في بيئة برمجة تجارية، وغالبًا ما أكون المبرمج الوحيد الذي يعمل في مشروع معين.)

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

لنبدأ بهذا مع المبدع:

تبين أن التصميم يصبح أبسط.

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

وإظهاره يمنع العيوب.

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

مما يجعل الأمر أمرًا يتعلق بالغرور قائلاً إن المبرمجين السيئين فقط هم من لا يفعلون ذلك.

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

@جوستين ستاندرد:في بداية المشروع الجديد، يجتمع الشاب معك أو مع مبرمج كبير آخر.

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

@جوستين ستاندرد:يقرأ اختبار الوحدة 101 تقديم كيت رودس.

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

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

@دومينيك كوني:اقض بعض الوقت وشارك تقنيات الاختبار.

آه، هذا يساعدني على فهم ما هو متوقع مني فيما يتعلق بالتقنيات، ويضع المزيد من العناصر في حقيبتي المعرفية، التي قد أستخدمها مرة أخرى.

@دومينيك كوني:الإجابة على الأسئلة والأمثلة والكتب.

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

@آدم هايل:مراجعة مفاجئة.

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

@ريتميس:يتم اعتبار العناصر منتهية فقط عندما تحتوي على حالات اختبار.

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

@com.jmorris:تخلص/ ضحى.

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


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

التفكير، الإعداد، التدريس، المتابعة، الدعم.

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

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

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

إليك ما سأفعله:

  • أول مرة خارج..."سنقوم بهذا المشروع معًا.سأكتب الاختبارات وأنت ستكتب الكود.انتبه إلى الطريقة التي أكتب بها الاختبارات، لأن هذه هي الطريقة التي نؤدي بها الأشياء هنا وهذا ما أتوقعه منك."

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

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

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

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

بالطبع، لا أعرف شيئًا حقًا.لكن أتمنى أن تكون الكلمات مفيدة.

يحرر:[جوستين ستاندرد]

لا تحبط نفسك، ما تريد قوله صحيح إلى حد كبير.

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

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

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

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

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

إنه يفعل هذا بالفعل.حقًا.هو فقط لا يكتبها.غير مقتنع؟شاهده وهو يمر بدورة التطوير القياسية:

  • اكتب قطعة من التعليمات البرمجية
  • تجميعها
  • تشغيل لنرى ماذا يفعل
  • اكتب القطعة التالية من التعليمات البرمجية

الخطوة رقم 3 هي الاختبار.لقد قام بالفعل بإجراء الاختبار، لكنه قام بذلك يدويًا فقط.اسأله هذا السؤال:"كيف تعرف غدا أن الرمز من اليوم لا يزال يعمل؟" سوف يجيب:"إنها كمية قليلة من التعليمات البرمجية!"

بسأل:"ماذا عن الأسبوع المقبل؟"

وعندما لا يجد إجابة، اسأل:"كيف تريد أن يخبرك برنامجك عند حدوث تغيير في شيء كان يعمل بالأمس؟"

هذا هو ما يدور حوله اختبار الوحدة التلقائي.

باعتباري مبرمجًا مبتدئًا، اعتقدت أنني سأكشف عما كان عليه الحال عندما وجدت نفسي في وضع مماثل لمطورك المبتدئ.

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

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

لحسن الحظ، بعد مرور عامين، أتمنى أن يعتبرني بعض زملائي مبرمجًا متوسطًا.

خذ نقاط المنزل

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

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

من يدري، ربما يتوصلون إلى شيء أفضل من التقنيات التي يستخدمها فريقك حاليًا.

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

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

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

أؤيد تعليق RodeoClown حول مراجعة التعليمات البرمجية لكل التزام.بمجرد قيامه بذلك عدة مرات، سوف يعتاد على اختبار الأشياء.

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

ملحوظة:أنت حقًا تريد ملحق ثاندربيرد للاختلافات الملونة إذا كنت تخطط للقيام بذلك.

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

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

ملحوظة:لدينا 2 مطورين "كبار" و3 مطورين صغار.قد لا يتم توسيع نطاق هذا الأمر، أو قد تحتاج إلى تعديل العملية قليلاً مع المزيد من المطورين.

  1. اجعل تغطية الكود جزءًا من المراجعات.
  2. اجعل "كتابة اختبار يكشف الخلل" شرطًا أساسيًا لإصلاح الخلل.
  3. يلزمك مستوى معين من التغطية قبل أن تتمكن من التحقق من الرمز.
  4. ابحث عن كتاب جيد عن التطوير المبني على الاختبار واستخدمه لتوضيح كيف يمكن للاختبار أولاً أن يسرع عملية التطوير.

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

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

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

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

حظ سعيد.

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

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

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

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

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

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

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

إنها مسؤولية معلمه أن يعلمه.ما مدى جودة تعليمه كيفية الاختبار.هل تقترن البرمجة معه؟على الأرجح أن المبتدئ لا يعرف كيفية إعداد اختبار جيد لـ xyz.

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

سيكون هو/هي جيدًا فقط بقدر مدى جودة التدريس.إذا كانوا قادرين على "فهم الأمر" هل تعتقد أنهم كانوا سيأخذون منصب مبتدئ في المقام الأول؟

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

@ جسموريس

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

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

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

"إذن هل ستستقيل إذن؟"

في مستودع المصدر الخاص بك:استخدم الخطافات قبل كل التزام (خطاف الالتزام المسبق لـ SVN على سبيل المثال)

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

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

يمكن لعمليات التحقق التلقائية فقط أن تتوسع بشكل جيد في المشروع.لا يمكنك التحقق من كل شيء باليد.

يجب أن يكون لدى المطور وسيلة للتحقق مما إذا كانت حالات الاختبار الخاصة به تغطي 100% من الكود.بهذه الطريقة، إذا لم يلتزم برمز تم اختباره بنسبة 100%، فهذا خطأه، وليس خطأ "عفوًا، آسف لقد نسيت".

يتذكر :لا يفعل الناس أبدًا ما تتوقعه، بل يفعلون دائمًا ما تتفقده.

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

إذا كانت مؤسستك كبيرة بما يكفي لتضم أكثر من 6 مطورين، فإنني أوصي بشدة بوجود قسم لضمان الجودة (حتى لو كان البدء بشخص واحد فقط).من الناحية المثالية، يجب أن يكون لديك نسبة مختبر واحد إلى 3-5 مطورين.الشيء الذي يتعلق بالمبرمجين هو ...إنهم مبرمجون وليسوا مختبرين.لا يزال يتعين علي إجراء مقابلة مع مبرمج تم تعليمه رسميًا تقنيات ضمان الجودة المناسبة.

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

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

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

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

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

إذا كانت مؤسستك أصغر من 6 أفراد، أو لا يمكنك إنشاء فريق جديد، فإنني أوصي بالبرمجة المقترنة (PP).أنا لست متحولًا تمامًا لجميع تقنيات البرمجة المتطرفة، لكنني بالتأكيد مؤمن بالبرمجة المقترنة.ومع ذلك، يجب أن يكون كلا العضوين في فريق البرمجة المقترنة مكرسين، وإلا فلن يعمل الأمر ببساطة.عليهم أن يتبعوا قاعدتين:يجب على المفتش أن يفهم تمامًا ما يتم ترميزه على الشاشة أو عليه أن يطلب من المبرمج شرحه؛يمكن للمبرمج أن يقوم فقط بترميز ما يمكنه تفسيره - ولن يتم التسامح مع عبارة "سترى" أو "ثق بي" أو التلويح باليد.

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

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

إذا فشل كل شيء آخر، اجعل المبرمجين يعادلون جرة القسم - في كل مرة يكسر فيها المبرمج البنية، عليهم وضع 20 دولارًا، 50 دولارًا، 100 دولار (أي ما هو مؤلم إلى حد ما لموظفيك) في جرة تذهب إلى المفضل لديك ( مؤسسة خيرية مسجلة.حتى يدفعوا، تجنبهم :)

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

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

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

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

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

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

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

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

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