skipLink.label

Quest 38 - Edge Case Finder

Quest 38: Edge Case Finder

medium 25 minutes

🎯 Learning Objectives

  • ✅ ใช้ AI เป็นเครื่องมือค้นหา edge cases ในโค้ดที่มีอยู่
  • ✅ ระบุ input patterns ที่可能导致 unexpected behavior
  • ✅ เข้าใจ boundary conditions ที่ developer มักมองข้าม
  • ✅ สร้าง edge case catalog สำหรับ reuse

📖 Concept: AI-Powered Edge Case Discovery

Edge cases คือ input patterns ที่อยู่ “ขอบ” ของ expected behavior — เช่น empty strings, null values, boundary numbers, หรือ unexpected types

Developer ที่เขียนโค้ดมักจะมองข้าม edge cases เพราะ brain โฟกัสที่ “happy path” แต่ production bugs มักเกิดจาก edge cases ที่ไม่มีใครคิดถึง

AI เหมือน sensei ที่มองเห็น edge cases ที่คุณมองไม่เห็น — มันได้เห็น bugs นับล้านจาก training data และรู้ว่าpatterns ไหนมักจะ fail


⚙️ How It Works

กระบวนการ Edge Case Discovery

1. INPUT — ป้อนโค้ดให้ AI วิเคราะห์
↓
2. ANALYSIS — AI วิเคราะห์ data flow และ branching
↓
3. DISCOVERY — สร้าง edge cases จาก patterns ที่พบ
↓
4. CATEGORIZE — จัดกลุ่มตาม severity
↓
5. VERIFY — ทดสอบว่า edge cases ทำให้ fail จริง

หมวดหมู่ของ Edge Cases

หมวดตัวอย่างความเสี่ยง
Null/Undefinednull, undefined, empty stringสูง — มักทำให้ crash
Boundary0, -1, MAX_SAFE_INTEGERกลาง — อาจให้ผลลัพธ์ผิด
Type mismatchString แทน Number, Array แทน Objectสูง — logic error
Empty collectionsEmpty array, empty object, empty mapกลาง — logic อาจskip
ConcurrencyRace conditions, duplicate requestsสูง — hard to reproduce

💡 Example: วิเคราะห์ Edge Cases

// โค้ดที่ต้องวิเคราะห์
function calculateDiscount(price, discountPercent) {
const discount = price * (discountPercent / 100);
return price - discount;
}
// Edge Cases ที่ AI ค้นพบ:
const edgeCases = [
{ input: { price: 100, discountPercent: 0 }, desc: "Zero discount — should return original price" },
{ input: { price: 100, discountPercent: 100 }, desc: "100% discount — should return 0" },
{ input: { price: 100, discountPercent: -10 }, desc: "Negative discount — increases price?" },
{ input: { price: 0, discountPercent: 50 }, desc: "Zero price — always 0" },
{ input: { price: -100, discountPercent: 50 }, desc: "Negative price — makes no sense" },
{ input: { price: "100", discountPercent: 50 }, desc: "String price — type coercion?" },
{ input: { price: 100, discountPercent: 150 }, desc: "Discount > 100% — negative result" },
{ input: { price: NaN, discountPercent: 50 }, desc: "NaN price — NaN propagation" }
];
// AI ยังพบว่า:
// - ไม่มี input validation
// - ไม่มี upper bound check
// - floating point precision issues (0.1 + 0.2)

⚠️ Common Mistakes

Mistake 1: ทดสอบแค่ valid inputs

“แค่ test กับข้อมูลที่ถูกต้องก็พอ” → Production ได้รับ inputs ทุกรูปแบบ — null, undefined, empty, wrong types

Mistake 2: มองข้าม floating point precision

“100 * 0.1 = 10 ไม่เห็นมีปัญหา” → 0.1 + 0.2 = 0.30000000000000004 ใน JavaScript — ใช้ rounding เสมอ

Mistake 3: ไม่ test boundary values

“ค่าระหว่าง 0-100 น่าจะโอเค” → ทดสอบที่ 0, 1, 99, 100, 101 — boundary มักจะ break

Mistake 4: ไม่ catalog edge cases ที่พบ

“รู้แล้วก็เก็บไว้ในหัว” → เขียน edge case list ไว้ — developer ใหม่จะได้ไม่เจอปัญหาเดิม


📝 Knowledge Check

📝 Knowledge Check

Q1:Edge cases คืออะไร?

Q2:เพราะเหตุใด developer มักจะมองข้าม edge cases?

Q3:เพราะเหตุใด floating point precision จึงเป็น edge case ที่มักถูกมองข้าม?


🏋️ Quest: Edge Case Finder

พร้อมแล้วค้นหา edge cases! ใช้ AI หา inputs ที่โค้ดคุณอาจ handle ไม่ได้

  1. Download ไฟล์เริ่มต้นของ quest:

    Terminal window
    npx bluebeltdojo download quest-38-edge-case-finder
    cd quest-38-edge-case-finder
  2. เปิด problem.js ใน editor ของคุณพร้อมความช่วยเหลือของ AI

  3. Implement solve() ที่ discover edge cases ในโค้ด

  4. ตรวจสอบ solution ของคุณ:

    Terminal window
    node test.js
  5. เมื่อ tests ผ่านทั้งหมด ส่งคำตอบ:

    Terminal window
    npx bluebeltdojo submit

💡 Tip: ลองนึกถึง bug ที่คุณเคยเจอ — มันเกิดจาก edge case ที่มองข้ามใช่ไหม?


คำใบ้

  • คิดถึง null/undefined, type mismatches, boundary values
  • ลอง trace data flow จาก input ถึง output — จุดไหนบ้างที่อาจ break?
  • ทดสอบกับ inputs จริงๆ ว่า edge cases ทำให้ fail จริงไหม