การระบุและแก้ไขข้อผิดพลาด
แนะนำใหม่| English | ความหมาย |
|---|---|
| bug/bʌɡ/ | ข้อผิดพลาด |
| debugging/ˈdiːbʌɡɪŋ/ | การแก้ไขข้อผิดพลาด |
| syntax error/ˈsɪntæks ˈerə/ | ข้อผิดพลาดทางไวยากรณ์ |
| logic error/ˈlɒdʒɪk ˈerə/ | ข้อผิดพลาดทางตรรกะ |
| runtime error/ˈrʌntaɪm ˈerə/ | ข้อผิดพลาดขณะทำงาน |
| overflow error/ˌəʊvəˈfləʊ ˈerə/ | ข้อผิดพลาดจากการล้น |
| edge case/edʒ keɪs/ | กรณีขอบเขต |
| expected output/ekˈspektɪd ˈaʊtpʊt/ | ผลลัพธ์ที่คาดหวัง |
โปรแกรมทุกตัวมีบัก
- ไม่ว่าทีมจะระมัดระวังเพียงใด โปรแกรมก็ยังคงมีข้อผิดพลาดอยู่
- ข้อผิดพลาดในโปรแกรมเรียกว่า บัก (bug)
- การค้นหาและแก้ไขบักเรียกว่า การดีบัก (debugging)
- ทักษะการดีบักเป็นความสามารถที่มีค่าที่สุดอย่างหนึ่งที่นักเขียนโปรแกรมสามารถพัฒนาได้
ข้อผิดพลาดประเภทใด?
Syntax error ทำให้โปรแกรมหยุดทำงาน; Logic error รันได้แต่ให้คำตอบผิด; Runtime error ทำให้崩溃ตรงกลาง; Overflow error ข้ามขอบเขตพื้นที่จัดเก็บ
งานในการค้นหาและแก้ไขข้อผิดพลาดในโปรแกรมเรียกว่า ______
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ความผิดพลาดคือบั๊ก; การแก้บั๊กคือ debugging
วงเล็บที่หายไปซึ่งทำให้โปรแกรมไม่ทำงานคือ:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
การละเมิดกฎของภาษาเป็นความผิดพลาดทางไวยากรณ์ (syntax error)
ทำไมความผิดพลาดด้านตรรกะจึงมักเป็นประเภทที่หาได้ยากที่สุด?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ไม่มีสิ่งใดแตกหักอย่างเห็นได้ชัด ดังนั้นคุณต้องเปรียบเทียบผลลัพธ์ที่ได้กับสิ่งที่คาดหวังไว้
ประเภทหลักของข้อผิดพลาด
- Syntax error (ความผิดพลาดทางไวยากรณ์) ขาดกฎของภาษา (เช่น ลืมวงเล็บ) — โปรแกรมจะไม่รัน
- Logic error (ความผิดพลาดทางตรรกะ) รันได้แต่ให้ผลลัพธ์ที่ ผิด เนื่องจากคำสั่งไม่ตรงกับแผน
- Runtime error (ความผิดพลาดขณะรัน) ทำให้โปรแกรมหยุดทำงาน ขณะกำลังรัน — เช่น การหารด้วยศูนย์
- Overflow error (ความผิดพลาดจากการล้นของข้อมูล) เกิดขึ้นเมื่อค่ามีขนาดใหญ่เกินพื้นที่จัดเก็บที่กำหนดไว้
การทดสอบด้วยเคสขอบเขต (เช่น ข้อมูลเข้าว่าง, ตัวเลขขนาดใหญ่พิเศษ) ช่วยค้นหาข้อบกพร่องที่ซ่อนอยู่
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ข้อบกพร่องมักซ่อนอยู่ที่จุดสุดขั้วที่โปรแกรมคาดหวังไว้
ในการตรวจสอบข้อบกพร่องในการทดสอบ คุณควรเปรียบเทียบผลลัพธ์จริงกับ:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ความแตกต่างระหว่างผลลัพธ์จริงและผลลัพธ์ที่คาดหวังบ่งชี้ถึงข้อบกพร่อง
วิธีการค้นหาข้อผิดพลาด
- ทดสอบด้วย อินพุตหลากหลาย รวมถึงกรณีพิเศษ — ตัวเลขใหญ่มาก, อินพุตว่าง, หรือ edge case (กรณีขอบเขต) ที่ขีดจำกัด
- เปรียบเทียบผลลัพธ์ที่ได้จริงกับ ผลลัพธ์ที่คาดหวัง; ความแตกต่างชี้ไปที่บัก
- เพิ่มคำสั่งพิมพ์ชั่วคราวเพื่อดูค่าภายใน เพื่อหาว่า จุดไหน ที่เริ่มผิดปกติเป็นครั้งแรก
- แบ่งส่วนและตรวจสอบ: ยืนยันว่าส่วนหนึ่งถูกต้อง แล้วลดขอบเขตส่วนที่เหลือลง
คุณควรทดสอบโปรแกรมทั้งหมดอีกครั้งหลังแก้ไขข้อบกพร่อง เพราะการแก้ไขอาจทำให้เกิดข้อบกพร่องใหม่
Difficulty 1/5 · 100 coins + a small bonus on first completion today
การทดสอบซ้ำอย่างรอบคอบคือสิ่งที่ทำให้ซอฟต์แวร์น่าเชื่อถือ
แก้ไขแล้วทดสอบใหม่
- Logic errors ยากที่สุด — ไม่มีอะไร "พัง" อย่างเห็นชัด คำตอบแค่ผิดไป
- การแก้บักหนึ่งตัวอาจก่อให้เกิดอีกบักขึ้นมาได้
- ดังนั้นหลังการแก้ไข ทุกครั้ง ต้อง ทดสอบใหม่ ทั้งโปรแกรม
- การทดสอบอย่างละเอียดและซ้ำๆ เปลี่ยนต้นแบบหยาบให้กลายเป็นซอฟต์แวร์ที่คนใช้ไว้วางใจได้
“รันได้” ไม่ใช่ “ถูกต้อง” Logic error รันได้โดยไม่เกิด crash หรือข้อความเตือน — โปรแกรมดูปกติแต่คำตอบผิด วิธีเดียวที่จะจับมันได้คือการเปรียบเทียบผลลัพธ์กับสิ่งที่เรา คาดหวัง ไม่ใช่แค่เช็คว่ามันรันได้หรือไม่
A bug คือข้อผิดพลาด; การแก้บักคือ debugging. A syntax error หยุดโปรแกรม, logic error รันได้แต่คำตอบผิด, runtime error ทำให้พังระหว่างรัน, และ overflow error เกินพื้นที่จัดเก็บ. ค้นหาบักด้วยการทดสอบอินพุตหลากหลาย (โดยเฉพาะ edge cases) เทียบกับ expected output, และต้อง re-test หลังแก้เสมอ.