كيف تتفادى الأخطاء الخفيّة أثناء البرمجة: ثأرُها صعب!

دائماً صيانةُ البرامج أكثر تكلفةً من إنتاجها إبتداءً بنفس الجودة

حينما كُنت أعمل في وظيفة “محلل دعم تقني” لم يكن عملي مقتصراً على حُدود مسمى الوظيفة، كانت مهمتي فعلياً دعم الفريق كاملاً لإنجاح الإصدارات الشهرية للنظام الذي نعمل عليه.

انضمّ إلى فريقنا عضوٌ جديد، فاجتمع الفريقُ لتعريفه بأعضاء الفريق قبل حضوري، فأتيتُ أثناء الاجتماع وعند دُخولي طُلب مني تقديمُ نفسي ومهمتي بالفريق.

رددتُ بجملتين..

إسمي مصطفى الطيب، أنا جامعُ النفايات  Garbage Collector

تعالت بعضُ الضحكات والابتسامات وهو ما قصدتُه ولم أزد على ذلك.. فبرغم الطرفة كان الجميع يعلم أن هذه هي مهمتي الحقيقية. جامعُ نفايات الفريق كما يفعل جامعُ النفايات في آلة جافا الافتراضية JVM.

لم تُوجد البرامج التي تعمل دون أخطاء بعد، توقّع الأخطاء بعد إطلاق الإصدارات دائماً

ما قبل وأثناء عملية إطلاق الإصدارة الشهرية تأتي العديد من المشاكل التي ربما تكون بسبب أخطاءٍ برمجيّة بسيطة أو مُركّبة، منطقيّة أو تقنيّة أو حتى تجاريّة.

تحتاجُ الأخطاء دوماً إلى عمليّة تحليل أوّلي لتحديد مصدر الخطأ، يليها إسنادُها إلى الشخص المناسب في القسم المناسب لإصلاح ذلك الخطأ.

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

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

خداعُ الحرُوف البصري!

هل تعلم |نّ حرف الألف المكتوب في كلمة “أن” السابقة ليس حرف ألف؟ إنّها علامة “أو” البرمجية. عُد إليها الآن وانسخها في ملف Notepad وكبّرها وتأكد 🙂

لقد خدعك توقُّعك لحرف الألف أو أن علامة “أو” البرمجية قد خدعتك .. اختر أيَّهما أحبُّ إليك 🙂

سُقت لك هذا المثال باللغة العربية، ولكن اللغة الإنجليزية مليئة بالمتشابهات من الأحرف والأرقام والعلامات مثل:

  • حرف إل الصغير l وعلامة أو |.
  • حرف B ورقم 8 في بعض الخطوط.
  • حرف آي الكبير I و رقم 1.
  • حرف S ورقم 5.

انظر للشفرة المصدرية التالية مثلاً

    public static void main(String args[]){
        Long totalRevenue = 5325l; 
        System.out.println(" Total Revenue = " + totalRevenue);
    }

هل تعلم ما هو الرقم الذي سيطبع في الشاشة؟ ركّز قليلاً ثم انظر إلى النتيجة أدناه

نتيجة تنفيذ البرنامج
نتيجة تنفيذ البرنامج

أين ذهب الرقم 1 في يمين مجموع الأرباح؟!!

نعم نعم.. إنّه حرف إل L الصغير الخاص بتعريف المتغير كنوع Long.

يفضل أن يستخدم حرف L الكبير للتعبير عن رقم من النوع Long لتفادي الخداع البصري لحرف L الصغير واعتقاده الرقم 1.

انظر للمثال أدناه والذي يدل على سهولة تلافي هذا النوع من الأخطاء.

    public static void main(String args[]){
        Long totalRevenue = 5015325L; 
        System.out.println(" = " + totalRevenue);
    }

التلاعب الشهير في معرّفات المخترقين بين الـ O والـ 0 كمثال آخر

إستخدام أرقام بدل الأحرف في معرّفات المخترقين
استخدام أرقام بدل الأحرف في معرّفات المخترقين

مثال آخر هو الخلط بين حرف O و صفر 0 والتي يستخدمها المخترقون في أسمائهم كثيراً للتمويه، مثل المثال التالي

    public static void main(String args[]){
        String role = "R0LE"; 
    }

بينما هذه الأخطاء ربما يكون من السهل الانتباهُ لها، أعتبر الخطأ التالي خطئاً مركباً لأنه يعتمد على التحويل من النظام الثماني إلى العشري.

11 تصبح 9 بسبب صفر إضافي فقط!

فكما تعلم عند تعريف رقم ثُمانيٍ في لغة جافا نسبق الرقم بالرقم صفر ثم يليه عدة أرقام تتراوح بين 0 و 7، وبالتالي إذا ما عرّفت متغيراً من النوع Int ثم أسندت له رقماً ثمانياً فستتم عملية التحويل دون أن تنتبه!

شاهد هذا المثال

    public static void main(String args[]){
        int age = 011;
        System.out.println("Age = "+age);
    }

طباعةُ هذا الرقم لن تكون 11 كما قد يعتقد البعض، بل ستكون 9

نتيجة التحويل من رقم ثماني إلى عشري
نتيجة التحويل من رقم ثماني إلى عشري

 

خاتمة

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

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

الأخطاء الخفية في الشفرة المصدرية

مصطفى الطيب

صديقٌ لنُظمِ المعلُومات و عُلومِ الحَاسِب و مُختصٌ بهما، مُحبٌ للعِلمِ و نَشرِه.
أُشاركُ معارفي و تَجاربي و خِبراتي في تَدويناتٍ و دوراتٍ من خلال مُدونةِ عُلوم.

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *