เรื่องที่ 4 ทดสอบและแก้ไขข้อผิดพลาด
ใช้หลักฐานจากการทดสอบเพื่อหาสาเหตุของ Bug และปรับปรุงโปรแกรม
เป้าหมายการเรียนรู้
นักเรียนทดสอบโปรแกรม ค้นหาข้อผิดพลาด และแก้ไขบั๊กอย่างเป็นระบบ โดยบันทึกปัญหา สาเหตุ วิธีแก้ และผลหลังแก้ไขได้
ภาพรวมของเรื่อง
โปรแกรมที่เขียนครั้งแรกมักยังไม่สมบูรณ์ อาจมีคำสั่งเรียงผิด เงื่อนไขผิด ตัวแปรไม่ถูกตั้งค่า หรือผลลัพธ์ไม่ตรงเป้าหมาย การทดสอบและแก้ไขข้อผิดพลาดจึงเป็นส่วนหนึ่งของการเขียนโปรแกรม ไม่ใช่เรื่องน่าอาย แต่เป็นขั้นตอนสำคัญที่ทำให้โปรแกรมดีขึ้น
แนวคิดสำคัญที่ต้องเข้าใจ
- บั๊ก คือ ข้อผิดพลาดที่ทำให้โปรแกรมทำงานไม่ตรงกับที่ต้องการ
- การทดสอบ คือ การลองใช้โปรแกรมด้วยข้อมูลหรือสถานการณ์ต่าง ๆ เพื่อดูว่าผลลัพธ์ถูกต้องหรือไม่
- การ Debug คือ การค้นหาสาเหตุของบั๊ก แก้ไข และทดสอบซ้ำ
- Test case คือ กรณีทดสอบ เช่น ตอบถูก ตอบผิด ไม่กรอกคำตอบ หรือกรอกคำตอบนอกเหนือจากที่คาดไว้
- การบันทึก Debug log ช่วยให้จำได้ว่าพบปัญหาอะไร แก้อย่างไร และผลหลังแก้เป็นอย่างไร
ขั้นตอนการเรียนรู้และลงมือทำ
1. กำหนดผลลัพธ์ที่คาดหวังก่อนทดสอบ เช่น ถ้าตอบถูก คะแนนต้องเพิ่ม 1
2. ทดลองใช้โปรแกรมทีละกรณี และจดผลลัพธ์ที่เกิดขึ้นจริง
3. เปรียบเทียบผลจริงกับผลที่คาดหวัง หากไม่ตรง ให้ระบุจุดที่น่าสงสัย
4. แก้ไขคำสั่งทีละจุด ไม่แก้หลายอย่างพร้อมกันจนไม่รู้ว่าส่วนใดได้ผล
5. ทดสอบซ้ำทั้งกรณีเดิมและกรณีอื่น เพื่อให้แน่ใจว่าไม่เกิดบั๊กใหม่
ตัวอย่างในห้องเรียน
เกมตอบคำถามควรเพิ่มคะแนนเมื่อตอบถูก แต่เมื่อทดสอบพบว่าคะแนนไม่เพิ่ม นักเรียนตรวจพบว่าลืมตั้งคำสั่ง “เปลี่ยนคะแนนทีละ 1” ในเงื่อนไขตอบถูก หลังเพิ่มคำสั่งแล้วต้องทดสอบอีกครั้งทั้งคำตอบถูกและคำตอบผิด เพื่อดูว่าคะแนนเพิ่มเฉพาะกรณีที่ถูกเท่านั้น
ข้อควรระวังและความเข้าใจผิดที่พบบ่อย
- อย่าแก้โปรแกรมโดยเดาสุ่ม ควรดูผลทดสอบและหาสาเหตุ
- อย่าทดสอบเฉพาะกรณีที่คาดว่าจะถูก ต้องทดสอบกรณีผิดและกรณีพิเศษด้วย
- อย่าลบคำสั่งจำนวนมากโดยไม่บันทึก เพราะอาจแก้ยากกว่าเดิม
- ถ้าโปรแกรมยังผิดหลังแก้ ควรย้อนดูเป้าหมาย รหัสลำลอง และผังงาน
กิจกรรมฝึกคิดระหว่างเรียน
ครูเตรียมโปรแกรม Scratch ที่มีบั๊ก 3 จุด เช่น คำสั่งเรียงผิด เงื่อนไขผิด และตัวแปรคะแนนไม่เริ่มที่ 0 ให้นักเรียนทดสอบ จดอาการของบั๊ก คาดเดาสาเหตุ แก้ไข และบันทึกผลหลังแก้
แนวทางจัดการเรียนรู้สำหรับครู
- ช่วงนำเข้าสู่บทเรียน: ใช้คำถามหรือสถานการณ์ใกล้ตัวของนักเรียนก่อน เช่น งานในห้องเรียน การใช้คอมพิวเตอร์ การค้นข้อมูล หรือการส่งใบงาน เพื่อให้นักเรียนเห็นว่าความรู้นี้เกี่ยวข้องกับชีวิตจริง
- ช่วงสาธิต: ครูทำตัวอย่างให้ดูทีละขั้นบนกระดานหรือหน้าจอ โดยพูดให้ชัดว่ากำลังคิดอะไร ใช้ข้อมูลใด ตัดสินใจจากเงื่อนไขใด และตรวจคำตอบอย่างไร
- ช่วงลงมือปฏิบัติ: ให้นักเรียนทำงานเป็นคู่หรือกลุ่มเล็ก แบ่งหน้าที่เป็นผู้อ่านโจทย์ ผู้บันทึก ผู้ตรวจสอบ และผู้นำเสนอ เพื่อฝึกทั้งทักษะคิดและทักษะสื่อสาร
- ช่วงสะท้อนผล: ให้แต่ละกลุ่มบอกสิ่งที่ทำได้ดี จุดที่ยังสับสน และวิธีที่จะแก้ไขครั้งต่อไป ครูควรเน้นเหตุผลมากกว่าคำตอบสั้น ๆ
เกณฑ์สังเกตความเข้าใจ
- ระดับเริ่มต้น: นักเรียนบอกคำสำคัญของเรื่องได้บางส่วน แต่ยังต้องอาศัยคำถามนำจากครูในการอธิบายเหตุผลหรือเลือกวิธีทำ
- ระดับกำลังพัฒนา: นักเรียนทำตามขั้นตอนได้ ยกตัวอย่างใกล้ตัวได้ และเริ่มอธิบายได้ว่าทำไมจึงเลือกคำตอบหรือวิธีนั้น
- ระดับทำได้ดี: นักเรียนอธิบายแนวคิดด้วยคำของตนเอง ใช้เครื่องมือหรือขั้นตอนอย่างเหมาะสม ตรวจงานตนเองได้ และช่วยอธิบายให้เพื่อนได้
- หลักฐานที่ควรดู: คำอธิบายในใบงาน วิธีคิดระหว่างทำกิจกรรม การตอบคำถามอภิปราย และความสามารถในการแก้ไขงานหลังได้รับข้อเสนอแนะ
คำถามชวนอภิปราย
- ทำไมการพบบั๊กจึงเป็นเรื่องปกติของการเขียนโปรแกรม
- การแก้ทีละจุดดีกว่าแก้หลายจุดพร้อมกันอย่างไร
- Test case แบบใดช่วยให้เจอบั๊กที่ซ่อนอยู่
ชิ้นงานหรือหลักฐานการเรียนรู้
สมุดนักแก้บั๊กที่มีอย่างน้อย 3 รายการ ได้แก่ อาการที่พบ สาเหตุที่คาด วิธีแก้ ผลหลังทดสอบซ้ำ และสิ่งที่เรียนรู้จากบั๊กนั้น
สรุปจำง่าย
การทดสอบช่วยให้รู้ว่าโปรแกรมทำงานจริงอย่างไร การ Debug ช่วยแก้จุดผิด และการบันทึกช่วยให้เรียนรู้จากปัญหา โปรแกรมที่ดีเกิดจากการทดสอบและปรับปรุงหลายรอบ