Ruby / التكامل: البيانات والموارد وأدلة التنفيذ والثقة / الدرس 15
جعل الفحوص حتمية والاعتماديات صريحة
افصل صياغة Ruby وفحص السلوك وحل gems ونسخة التنفيذ ودليل المنصة في مشروع معزول.
في هذه الصفحة
أهداف الدرس
- صمّم فحص حد مفيدا لا يعتمد ساعة حقيقية أو خدمات خارجية.
- اشرح لماذا لا يكون Gemfile أو lockfile شهادة تنفيذ أو توافق.
تجيب الأدوات عن أسئلة مختلفة
يسأل فحص الصياغة هل يقرأ المفسر الملف، لا هل تصح قاعدة العمل. يحتاج اختبار السلوك نتائج متوقعة وحدودا ممثلة. يختار محلل gems نسخا بقيود، ويفحص التكامل اعتمادية فعلية. افصل الادعاءات في التقرير. لم تثبت Ruby هنا، فلم تُنفّذ أوامرها أو تُثبت اعتماديات. يفيد المخرج المتوقع تعليما عندما يُوسم بصدق ولا يعرض سجل اختبار ناجح.
مرّر السياق المتغير إلى القاعدة
تصعب موثوقية فحص سياسة تقرأ الساعة والعشوائية والشبكة والحالة العامة ضمنيا. اقبل القيم أو المتعاونين صراحة لاختيار حالة ثابتة. يستخدم المثال دقائق صحيحة لشرح حد، لا لحل المناطق والتوقيت الصيفي والمزامنة. يرفض المساواة عمدا لتمييز < عن<=. استخدم زمنا مناسبا فعليا وقرّر القاعدة مع مالكها قبل المنطقي المتوقع. قد يحفظ اختبار يكرر التنفيذ بلا مطلب مستقل الخطأ نفسه.
def before_cutoff?(now, cutoff)
now < cutoff
end
[[9, true], [10, false], [11, false]].each do |now, expected|
actual = before_cutoff?(now, 10)
raise 'cutoff mismatch' unless actual == expected
end
puts '3 declared cases passed'
3 declared cases passed
المخرج المتوقع 3 declared cases passed إذا نُفذ السكربت بنجاح. لم يعمل هنا، فلا يمثل نجاحا مسجلا.
أعلن التنفيذ وبيئة gems مستقلين
تحزم RubyGems مكتبات وتصف Bundler اعتماديات التطبيق وتحلها. Gemfile شيفرة Ruby لا بيانات غير موثوقة خاملة. يسجل lockfile اختيارا محلولا وتظل المنصة والامتدادات الأصلية والمحرك والنسخة مهمة. قد تكون المكتبات القياسية أو الافتراضية gems مستقلة النسخ، فلا تفترض مجموعة واحدة لكل تثبيت مطابق اللغة. اتبع سياسة المشروع وبيئته المخولة ولا تثبت عالميا لجعل مثال يبدو متحققا.
النطاق المعلن وعد يحتاج تحققا
يختار Gemfile التوضيحي سلسلة 3.3 ومصدرا عاما دون gems خارجية. هذا قيد تعليمي لا توصية لكل مشروع أو ادعاء اختبار كل تحديث. لم يُنفذ محلل أو أمر Bundler. يختبر التطبيق الحد الأدنى والتنفيذ المنشور والمحرك والمنصة الفعلية. وعند تبني Data أو واجهة مرتبطة بنسخة حدّث العقد وتحقق، ولا تعتمد آلة الكاتب بصمت. افصل بيانات الحزمة عن دليل التنفيذ.
source 'https://rubygems.org'
ruby '>= 3.3.0', '< 3.4.0'
ينتمي الجزء إلى Gemfile محلي يملكه المتعلم، وليس برنامجا مستقلا. لم يُقيّم أو يحل أو يثبت أو ينشر.
أبلغ بدقة عما نُفذ وما لم يُختبر
يسجل التقرير النسخة والمحرك والمصدر والاعتماديات والأمر والأمثلة والمخرج المرصود. سم المتعاونين الوهميين والحدود المستبعدة حتى لا يُفهم المحلي دليلا لملفات أو شبكة أو قاعدة أو تزامن. لا يصدق مسار واحد كل واجهة أو منصة. استخدم إطارا معدا عندما يفيد، وصرح باعتماده ولا تفترض إتاحته. يفحص التأليف بنية JSON والتطابق التقني اللغوي؛ ولا يستبدل تحليل Ruby أو اختبارها أو حل gems أو مراجعة جاهزية.
الأخطاء الشائعة وإصلاحها
يُعرض فحص الصياغة إثباتا لسياسة الموعد.
- لماذا يحدث؟
- اختلط نجاح القراءة بالتحقق السلوكي.
- كيف تصلحه؟
- نفذ حالات مفيدة وفق مطلب مستقل معلن.
- كيف تتجنب تكراره؟
- افصل نتائج الصياغة والوحدة والتكامل والمنصة.
تفشل اعتماديات مقفلة على منصة أصلية أخرى.
- لماذا يحدث؟
- عوملت بيانات الحل كتوافق تشغيل عام.
- كيف تصلحه؟
- تحقق من المحرك والمنصة والامتداد والنسخة صراحة.
- كيف تتجنب تكراره؟
- ضمّن البيئات الفعلية في خطة التوافق.
يُوسم مثال مختبرا رغم غياب المفسر.
- لماذا يحدث؟
- رُفع المتوقع لدليل تنفيذ مختلق.
- كيف تصلحه؟
- أبقه غير منفذ واذكر الأداة الغائبة بدقة.
- كيف تتجنب تكراره؟
- اشترط أمرا ونتيجة محفوظة لكل ادعاء تنفيذ.
اختبر فهمك
1. لماذا يشمل فحص الموعد المساواة تماما؟
اعرض الحل المشروح
تحسم الحالة < مقابل<=، وقد تنجح القبل والبعد معهما فتخفي الفرق. قرّر العمل أولا ثم اكتب المتوقع ونفذه في البيئة المختارة. يظل المتوقع الواضح غير مرصود حتى التنفيذ.
2. هل يثبت Gemfile بقيد Ruby تثبيت JSON وقابليتها للاستخدام؟
اعرض الحل المشروح
لا. يعلن قيد تنفيذ لا مجموعة مكتبات أو نجاح require. افحص الحزم والبيئة وصرح باحتياج المشروع وسجّل تشغيله المعزول عند توفره. لا تثبت اعتماديات عامة غير مرتبطة لتحويل الوثيقة لادعاء اختبار.
أهم ما تعلمته
- تجعل المدخلات الحتمية وسجلات التنفيذ الدقيقة الأدلة قابلة للتقييم.
- تبقى ادعاءات التنفيذ والاعتماديات والصياغة والسلوك والمنصة منفصلة.