ما هي الطريقة الأكثر إقناعًا لطلب اختبار الوحدة الرسمي؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

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

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

من خلال اختبارات الوحدة الرسمية، أنا أتحدث ببساطة عن ذلك

  • تحديد اختبارات الوحدة المراد كتابتها
  • تحديد بيانات الاختبار (أو وصفها)
  • كتابة هذه الاختبارات
  • تتبع هذه الاختبارات (وإعادة استخدامها حسب الحاجة)
  • إتاحة النتائج
هل كانت مفيدة؟

المحلول 13

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

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

نصائح أخرى

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

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

بمجرد إقناع زملائك المطورين، قم بإقناع الإدارة معًا.

أنا أستعمل مخضرم مع ال مؤكدة النجاح و كوبرتورا الإضافات لجميع بنياتي.يتم إنشاء حالات الاختبار الفعلية باستخدام JUnit, DbUnit و ايزي موك.

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

تحديد بيانات الاختباريعد DbUnit رائعًا لتحميل بيانات الاختبار لاختبارات الوحدة الخاصة بك.

كتابة حالات الاختبارأستخدم JUnit لإنشاء حالات الاختبار.أحاول كتابة حالات اختبار للتوثيق الذاتي ولكني سأستخدم Javadocs للتعليق على شيء غير واضح.

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

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

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

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

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

استخراج النقاط ذات الصلة -

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

أنا متأكد من أن بيئتك ستختلف ولكن المبادئ الأساسية قد تكون قابلة للترجمة.

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

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

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

  1. تتغير متطلبات البرمجيات
  2. تغييرات البرمجيات لتناسب المتطلبات

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

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

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

أتمنى أن يساعدك هذا.

التعليم و/أو الشهادة.

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

هناك فرق كبير بين مقنع و تتطلب.

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

فكر مرتين قبل إنشاء القواعد وتنفيذها.المطورون جيدون في التغلب عليها.

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

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

ذكّر فريقك أو المطورين الآخرين بأنهم محترفون وليسوا هواة.عملت بالنسبة لي!

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

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

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

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

https://testing.googleblog.com/2007/01/introducing-testing-on-toilet.html

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