debug ขั้นตอนที่สำคัญไม่แพ้การเขียนโค้ด

debug ขั้นตอนที่สำคัญไม่แพ้การเขียนโค้ด

วันนี้เอาประสบการณ์มาเล่าให้ฟัง สำหรับคนที่เป็นมือใหม่ถึงระดับกลางน่าจะได้ประโยชน์อยู่พอสมควร

ในอุตสาหกรรม software โดยเฉลี่ยจะมี error ปรากฏขึ้น จำนวน 10-15 error ต่อโค้ดที่เขียน 1,000 บรรทัด ผมยังไม่เจอใครที่เขียนโค้ดและไม่มี bug เลยในรอบเดียวจบ ไม่ว่าจะเป็นคนเก่งแค่ไหนก็ตาม ดังนั้น ก็ย่อมเจอ error หรือ bug เป็นปกติแน่นอนอยู่แล้ว แต่ทีนี้ ปัญหาคือ เราจะจัดการกับ error หรือ bug เหล่านั้นได้อย่างไร เพราะว่าเรื่องนี้เป็นเรื่องที่ต้องผสมกันระหว่าง ความรู้ ความสามารถ ประสบการณ์ เทคนิค และการคิด วิเคราะห์ เรียกว่า การ debug นั้น ต้องอาศัยทักษะมากกว่าการ program ซะอีก และหลายครั้ง การ debug ก็ใช้เวลานานกว่าการ program อีกด้วย

การ debug ที่ควรทำ และเร็ว ก็ประมาณนี้ครับ

 

  1. อ่าน error ที่ปรากฏ - ผมเจอความจริงว่า หลายคนไม่อ่านเลย เจอ error ปุ้บ ก็ไปเปิดโค้ดแล้วแก้เลย ผมก็เลย งง ว่า คนเหล่านั้น เค้ารู้ได้อย่างไร ว่าจะแก้ตรงไหน เพราะว่า error มันจะบอกค่อนข้างชัดเจน ว่า error ประเด็นไหน บรรทัดอะไร
  2. คิดถึงการทำงาน ว่า บรรทัดนั้น ทำงานอย่างไร - ช่วงนี้เราอาจจะต้องแปลงร่างตัวเองเป็น ตัว compiler ภาษา สักแป้บนึง เพื่ออ่านโค้ดแล้วทำความว่าเข้าใจว่า บรรทัดนั้น หรือ function นั้นทำงานอย่างไร รับค่าอะไรมา ประมวลผลอะไร ส่งค่าอะไรออกไป เรียกว่า ต้องแปลกันให้ได้ ทุกบรรทัดเลยล่ะครับ ไม่งั้น หลุดอีกแน่นอน แต่ถ้า งง แนะนำให้เขียนเป็น logic ใส่กระดาษจะช่วยได้มาก
  3. ตั้ง สมมุติฐาน และทำการทดสอบ - ถ้าเราไล่โค้ด ในสมองทำงานถูกต้อง ให้เราตั้งสมมุติฐานแล้วทำการทดสอบเลย ตัวอย่างเช่นเรารู้ว่า เมื่อเรา input เลข 9 ให้ function ยกกำลัง2 แล้ว เราจะได้ผลลัพท์เป็น 81 กลับมา ก็ลองใส่สักสามเลข แล้วอ่านค่าว่าได้ตามที่เราคิดจริงหรือไม่ หลายคนไม่ชอบทำตามขั้นตอนนี้เพราะคิดว่าเสียเวลา แต่หารู้ไม่ว่า การไม่ทำตามขั้นตอนนี้เป็นต้นเหตุแห่งการเสียเวลาอีก เพราะว่า ที่เราคิดว่ามันทำงานถูก มันผิดตั้งแต่เริ่มแล้ว มันถึงได้เป็น bug ไง
  4. เอาตัวแปรแสดงค่าออกมา ทีละบรรทัดเลย - อันนี้เป็นขั้นเทพแล้วครับ ใช้สำหรับการ debug ที่งมโข่งมาหลายชั่วโมงไม่หายสักที ก็คือ เราจะดูค่าโดยละเอียดของตัวแปรที่มีผลกับระบบเราเลย ว่าก่อน และหลังการทำงานแต่ละอย่าง เป็นอย่างไร แบบนี้จะเสียเวลามากๆ แต่ก็ใช้สำหรับการ debug ได้ละเอียดที่สุดแล้ว

 แค่นี้เองครับ 4 ขั้นตอน เรียงตามความยากของ bug แต่ว่า แต่ละขั้นตอน เราจะต้องใช้ความสามารถมากๆเพราะว่าบางครั้ง เราอาจจะต้องรู้ไปจนถึง ขีดจำกัด ของระบบ หรือขอบเขตของระบบด้วย ตัวอย่างเช่น คนที่สร้าง database field เป็น int ใช้เก็บตัวเลข ก็ทำงานได้ตามปกติ จนกระทั่ง ไปวันหนึ่งพบว่า เมื่อรวมตัวเลขออกมา ได้ไม่ตรงกัน หาความผิดพลาดไม่เจอ จนกระทั่งไปรู้ว่า user มีการใส่ตัวเลขที่เป็นค่า ทศนิยมด้วย แต่ database field int มันไม่เก็บ เพราะว่าธรรมชาติของ int คือเก็บจำนวนเต็ม หรือ อีกตัวอย่าง ก็คือการเชื่อม string และการ update ค่าตัวแปร ที่เป็นปัญหาบ่อยๆ บางทีเราจะเชื่อม string ก็เขียนผิดเป็นการ assign ค่าบ้าง (ทำให้มันทับค่าเดิม) เหล่านี้เป็นต้น 

ดังนั้นอย่างที่บอกครับ ว่าการ debug นั้นยากกว่าการเขียน แต่ว่าจะให้ไม่มี bug ก็เป็นไปไม่ได้อย่างที่เล่าให้ฟังเราจึงต้องเรียนรู้การอยู่ร่วมกับมัน และแก้ไขมันอย่างถูกต้องครับ เพื่อไม่ให้เสียเวลาไปมากในการ debug

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


Create: Modify : 2011-11-13 11:16:36 Read : 10054 URL :