كيفية استخدام تجمعات المجموعات
كبيانات اختبار للاختبار الوحدوي الفعال
يعد الاختبار الوحدوي ممارسة أساسية في تطوير البرمجيات، حيث يضمن أن يتصرف الكود الخاص بك كما هو متوقع تحت ظروف متنوعة. عند اختبار الدوال التي تعتمد على مدخلات عددية — مثل تلك التي تحدد ما إذا كانت ثلاثة أطوال يمكن أن تشكل مثلثًا صالحًا — يجب أن تأخذ في الاعتبار كل من الحالات النموذجية والحالات الحدية. ستأخذك هذه المدونة عبر توليد واستخدام تجمعات المجموعات كبيانات اختبار، مما يضمن تقييمًا شاملاً لدالتك.
فهم المشكلة
عند اختبار دالة تتحقق مما إذا كانت ثلاثة أطوال يمكن أن تشكل مثلثًا، تحتاج إلى مجموعة متنوعة من حالات الاختبار. يشمل ذلك:
- القيم العادية: الأطوال النموذجية (مثل 5، 10، 5).
- الحالات الحدية: القيم التي تتحدى الخوارزمية، مثل:
- الأعداد السالبة (مثل -1، 0).
- الأعداد الكبيرة جدًا التي قد تسبب overflow (مثل
1000
،inf
). - القيم عند حدود المدخلات الصالحة.
إليك مثال لمجموعات مدخلات قد تستخدمها:
(inf, 0, -1)، (5، 10، 1000)، (10، 5، 5)، (0، -1، 5)، (1000، inf، inf)
التحدي هو توليد تجمعات من هذه القيم — سواء مع التكرار أو بدونه. دعنا نلقي نظرة على كيفية معالجة هذه المشكلة بشكل فعال.
توليد تجمعات المجموعات
لتوليد تجمعات من مجموعة من القيم، يمكنك تنفيذ ذلك في لغات برمجة مختلفة. أدناه، سأشارك طريقة باستخدام C، والتي تتيح لك حساب التجمعات بطريقة دقيقة.
تنفيذ الخوارزمية في C
في روح خوارزميات الرياضيات، يمكننا الرجوع إلى “الخوارزمية 515”، كما قدمها باكلز وليبانون. ستساعدك الدالة C التالية في توليد مجموعة p
العناصر مرتبة lexicographically من n
:
void combination(int* c, int n, int p, int x) {
int i, r, k = 0;
for(i = 0; i < p - 1; i++) {
c[i] = (i != 0) ? c[i - 1] : 0;
do {
c[i]++;
r = choose(n - c[i], p - (i + 1)); // مطلوب دالة مساعدة
k = k + r;
} while(k < x);
k = k - r;
}
c[p - 1] = c[p - 2] + x - k;
}
شرح الكود
- مدخلات الدالة: تستقبل الدالة مصفوفة
c
حيث سيتم تخزين التجمعات، العدد الإجمالي للعناصرn
، عدد العناصر التي سيتم دمجهاp
، والفهرس المحدد للتجمعx
لإنتاجه. - الحلقة الخارجية: تقوم الحلقة الخارجية بالتكرار لتعبئة
p - 1
من عناصر التجميع. - الحلقة الداخلية: تستخدم هذه حلقة do-while لزيادة التجميع حتى يتم العثور على المجموعة المطلوبة
x
.
الحصول على دالة المساعدة
ستحتاج إلى دالة choose
لحساب تجمعات n
تؤخذ k
في كل مرة:
int choose(int n, int k) {
if (k > n || k < 0) return 0;
if (k == 0 || k == n) return 1;
if (k == 1) return n;
int r = 1;
for (int i = 1; i <= k; i++) {
r = r * (n - i + 1) / i;
}
return r;
}
الخاتمة
يمكن أن يحسن اختبار الدوال باستخدام تجمعات المجموعات العددية بشكل كبير موثوقية البرمجيات الخاصة بك. من خلال توليد حالات اختبار متنوعة، يمكنك التأكد من أن كودك يمكنه التعامل مع المدخلات غير المتوقعة.
إذا كانت لديك أسئلة أو اقتراحات حول تنفيذ استراتيجيات الاختبار، فلا تتردد في مشاركة أفكارك في التعليقات. معًا، يمكننا جعل تطوير البرمجيات أكثر قوة!