Bohrbug هو خطأ برمجي يتصرف بشكل حتمي: مع نفس بيانات الإدخال، يتكرر في كل مرة دون استثناء. الاسم مشتق من نموذج نيلز بور الذري، حيث يتحرك الإلكترون في مدار محدد بدقة — بنفس القدر من التوقع مثل هذا الخطأ. وفقًا لـ ويكيبيديا (2026)، ينتمي Bohrbug إلى فئة العيوب الأسهل في التشخيص، حيث لا يتطلب ظروفًا خاصة للتكرار.
الرئيسية
Bohrbug هو نوع من الأخطاء البرمجية التي تظهر بشكل حتمي: مع نفس بيانات الإدخال، تؤدي دائمًا إلى نفس العطل. تم تقديم المصطلح من قبل الباحثين جيم جراي وأندرياس روتر في كتاب «Transaction Processing: Concepts and Techniques» (1993).
على عكس Mandelbug الذي يغير سلوكه بشكل فوضوي، فإن Bohrbug مستقر: يمكن للمطور تكراره مع إعطاء النظام نفس المعلمات. هذا يجعله مرشحًا مثاليًا للتصحيح التدريجي في بيئة التطوير.
يظهر Bohrbug في جميع مراحل دورة حياة البرمجيات — من التطوير إلى التشغيل. غالبًا ما يتم اكتشافه أثناء الاختبار، حيث يقوم مهندسو ضمان الجودة بتنفيذ سيناريوهات متكررة تؤدي إلى العطل بشكل مضمون.
وفقًا لتصنيف جراي وروتر، فإن Bohrbug هو عيب يفي بثلاثة شروط: مجموعة ثابتة من بيانات الإدخال، نفس حالة النظام، ونفس نتيجة العطل. إذا تم انتهاك شرط واحد على الأقل، يتوقف الخطأ عن كونه «بور».
يؤكد المؤلفان أن Bohrbug ليس بالضرورة خطأ بسيطًا. يمكن أن يكون معقدًا بشكل تعسفي في المنطق، لكن الحتمية تميزه عن جميع أنواع الأعطال الأخرى في التصنيف.
الاسم Bohrbug مشتق من اسم الفيزيائي الدنماركي نيلز بور، مبتكر النموذج الكوكبي للذرة. التشبيه بسيط: كما يتحرك الإلكترون في نموذج بور في مدار ثابت تمامًا، يكرر هذا الخطأ نفس السلوك في كل تشغيل.
اختار جراي وروتر هذا الاسم للتمييز بين الأخطاء الحتمية والفوضوية، التي أسماها Mandelbug — تكريمًا لعالم الرياضيات بينوا ماندلبروت، مؤسس نظرية الفراكتلات ونظرية الفوضى.
من المثير للاهتمام أنه في الأدب الناطق بالإنجليزية، يُستخدم مصطلح Bohrbug غالبًا كمرادف لـ «خطأ حتمي»، على الرغم من أنه أقل شيوعًا في البيئات الناطقة بالعربية. معظم المطورين يسمون هذه الأخطاء ببساطة «أخطاء قابلة للتكرار».
يمتلك Bohrbug مجموعة من الخصائص المميزة التي تساعد في التعرف عليه بين أنواع عيوب البرمجيات الأخرى. دعنا ننظر إلى كل خاصية بالتفصيل.
السمة الرئيسية لـ Bohrbug هي القدرة الكاملة على التوقع. إذا تعطل التطبيق مع بيانات إدخال معينة على جهاز المطور، فسوف يتعطل بنفس الطريقة تمامًا على جهاز المختبر وفي الإنتاج. لا عوامل عشوائية.
Bohrbug يتكرر في 100% من المحاولات. هذا يعني أن تصحيحه لا يتطلب أدوات خاصة — يكفي بيئة تطوير عادية ومصحح. يضع المطور نقطة توقف، ويشغل التطبيق، ويقدم بيانات الإدخال، ويمر عبر الكود خطوة بخطوة.
إذا لم يتم إصلاح Bohrbug، فسوف يتكرر في أي إصدار من البرنامج حتى لحظة الإصلاح. العوامل الزمنية — حمل المعالج، طور القمر، الوقت من اليوم — لا تؤثر على ظهوره.
يمكن تقسيم أسباب ظهور Bohrbug إلى عدة فئات. يساعد فهم هذه الفئات في العثور على جذر المشكلة بشكل أسرع.
الشرط المبني بشكل غير صحيح — هو السبب الأكثر شيوعًا لـ Bohrbug. على سبيل المثال، استخدم المطور عامل التشغيل `||` بدلاً من `&&`، مما أدى إلى تنفيذ غير صحيح لفرع الكود في كل مرة يتم فيها استدعاء الدالة مع وسائط معينة.
استخدام عامل التشغيل `<=` بدلاً من `<` أو الحالة العكسية — مصدر كلاسيكي لـ Bohrbug. إذا كان يجب أن تنفذ الحلقة 10 مرات ولكنها تنفذ 11 بسبب شرط غير صحيح، فهذا خطأ حتمي سيظهر في كل تشغيل.
الثوابت المشفرة بشكل ثابت والتي لا تتوافق مع منطق الأعمال تخلق أعطالًا مستقرة. على سبيل المثال، مهلة الاتصال بالخادم مضبوطة على 100 مللي ثانية بدلاً من 5000 — سينقطع الاتصال في كل طلب.
اكتشاف Bohrbug هو أسهل مهمة للمطور مقارنة بأنواع الأخطاء الأخرى. تسمح الطبيعة الحتمية بتطبيق طرق التصحيح القياسية.
public class DiscountCalculator {
public double calculate(double amount, boolean isPremium) {
// خطأ: المستخدمون المميزون يحصلون على خصم 5% بدلاً من 10%
if (isPremium) {
return amount * 0.95;
}
return amount * 0.90;
}
}
في هذا المثال، Bohrbug واضح: عند استدعاء `calculate(1000, true)`، يعيد الأسلوب دائمًا 950 بدلاً من 900. اختبار وحدة بسيط ببيانات إدخال ثابتة سيكشف المشكلة فورًا.
لاكتشاف Bohrbug، اختبارات الوحدة هي الأداة الأكثر فعالية. يكفي تغطية الدالة بمجموعة من الاختبارات بقيم حدية مختلفة، وسيظهر الخطأ الحتمي في أول تشغيل.
عند اكتشاف Bohrbug، فإن التصحيح التدريجي في بيئة التطوير هو أفضل طريقة للعثور على الجذر. يضع المطور نقطة توقف عند مدخل الدالة ويمر عبر كل سطر، مراقبًا قيم المتغيرات.
Bohrbug يختلف عن أنواع الأخطاء البرمجية الأخرى بسمة رئيسية — الحتمية. دعنا نقارن في جدول.
| نوع الخطأ | قابلية التكرار | السبب | صعوبة التصحيح |
|---|---|---|---|
| Bohrbug | 100% بنفس الإدخال | خطأ منطقي | منخفضة |
| Mandelbug | يعتمد على الحالة | سباق الخيوط، التوقيت | عالية |
| Schrödinbug | 0% حتى قراءة الكود | إدراك الخطأ | نفسية |
| Hindenbug | مرة واحدة | فشل متتالي | قصوى |
| Heisenbug | يتغير عند التصحيح | تحسين المترجم | متوسطة |
Bohrbug هو النوع الوحيد من الأخطاء الذي يمكن إعادة إنتاجه بشكل مضمون في ظروف محكومة. هذا يجعله الأكثر أمانًا من وجهة نظر التشخيص، ولكنه ليس أقل خطورة على المستخدم.
Heisenbug هو خطأ يختفي عند محاولة تصحيحه. على عكس Bohrbug، قد لا يتكرر Heisenbug في المصحح بسبب تغير توقيتات تنفيذ الكود. المطورون المبتدئون غالبًا ما يخلطون بين هذين النوعين.
دعنا ننظر إلى مثال حقيقي لـ Bohrbug في تطبيق متجر إلكتروني. تحسب الدالة التكلفة الإجمالية للطلب مع الضريبة.
public double calculateTotal(double subtotal, double taxRate) {
// خطأ: المطور ضبط taxRate كنسبة مئوية
// لكنه نسي القسمة على 100
return subtotal + (subtotal * taxRate);
}
عند استدعاء `calculateTotal(1000, 20)`، تعيد الدالة 21000 بدلاً من 1200 المتوقعة. هذا Bohrbug كلاسيكي: نفس بيانات الإدخال تؤدي دائمًا إلى نفس النتيجة غير الصحيحة. الإصلاح بسيط — إضافة القسمة على 100.
بعد الإصلاح، تعالج الدالة نسبة الضريبة بشكل صحيح:
public double calculateTotal(double subtotal, double taxRatePercent) {
return subtotal + (subtotal * taxRatePercent / 100.0);
}
يوضح هذا المثال بوضوح أن Bohrbug يمكن أن ينجم عن خطأ رياضي بسيط. لهذا السبب تعتبر مراجعة الكود واختبارات الوحدة الأدوات الرئيسية للوقاية من هذه العيوب.
الأسئلة الشائعة
Bohrbug هو نوع من الخطأ العادي يتميز بالحتمية الصارمة. كل Bohrbug هو خطأ، ولكن ليس كل خطأ هو Bohrbug. الخطأ العادي قد يتكرر بشكل غير مستقر أو يعتمد على عوامل خارجية.
يُسمى Bohrbug مستقرًا بسبب قدرته على التكرار في كل تشغيل بنفس بيانات الإدخال. هذه الخاصية تجعله متوقعًا ومريحًا للتصحيح — على عكس Mandelbug أو Heisenbug.
مصطلح Bohrbug أدخله جيم جراي وأندرياس روتر في عام 1993 في كتاب «Transaction Processing: Concepts and Techniques». قاما بتصنيف الأخطاء البرمجية حسب درجة الحتمية، مستخدمين تشبيهات من الفيزياء والرياضيات.
لإصلاح Bohrbug بسرعة، يجب: تكرار الخطأ في بيئة اختبار، المرور عبر الكود خطوة بخطوة في المصحح، العثور على السطر ذو المنطق غير الصحيح، وكتابة اختبار وحدة يتحقق من السلوك الصحيح.
نعم، Bohrbug يمكن أن يكون معقدًا بشكل تعسفي في منطقه. الحتمية لا تعني البساطة. قد يشمل الخطأ العديد من الشروط والاستدعاءات المتداخلة، لكن إذا كان يتكرر بشكل مستقر — فهو Bohrbug.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.