سؤال

لقد جعلت من عدد قليل من الخوارزميات الوراثية;كانوا يعملون (وجدوا حلا معقولا بسرعة).لكنني اكتشفت الآن TDD.هل هناك طريقة لكتابة الخوارزمية الجينية (الذي يعتمد بشكل كبير على أرقام عشوائية) في TDD الطريقة ؟

طرح السؤال أكثر عموما ، كيف يمكنك اختبار غير القطعية طريقة/عمل.هنا هو ما كنت قد فكرت من:

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

  2. استخدام المعروف قائمة من الأرقام.على غرار ما سبق ولكن أنا يمكن أن تتبع التعليمات البرمجية من خلال باليد (التي قد تكون مملة جدا).

  3. استخدام عدد ثابت.على الأقل أنا أعرف ما يمكن توقعه.سيكون من الجيد لضمان النرد دائما يقرأ 6 عندما RandomFloat(0,1) دوما بإرجاع 1.

  4. نقل أكبر قدر من غير القطعية رمز من GA ممكن.الذي يبدو سخيفا لأن ذلك هو جوهر الغرض.

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

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

المحلول

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

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

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

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

نصائح أخرى

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

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

W/R/T الخاص بك 4 نقطة ، تتحرك غير حتمى رمز من GA, أعتقد أن هذا هو على الارجح النهج يستحق النظر.إذا كنت يمكن أن تتحلل الخوارزمية وفصل غير حتمى المخاوف ، ينبغي إجراء اختبار القطعية أجزاء واضحة.طالما كنت حذرا حول كيفية تسمية الأشياء لا أعتقد أنك التضحية بكثير هنا.إلا أنا سوء الفهم لك, جورجيا لا تزال مندوب إلى هذا الرمز ، ولكنه يعيش في مكان آخر.

بقدر روابط الكتب الجيدة جدا على (المطور) اختبار المفضلة هي:

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

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

بهذه الطريقة يمكنك أن تفعل TDD مع منطق الدالة وتمرير بعض الجينات و أرقام معينة ، مع العلم بالضبط ما ينبغي أن المنطق لا على الجينات بالنظر إلى أن الأرقام أن تكون قادرة على كتابة يؤكد على الجينات المعدلة.

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

يمكن أن تكتب زائدة الشبكة العصبية لتحليل النتائج من خوارزمية الخاص بك و يكون الناتج المرتبة على أساس النتائج المتوقعة.:)

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

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

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

كتبت C# TDD الخوارزمية الجينية التعليمية التطبيق:http://code.google.com/p/evo-lisa-clone/

لنأخذ أبسط نتيجة عشوائية الأسلوب في التطبيق:PointGenetics.خلق مما يخلق نقطة عشوائية نظرا الحدود.هذه طريقة انا استخدمت 5 اختبارات أيا منها لا تعتمد على محدد البذور:

http://code.google.com/p/evo-lisa-clone/source/browse/trunk/EvoLisaClone/EvoLisaCloneTest/PointGeneticsTest.cs

العشوائية اختبار بسيط:كبيرة الحدود (العديد من الاحتمالات) ، وهما على التوالي إنشاء نقطة لا ينبغي أن يكون على قدم المساواة.المتبقية من اختبارات التحقق من قيود أخرى.

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

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

وبعبارة أخرى ، لن تكون قادرة على اختبار إذا GA ينفذ فعلا بخلاف الخير من الحلول.

اختبار خوارزمية يعطيك نفس النتيجة لنفس المدخلات يمكن أن تساعدك ولكن في بعض الأحيان سوف تجعل التغييرات التي تغير نتيجة اختيار السلوك الخوارزمية.

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

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

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

أود أن أقترح بشدة النظر في استخدام كائنات وهمية الخاص بك وحدة حالات الاختبار (http://en.wikipedia.org/wiki/Mock_object).يمكنك استخدامها تسخر الكائنات التي تجعل عشوائية التخمينات من أجل يؤدي إلى الحصول على النتائج المتوقعة بدلا من ذلك.

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