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



عادة ما نواجه -كمبرمجين- مشاكل برمجية مختلفة، نريد الوصول لأفضل حل يمكننا من اجتياز المشكلة. عادة ما يتم تعريف الحل الجيد على أنه الحل الذي يحقق المعادلة التالية:

 

 

ناتج صحيح مع استخدام موارد أقل في مقابل كفاءة أعلى.


لكن التفكير البشري ربما يخطئ حتى في أفضل حالاته، فكيف نتأكد من فعالية حلولنا البرمجية بدقة وكفاءة؟ في السطور التالية سأعرض بعض الآليات والمعايير التي تعلمتها في الأسبوع الأول من الدورة التعليمية (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) التي قد يمكن لبرنامجك التعرّض لها: كأن يكون المدخل عبارة عن مجموعة من الأرقام السالبة، مصفوفة من الأصفار، حروف عوضاً عن الأرقام، وغير ذلك. قد تقوم بما سبق ذكره وتكتشف أن هنالك بعض الحالات التي ما زال يخطئ فيها الحل البرمجي الخاص بك.

 



مواضيع ذات صلة
مقالات مفيده