محتويات الدورة

Bash / المتوسط: بيانات ومسارات فشل موثوقة / الدرس 12

جعل البرامج قابلة للمراجعة والاختبار

ابن حد واجهة صغيراً وافصل التحويل عن الآثار وتحقق من النجاح والفشل بحاضنة معزولة.

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

أهداف الدرس

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

للبرنامج القابل للصيانة واجهة عامة ضيقة

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

صحة القواعد لازمة لا كافية

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

التحقق من الخرج والحالة منفصلين

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

bash اختبار تحويل صغير وعقد رفض
normalize() {
  case $1 in
    draft) printf 'DRAFT\n' ;;
    ready) printf 'READY\n' ;;
    *) return 2 ;;
  esac
}
actual=$(normalize draft)
status=$?
if [[ $status == 0 && $actual == DRAFT ]]; then
  printf 'PASS valid mode\n'
else
  exit 1
fi
if normalize unknown; then
  exit 1
else
  status=$?
  [[ $status == 2 ]] || exit 1
  printf 'PASS rejected mode\n'
fi
الناتج المتوقع
PASS valid mode
PASS rejected mode

ينجح فقط بصحة الخرج والحالة المرفوضة ولا ينفذ المساعد ملفات أو خدمات.

تحفظ المثبتات الخاصة قابلية التكرار

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

اختيار حالات تحمي حدوداً حقيقية

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

bash حماية عقد قائمة وسائط دقيقة
accept_two() {
  [[ $# == 2 && $1 == 'red apple' && -z $2 ]]
}
args=('red apple' '')
if accept_two "${args[@]}"; then
  printf 'PASS argument boundaries\n'
else
  printf 'FAIL argument boundaries\n'
  exit 1
fi
الناتج المتوقع
PASS argument boundaries

تتحقق الدالة من اثنين بما فيه الفارغ ويكسر الجمع أو غير المقتبس العقد.

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

اعتبار bash -n اختباراً كاملاً

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

طباعة FAIL مع صفر

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

تجاوز البديل عقد الفشل

لماذا يحدث؟
ينجح البديل دائماً.
كيف تصلحه؟
قدم فشلاً وخرجاً جزئياً مضبوطين.
كيف تتجنب تكراره؟
مثل الواجهة المعنية بدقة.

اختبر فهمك

1. لماذا لا يكفي النص الملتقط لاختبار الأسطر النهائية؟

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

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

2. يتعلق تراجع بتمرير مصفوفة دون اقتباس. ما التحقق؟

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

ليتحقق المتلقي من العدد والقيم لعنصر متباعد وفارغ. يفشل فقد الحدود مستقلاً عن أسماء وترتيب الداخل.

أهم ما تعلمته

  • اختبر السلوك والحالات بمثبتات معزولة.
  • احم العقود والإصدارات المدعومة.

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