วิธีการใช้ การรวมกลุ่มของเซ็ต เป็นข้อมูลทดสอบเพื่อการทดสอบหน่วยที่มีประสิทธิภาพ

การทดสอบหน่วยเป็นแนวทางที่สำคัญในการพัฒนาซอฟต์แวร์ ประกันว่ารหัสของคุณทำงานตามที่คาดหวังในสภาวะที่หลากหลาย เมื่อทดสอบฟังก์ชันที่ขึ้นอยู่กับข้อมูลนำเข้าที่เป็นตัวเลข—เช่น ฟังก์ชันที่ตรวจสอบว่าความยาวสามเส้นสามารถสร้างรูปสามเหลี่ยมที่มีความถูกต้องหรือไม่ คุณจำเป็นต้องพิจารณาทั้งกรณีทั่วไปและกรณีขอบ บล็อกโพสต์นี้จะช่วยนำทางคุณในการสร้างและใช้งานการรวมกลุ่มของเซ็ตเป็นข้อมูลทดสอบ ซึ่งรับประกันการประเมินผลฟังก์ชันของคุณอย่างทั่วถึง

ทำความเข้าใจกับปัญหา

เมื่อทดสอบฟังก์ชันที่ตรวจสอบว่าความยาวสามเส้นสามารถสร้างรูปสามเหลี่ยมหรือไม่ คุณจำเป็นต้องมีชุดข้อมูลทดสอบที่หลากหลาย ซึ่งรวมถึง:

  • ค่าปกติ: ความยาวทั่วไป (เช่น 5, 10, 5)
  • กรณีขอบ: ค่า ที่ท้าทายอัลกอริธึม เช่น:
    • ตัวเลขลบ (เช่น -1, 0)
    • ตัวเลขที่ใหญ่มากซึ่งอาจก่อให้เกิดการโอเวอร์โฟลว์ (เช่น 1000, inf)
    • ค่าบนขอบของข้อมูลนำเข้าที่ถูกต้อง

นี่คือตัวอย่างชุดข้อมูลนำเข้าสำหรับการใช้งาน:

(inf, 0, -1), (5, 10, 1000), (10, 5, 5), (0, -1, 5), (1000, inf, inf)

ความท้าทายคือการสร้างการรวมกลุ่มของค่าเหล่านี้—ทั้งที่มีการซ้ำและไม่มีการซ้ำ มาเริ่มดูวิธีแก้ไขปัญหานี้อย่างมีประสิทธิภาพกันเถอะ

การสร้างการรวมกลุ่มของเซ็ต

ในการสร้างการรวมกลุ่มจากชุดของค่า คุณสามารถใช้การดำเนินการในหลายภาษาโปรแกรม ด้านล่างนี้ ฉันจะแบ่งปันวิธีการด้วย C ซึ่งช่วยให้คุณคำนวณการรวมกลุ่มได้อย่างถูกต้อง

การนำอัลกอริธึมไปใช้ใน C

ตามจิตวิญญาณของอัลกอริธึมทางคณิตศาสตร์ เราสามารถอ้างถึง “อัลกอริธึม 515” ซึ่งเสนอโดย Buckles และ Lybanon ฟังก์ชัน C ข้างล่างนี้จะช่วยสร้างการรวมกลุ่มของ p องค์ประกอบจาก n ในลำดับเล็กซิกโกราฟที่ x:

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 องค์ประกอบของการรวมกลุ่ม.
  • ลูปภายใน: ลูปนี้ใช้ดูลูปเพื่อลงเพิ่มมูลค่าในการรวมกลุ่มจนกว่าจะพบชุดที่ต้องการที่ 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;
}

สรุป

การทดสอบฟังก์ชันด้วยการรวมกลุ่มของชุดตัวเลขสามารถปรับปรุงความน่าเชื่อถือของซอฟต์แวร์ของคุณได้อย่างมาก โดยการสร้างชุดข้อมูลทดสอบที่หลากหลาย คุณสามารถประกันว่ารหัสของคุณสามารถจัดการกับข้อมูลนำเข้าที่ไม่คาดคิดได้

หากคุณมีคำถามหรือข้อเสนอแนะแนวทางการทดสอบ อย่าลังเลที่จะแชร์ความคิดเห็นของคุณในคอมเมนต์ มาร่วมกันทำให้การพัฒนาซอฟต์แวร์มีความแข็งแกร่งยิ่งขึ้น!