การ ตรวจ หาข้อ ผิด พลาด ของโปรแกรม ทํา ได้ ด้วย วิธีการ ใด

ข้อผิดพลาดของโปรแกรม หรือที่มักเรียกกันว่า Error นั้น แบ่งออกเป็น 2 ประเภท ได้แก่
          1. ข้อผิดพลาดจากการเขียนโปรแกรม (Compile Error)
          2. ข้อผิดพลาดจากการทำงานของโปรแกรม (Runtime Error)

———————————————————————————————————————————

1. ข้อผิดพลาดจากการเขียนโปรแกรม (Compile Error)

การ ตรวจ หาข้อ ผิด พลาด ของโปรแกรม ทํา ได้ ด้วย วิธีการ ใด

          เป็นข้อผิดพลาดที่เกิดจากการเขียนคำสั่งผิด ไม่ตรงกับโครงสร้างของภาษาซี ซึ่งจะมีผลทำให้โปรแกรมที่เขียนขึ้นไม่สามารถแปลความหมาย และทำงานได้ จากนั้นโปรแกรมจะบอกถึงสาเหตุ และแสดงจุดที่ผิดพลาดตำแหน่งนั้น ๆ

          ตัวอย่าง เขียนโปรแกรมแสดงข้อความ Hello World บนจอภาพ แต่เขียนคำสั่งผิดจากฟังก์ชัน printf เป็นคำที่ผิดคือ print จึงทำให้เกิดข้อผิดพลาดแบบ Compile Error ขึ้น ดังรูปที่ 1

การ ตรวจ หาข้อ ผิด พลาด ของโปรแกรม ทํา ได้ ด้วย วิธีการ ใด

รูปที่ 1 ตัวอย่างการเขียนฟังก์ชัน printf ผิดพลาด

———————————————————————————————————————————

2. ข้อผิดพลาดจากการทำงานของโปรแกรม (Runtime Error)

การ ตรวจ หาข้อ ผิด พลาด ของโปรแกรม ทํา ได้ ด้วย วิธีการ ใด

          ข้อผิดพลาดประเภทนี้เป็นข้อผิดพลาด (Error) ที่ตรวจพบได้ยากกว่าแบบแรก เนื่องจากตัวแปลภาษาซีจะไม่ตรวจสอบคำสั่งผิดใด ๆ เลย เพราะผู้เขียนโปรแกรมเขียนคำสั่งต่าง ๆ ตามหลักการ และไวยากรณ์ของภาษาได้ถูกต้อง แต่จะเกิดปัญหาเมื่อมีการสั่งให้โปรแกรมทำงานมาจนถึงช่วงของคำสั่งนั้น ๆ ก็จะพบกับข้อผิดพลาดขึ้น ปัญหาจากข้อผิดพลาดประเภทนี้ที่พบบ่อยคือ ปัญหาหารด้วยศูนย์ (0) หรือที่เรียกว่า Divide By Zero รูปที่ 2

การ ตรวจ หาข้อ ผิด พลาด ของโปรแกรม ทํา ได้ ด้วย วิธีการ ใด

รูปที่ 2 ตัวอย่างการเขียนโปรแกรมเพื่อทดสอบ กรณี Divide By Zero

          แต่เมื่อสั่งให้โปรแกรมนั้นทำงานจะพบว่า โปรแกรมทำงานถึงบรรทัดที่มีข้อผิดพลาด แต่จะไม่สามารถแสดงผลลัพธ์ใด ๆ ออกมาได้ เนื่องจากเกิดข้อผิดพลาดลักษณะ Runtime Error ขึ้น ในกรณีนี้คือ การหารด้วยศูนย์ (Divide By Zero) ดังรูปที่ 3

การ ตรวจ หาข้อ ผิด พลาด ของโปรแกรม ทํา ได้ ด้วย วิธีการ ใด

รูปที่ 3 ตัวอย่างผลลัพธ์ข้อผิดพลาด กรณี Divide By Zero

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

(แหล่งข้อมูล...  คู่มือการเขียนโปรแกรมภาษา C ฉบับผู้เริ่มต้น / ประภาพร ช่างไม้)

———————————————————————————————————————————

8.5 ชนิดของข้อผิดพลาด (Type of Errors)

สำหรับข้อผิดพลาดที่เกิดขึ้นจากการเขียนโปรแกรม สามารถแบ่งออกเป็น 3 ชนิดด้วยกัน คือ
              1. ข้อผิดพลาดที่เกิดจากไวยากรณ์ (Syntax Errors)
              2. ข้อผิดพลาดที่เกิดจากตรรกะโปรแกรม (Logic Errors)
              3. ข้อผิดพลาดในขณะที่รันโปรแกรม (Runtime Errors)

1. ข้อผิดพลาดที่เกิดจากไวยากรณ์ (Syntax Errors)

ข้อผิดพลาดที่เกิดจากไวยากรณ์ (Syntax Errors) ข้อผิดพลาดชนิดนี้ เกิดจากการใช้ไวยากรณ์หรือรูปแบบภาษาที่ผิด เช่น สะกดคำสั่งผิด แทนที่จะต้องพิมพ์คำสั่ง clrscr ก็พิมพ์เป็น clrser เป็นต้น ซึ่งเมื่อผ่านการแปลแล้ว ตัวแปลภาษาก็จะไม่รู้จักคำสั่งดังกล่าว อย่างไรก็ตาม ข้อผิดพลาดจากไวยากรณ์นั้น คอมไพเลอร์สามารถตรวจสอบพบ และแจ้งข้อผิดพลาดที่เกิดขึ้นให้ทราบได้

ตัวอย่างที่ 16 ข้อผิดพลาดที่เกิดจากไวยากรณ์ (Syntax Errors)


การ ตรวจ หาข้อ ผิด พลาด ของโปรแกรม ทํา ได้ ด้วย วิธีการ ใด
Program Syntax_Error;
Uses WinCrt
Var Num := Integer;
Begin
  Clrser;
  Num=10;
  Writte(‘Number = ’);
  Write(Num);
  ReadLn;
End
การ ตรวจ หาข้อ ผิด พลาด ของโปรแกรม ทํา ได้ ด้วย วิธีการ ใด

2. ข้อผิดพลาดที่เกิดจากตรรกะโปรแกรม (Logic Errors)

ข้อผิดพลาดที่เกิดจากตรรกะโปรแกรม (Logic Errors) ข้อผิดพลาดชนิดนี้ เกิดจากตัวผู้เขียนโปรแกรมเอง เช่นการใช้ตรรกะในการสร้างเงื่อนไขผิดพลาด หรือการสร้างสูตรคำนวณที่ผิด ส่งผลให้ผลลัพธ์ผิดพลาดไม่ตรงกับความเป็นจริง เช่น การหาค่าเฉลี่ยของตัวเลขสองจำนวน ถ้าเราสร้างสูตรคือ Average = Num1 + Num2 / 2 ผลลัพธ์ที่ได้จะผิด เพราะถ้าเราดูที่ลำดับความสำคัญของเครื่องหมาย นิพจน์นี้จะทำการหารก่อน แล้วค่อยบวกทีหลังถ้าเราจะแก้ไขให้ถูกต้องจะต้องแก้ไขเป็น Average = (Num1 + Num2) / 2 ซึ่งข้อผิดพลาดแบบนี้คอมไพเลอร์จะตรวจสอบไม่พบ ดังนั้นผู้เขียนโปรแกรมจึงต้องมีการตรวจสอบเงื่อนไขหรือสูตรให้ถูกต้องก่อนทุกครั้ง

ตัวอย่างที่ 17 ข้อผิดพลาดที่เกิดจากตรรกะโปรแกรม (Logic Errors)


การ ตรวจ หาข้อ ผิด พลาด ของโปรแกรม ทํา ได้ ด้วย วิธีการ ใด
Program Logical_Error;
Uses WinCrt;
Var Num1,Num2:Integer;
Average:Real;
Begin
  Clrscr;
  Num1:=10;
  Num2:=20;
  Average:=Num1+Num2/2;
  Write('Average Of ( ',Num1,' And ',Num2,' ) = ',Average:1:2);
  ReadLn;
End.
การ ตรวจ หาข้อ ผิด พลาด ของโปรแกรม ทํา ได้ ด้วย วิธีการ ใด

3. ข้อผิดพลาดในขณะที่รันโปรแกรม (Runtime Errors)

ข้อผิดพลาดในขณะที่รันโปรแกรม (Runtime Errors) ข้อผิดพลาดแบบ Run-time errors เป็นข้อผิดพลาดที่จะพบได้ในตอนที่เครื่องกำลังทำงานตามโปรแกรมนั้น ๆ โปรแกรมที่มีข้อผิดพลาดชนิด Run-time errors อาจจะคอมไพล์ผ่านได้ (ถ้าไม่มี Syntax errors) แต่จะไม่สามารถรันได้ ยกตัวอย่างเช่น x := 10 และ y:=0 จากนั้นมีการสั่งให้คำนวณค่าของ x หารด้วย y เมื่อเราคอมไพล์ โปรแกรมจะคอมไพล์ผ่าน แต่ไม่สามารถรันผลลัพธ์ได้ เพราะเกิดจากการหารด้วยศูนย์

ตัวอย่างที่ 18 ข้อผิดพลาดในขณะที่รันโปรแกรม (Runtime Errors)


การ ตรวจ หาข้อ ผิด พลาด ของโปรแกรม ทํา ได้ ด้วย วิธีการ ใด
Program Runtime_Error;
Uses WinCrt;
Var X,Y:Integer;
Z:Real;
Begin
  Clrscr;
  X:=10;
  Y:=0;
  Z:=X/Y;
  Write(X,'/',Y,'=',Z:1:2);
  ReadLn;
End.
การ ตรวจ หาข้อ ผิด พลาด ของโปรแกรม ทํา ได้ ด้วย วิธีการ ใด