يجب أن أعترف: أنا أقرأ
مجلة ACM . يجعلني "الطالب الذي يذاكر كثيرا" ، حتى بمعايير المبرمجين. من بين أشياء أخرى ، تعلمت من هذه المجلة "اختبار التحول". لم أسمع به من قبل ، مثل كل الأشخاص الذين سألتهم. لكن الأدبيات العلمية حول هذا الموضوع ضخمة بشكل مدهش: هناك العديد من الأمثلة الناجحة بشكل لا يصدق لتطبيقه في مجالات مختلفة تمامًا من البحث. فلماذا لم نسمع منه من قبل؟ هناك مقال
واحد فقط للأشخاص خارج المجتمع العلمي. الآن دعونا يكون هناك اثنان منهم.
خلفية موجزة
معظم الاختبارات المكتوبة تستخدم
أوراكل . أي أنك تعرف الإجابة وتحقق بوضوح من أن الحسابات تعطي الإجابة الصحيحة.
def test_dist(): p1 = (0, 3) p2 = (4, 0) assert dist(p1, p2) == 5
بالإضافة إلى اختبارات أوراكل ، هناك أيضًا اختبارات يدوية. يجلس المختبر على الكمبيوتر ويقارن بيانات الإدخال بالنتائج. كلما أصبحت الأنظمة أكثر تعقيدًا ، أصبحت الاختبارات اليدوية أقل فائدة. يقوم كل منهم بالتحقق من نقطة واحدة فقط في مساحة دولة أكبر بكثير ، ونحن بحاجة إلى شيء يستكشف مساحة الولاية بأكملها.
هذا يقودنا إلى
اختبار عام : كتابة اختبارات تغطي مجموعة عشوائية في مساحة الدولة. الأسلوب الأكثر شيوعًا للاختبار التوليفي هو
الاختبار القائم على الملكية ، أو PBT نجد "خاصية" الوظيفة ، ثم نولد قيم المدخلات ونتحقق مما إذا كانت قيم المخرجات تتطابق مع هذه الخاصية.
def test_dist(): p1 = random_point() p2 = random_point() assert dist(p1, p2) >= 0
ميزة PBT هي أنه يغطي مساحة أكبر. العيب هو فقدان الخصوصية. هذا لم
يعد اختبار أوراكل! لا نعرف ماذا يجب أن تكون الإجابة ، وقد تكون الوظيفة خاطئة ، ولكن بطريقة لها نفس الخاصية. نحن هنا نعتمد على الاستدلال.
مشكلة خطيرة مع PBT هو العثور على خصائص جيدة. معظم الوظائف لها خصائص بسيطة وعامة وخصائص معقدة. يمكن تطبيق
الخصائص العامة على عدد كبير من الوظائف ، لكنها لا تقدم لنا الكثير من المعلومات. توفر المزيد من الخصائص المحددة مزيدًا من المعلومات ، ولكن يصعب العثور عليها وهي قابلة للتطبيق فقط في المناطق ذات المهام المحدودة. إذا كان لديك وظيفة تحدد ما إذا كان الرسم البياني acyclic ، فما هي اختبارات الخصائص التي ستكتبها؟ هل سوف يعطيك الثقة بأن الوظيفة صحيحة؟
حافز
الآن النظر في مهمة أكثر تعقيدا. تخيل أنك تريد كتابة محول تحويل النص إلى نص (STT) للغة الإنجليزية. يتلقى ملف صوت ، ويعرض النص. كيف يمكنك اختبار ذلك؟
أسهل طريقة لاستخدام أوراكل اليد. إملاء الجملة وتحقق مما إذا كان نص الإخراج يطابقها. ولكن هذا ليس حتى قريبة بما فيه الكفاية! نطاق الكلام البشري
ضخم . سيكون من الأفضل اختبار 1000 أو حتى 10000 ملف صوتي مختلف. أوراكل باليد مع النسخ ستكون مكلفة للغاية. هذا يعني أنه يتعين علينا استخدام الاختبارات القائمة على الممتلكات بدلاً من ذلك.
ولكن كيف يمكننا توليد المدخلات؟ على سبيل المثال ، يمكننا إنشاء خطوط عشوائية ، وتمريرها من خلال محول تحويل النص إلى كلام (تحويل النص إلى كلام ، تحويل النص إلى كلام ،) ثم التأكد من أن STT لدينا تنتج نفس النص. ولكن هذا يعطينا مرة أخرى مجموعة محدودة للغاية من صوت الإنسان. يمكن تحويل النص إلى كلام خلق تغييرات في التجويد ، "ابتلاع" الكلمات ، تقليد لهجة قوية؟ إذا لم نتمكن من التعامل معهم ، فهل ستكون STT مفيدة بشكل خاص؟ من الأفضل استخدام النصوص التعسفية ، على سبيل المثال ، التسجيلات من الراديو ، والبودكاست ومقاطع الفيديو عبر الإنترنت.
الآن تنشأ مشكلة جديدة. عند استخدام تحويل النص إلى كلام ، بدأنا بالنص المكتوب. في حالة ملفات الصوت التعسفي ، لا نملكها ، وفي الوقت نفسه لا نريد النسخ يدويًا. بدلاً من ذلك ، نحن مقيدون باستخدام الخصائص. ما الخصائص التي نحتاج إلى اختبارها؟ أمثلة على أبسط الخصائص: "لا يتعطل البرنامج مع أي بيانات واردة" (خاصية جيدة) أو "لا يحول الموسيقى الصوتية إلى كلمات" (ربما؟). هذه الخصائص لا تغطي التحقق من المهمة الرئيسية للبرنامج بشكل جيد للغاية وتزيد قليلا من الثقة في جودته.
لذلك ، لدينا مهمتين. أولا ، نحن بحاجة إلى كمية كبيرة من المدخلات في شكل خطاب. ثانياً ، نحتاج إلى فهم كيفية تحويلها إلى اختبارات مفيدة دون قضاء ساعات طويلة في نقل الأصوات يدويًا إلى أوراكل.
اختبار التحول
لهذا كله ، يعتبر الإخراج بشكل منفصل. ماذا لو قمنا بتضمينها في سياق أوسع؟ على سبيل المثال ، إذا تم نسخ مقطع صوتي إلى مخرج الإخراج ، فينبغي علينا
دائمًا out
بـ:
- مضاعفة مستوى الصوت
- زيادة التردد
- زيادة وتيرة
- مضيفا الضوضاء في الخلفية
- مضيفا ضوضاء السيارة
- أي مزيج من أعلاه.
هذه كلها تحولات "بسيطة" يمكننا اختبارها بسهولة. على سبيل المثال ، لاختبار "ضوضاء السيارة" ، يمكننا أخذ 10 عينات من ضوضاء السيارة ووضعها على مقطع صوتي والتحقق مما إذا كانت نتائج التعرف على جميع الإصدارات الأحد عشر متطابقة. يمكننا مضاعفة حجم الصوت أو زيادته ، وتحويل 11 إصدارًا إلى 33 إصدارًا ، ثم مضاعفة سرعة الحصول على 66 إصدارًا. يمكن تطبيق هذا المبدأ على كل مقطع صوتي في قاعدة البيانات الخاصة بنا ، مما يؤدي إلى توسيع مساحة البيانات الواردة بشكل ملحوظ.
وجود 66 نسخة للمقارنة مريحة للغاية. لكن هذا ليس كل شيء: ما زلنا لا نحتاج إلى معرفة ما يجب أن يكون عليه الناتج. في حالة عودة جميع التحويلات الستة والستين ، فإن الاختبار اجتاز بنجاح ، وإذا أرجع واحد على الأقل شيئًا آخر ، فقد فشل الاختبار. في أي مرحلة نحتاج إلى التحقق من ما هو وارد في
out
. هذا مهم للغاية. لذلك نحن زيادة مساحة الاختبار بشكل كبير مع القليل من تورط الإنسان. على سبيل المثال ، يمكننا تنزيل حلقة من السلسلة وتنفيذ التحويلات والتحقق مما إذا كانت جميع نتائج تحويلها إلى تطابق النص
1 . حصلنا على اختبارات مفيدة
دون الاستماع إلى مقطع الصوت . الآن يمكننا توليد اختبارات معقدة وعميقة دون استخدام أوراكل!
ترتبط مجموعتان من بيانات الإدخال ، وكذلك بيانات الإخراج الخاصة بهم مع بعضها البعض. تسمى هذه الخاصية المتعلقة بمجموعة البيانات الواردة / الصادرة
الرابط المتحولة 2 . يسمى الاختبار الذي ينطبق على هذه الخاصية
باختبار التحول . في الأنظمة المعقدة ، يمكن العثور على العلاقات المتحولة المثيرة للاهتمام بشكل أسهل من الخصائص المثيرة للاهتمام للبيانات الواردة / الصادرة الفردية.
دعنا نقولها بشكل رسمي أكثر قليلاً: إذا كان لدينا
x
و
f(x)
، فيمكننا إجراء بعض التحويلات من
x
للحصول على
x2
و
f(x2)
. في حالة STT ، نتحقق من
f(x) = f(x2)
، لكن يمكننا استخدام أي علاقات بين مجموعتي البيانات. قد تكون هناك علاقات متحولة مثل
f(x2) > f(x)
أو "is
f(x2)/f(x)
قيمة عددية." بطريقة مماثلة ، يمكن توسيع هذا المبدأ إلى عدة مجموعات من بيانات الإدخال باستخدام
f(x)
و
f(x3)
. مثال على ذلك هو مقارنة نتائج محرك البحث بدون مرشحات بنتائج محرك مع عامل تصفية واحد أو اثنين. في غالبية أوصاف حالات الاستخدام التي قرأتها ، يتم استخدام مجموعتين فقط من بيانات الإدخال ، لأنه حتى يكفي للعثور على الأخطاء المجنونة.
أمثلة الاستخدام
الحديث عن حالات الاستخدام: ما مدى فعالية اختبار التحول في الممارسة؟ هناك شيء واحد يمكن أن نتحدث عنه بطريقة مجردة أو لإعطاء أمثلة مصطنعة. دراسات الحالة مفيدة لثلاثة أسباب. أولاً ، يوضح ما إذا كانت الطريقة تعمل بالفعل. ثانياً ، يمكنك التعرف على الصعوبات المحتملة عند استخدام MT. ثالثًا ، توضح لنا الأمثلة
كيف يمكننا استخدام هذه التقنية. يمكن محاولة أي اتصال المتحولة المستخدمة في مثال الاستخدام للتكيف مع حل مشاكلنا.
يوفر اختبار التحول: مراجعة للتحديات والفرص قائمة بالعديد من الدراسات ، ولكنها كلها مقالات علمية. أدناه هي الأكثر إثارة للاهتمام. يتم وضع المقالات التي تحمل علامة
(pdf)
، كما تعتقد ، في PDF.
المشكلة
أوه ، لذلك
كل هذه المصادر في PDF.
استغرق الأمر عدة ساعات للعثور على كل هذه المقالات. وترتبط هذه المشكلة مع أكبر عقبة أمام تطوير MT: جميع الروابط المذكورة أعلاه هي
مخططات أو المسودات الأولى من المقالات العلمية في المستقبل. عندما أبدأ في فهم التقنيات غير المعروفة ، أطرح على نفسي أولاً السؤال التالي: "لماذا غير معروفة؟" في بعض الأحيان يكون السبب واضحًا ، وأحيانًا يكون ذلك عبارة عن مجموعة معقدة من الأسباب الصغيرة ، وفي بعض الأحيان تكون المشكلة ببساطة هي أن المنهجية "محظوظة".
في حالة MT ، المشكلة واضحة.
يتم إخفاء جميع المعلومات تقريبًا خلف paywall العلمي. إذا كنت ترغب في دراسة MT ، فأنت بحاجة إلى الوصول إلى المجلة ، أو تحتاج إلى قضاء عدة ساعات في البحث عن المواد الأولية
3 .
مزيد من الدراسة
مخترع MT هو
Ty Chen . أصبح القوة الدافعة للعديد من الدراسات. باحثون آخرون في هذا المجال هم
زهي تشيوان تشو وسيرجيو سيجورا . كلاهما نشر جميع مخططاتهم على الإنترنت. تتم معظم الأعمال البحثية بواسطة أحد هؤلاء الأشخاص.
من المحتمل أن يكون أفضل مكان للبدء هو
اختبار التحوُّل: مراجعة للتحديات والفرص ومسح حول اختبار التحوُّل . على الرغم من أن هذه المقالة مكتوبة عن
اختبار التحول ، إلا أن الباحثين قاموا أيضًا بتطبيق العلاقات المتحولة بشكل عام على مجموعة واسعة من التخصصات الأخرى ، على سبيل المثال ، التحقق من الكود الرسمي وتصحيح الأخطاء. لم أدرس بعد مجالات تطبيق هذه التقنية بالتفصيل ، لكن ربما يجدر النظر إليها أيضًا.
من الناحية التطبيقية ، قد يكون من الممكن نظريًا تكييف معظم مكتبات PBT للتحقق من الخصائص المتحولة. في الواقع ، المثال الأول في
Quickcheck هو اختبار MS ، وفي
هذه المقالة على PBT ، يتم تطبيق MS بشكل غير مباشر.
بشكل عام ، يبدو لي أن معظم أبحاث PBT تركز على توليد وخفض البيانات الواردة بكفاءة ، وتركز أبحاث MT بشكل أساسي على تحديد ما نحتاج فعلاً إلى اختباره. وبالتالي ، من المرجح أن تكمل هذه التقنيات بعضها البعض.
بفضل براين نغ للمساعدة البحثية.بوستسكريبت: طلب
في الواقع ، ليس غريباً أنني لم أسمع بهذه التقنية من قبل. هناك العديد من التقنيات المفيدة والمفيدة حقًا والتي لم تستطع ترك فقاعة صغيرة. لقد اكتشفت عن MTs من خلال الحظ بدلاً من البحث النشط.
إذا كنت تعرف شيئًا يستحق الاستخدام الواسع ،
فيرجى الكتابة إلي .
- حسنًا ، قد تكون هناك مشاكل واضحة: قد تكون هناك موسيقى في البودكاست ، أو أجزاء من الكلام بلغات أخرى ، إلخ. لكن النظرية يمكن الاعتماد عليها: إذا تمكنا من الحصول على عينات من الكلام ، فيمكننا استخدامها كجزء من الاختبارات دون النسخ اليدوي / الترميز اليدوي.
- في المواصفات ، تكون الفكرة المقابلة هي hyperproperties - خصائص مجموعات من السلوكيات ، وليس سلوكيات فردية. ترتبط معظم الدراسات الفائقة بسلامة النظام المنسق. كما أفهمها ، HS الخاص به هي مجموعة من MS.
- كان لدي فرضية ثانية ، لم يتم دحضها الآن: نظرًا لأن معظم الباحثين الرئيسيين من الصين وهونج كونج ، ربما تكون هذه التقنية معروفة في مجتمعات المبرمجين الذين يتواصلون في الماندرين ، بدلاً من الإنجليزية. اختبر براين أون هذه الفرضية بالنسبة لي ، لكنه لم يجد أي علامات مهمة على استخدام هذه التقنية من قبل الصينيين.