هل لدى أي شخص مقاييس حول فائدة اختبار الوحدة الرسمي؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

هل لدى أي شخص مقاييس حول فائدة اختبار الوحدة الرسمي؟أرى اهتمامًا كبيرًا بأدوات اختبار الوحدة وكان لدي فضول لماذا؟

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

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

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

المحلول

وهنا هو الخيط الذي لديه بعض البحوث حول النهج TDD على TDD

هل هناك أدلة دامغة على العائد على الاستثمار من وحدة الاختبار؟

نصائح أخرى

وأقر التفوق بك كإنسان والمبرمج.

وأنا، ولكن، أنا مجرد معتوه، ودون بيثون unittest، سوف تضيع I.

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

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

وأنا وحدة اختبار لأنني أحمق. منذ كنت لا يخطئ، لك بوضوح لا تحتاج إلى اختبار وحدة. أحييكم.


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

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

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

ربما نسيت عددًا قليلاً من الآخرين :-P

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

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

فيما يلي بعض المستندات التقنية حول اختبار الوحدة التي قد تساعدك:

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

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

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

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

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

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

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

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

وفيما يلي مناقشة مثيرة للاهتمام على فائدة وحدة الاختبارات.

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

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

ولم يكن هناك تغير ملحوظ في معدلات الخطأ، ولكن ربما من المبكر جدا القول.

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

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

كل شيء آخر هو مجرد السحر الخالص.)

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

لقد حصلت على وجه التحديد على الكثير من المكاسب باستخدام التطوير المدفوع بالاختبار (TDD) مع C++ على تطبيق خادم متجانس ضخم.

عندما أعمل على منطقة من التعليمات البرمجية، أتأكد أولاً من أن هذه المنطقة مغطاة بالاختبارات قبل أن أقوم بتغيير أو كتابة تعليمات برمجية جديدة.

في حالة الاستخدام هذه لدي مكاسب هائلة في الإنتاجية.

  • لبناء الاختبار الخاص بي وتشغيله:10 ثواني.
  • لإنشاء الخادم الكامل وتشغيله واختباره يدويًا:دقيقة 5 دقائق.

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

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

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

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

في تجربتي، ساعدني اختبار الوحدة في الأشياء التالية:

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

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

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

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

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

يبدو لي أن اختبار الوحدة الرسمي باستخدام أدوات الاختبار الشائعة يشبه إلى حد كبير اختبار الولايات المتحدة.أمن المطار.

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

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

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

وتذكر ارتفاع شعبية 70 و 80 لحلاقة الشعر والملابس ... التي لا تعمل بشكل جيد جدا بالنسبة لنا، نحن الذين عاشوا في تلك العقود.

والرسمي وحدة اختبار يأخذ العمل والجهد للحفاظ كبير. كنت اعتقد ان الامر يستغرق 20-50٪ من الوقت اللازم لتطوير الواقع البرنامج. ما اطلبه هو لسعر المعروفة إضافة إلى 20-50٪ فوق كل جهود التنمية، هو مكسب يذكر و / أو proveable.

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

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

ما أود معرفته هو إذا كان هناك مدير البرنامج الذي يمكن أن تثبت زيادة الإنتاجية (أو حتى أعلى جودة) بعد إدخال وحدة الاختبار.

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

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