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

جودة البرمجيات / متقدم: الاستراتيجية والصمود والقيادة / الدرس 16

الاختبار بالخصائص والعلاقات التحويلية

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

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • صياغة خصائص ومولدات ضمن مجال محدد.
  • تصميم علاقات تحويلية حين تكون القيم الدقيقة مكلفة.
  • حفظ الأمثلة المضادة وتقييم قوة الخاصية.

الخاصية تحقق يمتد على مجال

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

حالة محلولة: الترتيب يحتاج أكثر من انتظام القيم

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

python أربعون مدخلاً محدوداً لتوضيح الخصائص
from itertools import product
from collections import Counter
for size in range(4):
    for values in product([-1, 0, 1], repeat=size):
        result = sorted(values)
        assert all(a <= b for a, b in zip(result, result[1:]))
        assert Counter(result) == Counter(values)
        assert sorted(result) == result

تعطي الأطوال 0–3 وثلاث قيم 1+3+9+27=40 مدخلاً. يفحص المثال ترتيب المكتبة القياسية لا تنفيذاً تطبيقياً غير متوفر.

ربط التشغيلات حين تصعب الإجابة الدقيقة

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

حالة محلولة: تبديل عناصر سلة بسيطة

لسلة إجماليها مجموع أسعار صحيحة غير سالبة، يحفظ تبديل العناصر الإجمالي وإضافة صفر تحفظه وضم سلتين يجمع إجماليهما. يثبت المجموع الدقيق 200 للمدخل [120, 80] العلاقة؛ فيبقى 200 بعد العكس وإضافة صفر. لا تصف الخصائص عروضاً تعتمد على الترتيب أو عتبات الشحن، فلا تنقلها آلياً. إذا فشلت حالة مولدة فاحفظها وصغّرها إلى مثال مضاد دون تغيير القاعدة المسببة للفشل.

python علاقات تحويلية لنموذج تسعير بسيط عمداً
def total(items):
    return sum(items)

a, b = [120, 80], [50]
assert total(a) == 200
assert total(list(reversed(a))) == total(a)
assert total(a + [0]) == total(a)
assert total(a + b) == total(a) + total(b)

يمنع التحقق الدقيق من 200 سنت مرور تنفيذ يعيد صفراً دائماً عبر جميع العلاقات دون كشف.

استخدام الإخفاق لتحسين المواصفة

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

الأخطاء الشائعة وإصلاحها

إغفال قيود مجال الخاصية

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

قبول نتيجة فارغة بخصائص ضعيفة

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

تعذر تكرار إخفاق عشوائي

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

اختبر فهمك

1. لماذا لا تكفي خاصية «المخرج المرتب منتظم»؟

اعرض الحل المشروح

المخرج الفارغ منتظم لكنه يفقد المدخل كله. أضف حفظ تعدد القيم بما فيها التكرار ومثالاً دقيقاً واحداً على الأقل. للمدخل [2, 1, 2] اطلب [1, 2, 2]؛ فمقارنة المجموعات وحدها تفوت فقد المكرر.

2. اقترح علاقة لتصدير مرشح حتمي مع حد لها.

اعرض الحل المشروح

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

أهم ما تعلمته

  • الخصائص والعلاقات التحويلية مراجع حكم جزئية بمجالات صريحة.
  • احفظ الأمثلة المضادة وتحدّ قبول تنفيذ ضعيف.

المراجع الرسمية