Skip to main content

Software testing techniques (In Arabic)

متى ولماذا يجب علينا اختبار الكود البرمجي؟

 عادة ما نواجه -كمبرمجين- مشاكل برمجية مختلفة، نريد الوصول لأفضل حل يمكننا من اجتياز المشكلة. عادة ما يتم تعريف الحل الجيد على أنه الحل الذي يحقق المعادلة التالية: ناتج صحيح مع استخدام موارد أقل في مقابل كفاءة أعلى. لكن التفكير البشري ربما يخطئ حتى في أفضل حالاته، فكيف نتأكد من فعالية حلولنا البرمجية بدقة وكفاءة؟ في السطور التالية سأعرض بعض الآليات والمعايير التي تعلمتها في الأسبوع الأول من الدورة التعليمية (Algorithmic toolbox) على منصة Coursera.


لكي نقوم بتسهيل المفاهيم التالي ذكرها، سنفترض أننا نقوم بتطوير حل برمجي لمشكلة ما: لنفترض أن لدينا مصفوفة من الأرقام (الموجبة والسالبة) ماهي أكبر قيمة لحاصل ضرب أي رقمين في تلك المصفوفة؟


Input: arr = {1, 4, 3, 6, 7, 0}
Output: {6,7}

Input: arr = {-1, -3, -4, 2, 0, -5}
Output: {-4,-5}


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

لا تقع في حب وجهة نظرك الأولى


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

  • ابدأ ببعض الاختبارات اليدوية التي تتناول الحالات العامة والعادية: وليكن ذلك حتى تتأكد أن الحل على الأقل يقوم بحساب النواتج بشكل صحيح في الحالات العادية. وأقصد بالعادية هنا الحالات التي قد تتكرر دوماً. مثال: لنقوم بتجربة المدخلات كالتالي {1,2,3,5,9,8,10} فجميعها أرقام موجبة في تسلسل تصاعدي، أو كالتالي {900, 500, 800, 100} فجميعها أيضاً أرقام موجبة لكن بدون تسلسل واضح. 

  • بعد أن تتأكد أن البرنامج يقوم بحساب النواتج الصحيحة، قم بتخيّل عدد من الحالات القصوى التي يمكن لبرنامجك التعرّض لها (أكبر رقم، أكبر جملة، أقل رقم، ... ) 
  • بعد ذلك يجب أن تضع في اعتبارك الوقت ومساحة التخزين (في معظم الأحيان لا يتعلق الأمر بمجرد دالة بسيطة) فيجب أن تقوم بتخيّل مجموعة من الحالات التي قد تتسبب في استهلاك موارد الآلة بشكل كبير. أو أن يقوم البرنامج يتجاوز مساحة التخزين المخصصة له.

بعد ذلك يجب أن تضع في حسبانك الحالات الغير معتادة (corner cases) التي قد يمكن لبرنامجك التعرّض لها: كأن يكون المدخل عبارة عن مجموعة من الأرقام السالبة، مصفوفة من الأصفار، حروف عوضاً عن الأرقام، وغير ذلك.


قد تقوم بما سبق ذكره وتكتشف أن هنالك بعض الحالات التي ما زال يخطئ فيها الحل البرمجي الخاص بك، سأستعرض في الجزء الثاني آلية مشهورة تمكنك من استنتاج مواضع الخلل في الحل البرمجي حتى ولو لم يكن لديك فكرة مسبقة عن المشكلة!

Comments

Popular posts from this blog

سبر أغوار العقل البشري - نظرية العقل كصفحة الفارغة لچون لوك

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

ما وراء المنطق، بين المثالي والواقعي: أين تُرسم الحدود؟

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

Unlocking the Mind's Mysteries: The mind as a blank page (Tabula Rasa Theory)

Picture this: our philosophical journey is like a grand adventure. We've been exploring the idea of innate knowledge, something that has fascinated intelligent folks who think about big ideas. Before, we soared through the clouds of fancy thoughts with thinkers like Immanuel Kant . They believed that our minds held secret wisdom from the start. But now, we're changing course. Imagine John Locke as our guide on a daring quest. He's like a detective in the world of ideas. Locke, a famous philosopher, challenges the notion of innate knowledge. He says our minds are blank slates when we're born, with no secret knowledge. In this article, we're getting focused. We will look closely at the idea of innate knowledge but from a different angle - what we call "materialism." Locke says we don't pop into the world with built-in ideas. Instead, we learn stuff through our senses and by watching and experimenting. Join us for an exciting journey as we compare these ...