เครื่องมือของผมปฏิเสธงานผมเอง 4 ครั้งในวันเดียว
นักพัฒนาซอฟต์แวร์แชร์บทเรียนราคาแพง เมื่อระบบตรวจสอบโค้ดที่สร้างขึ้นเองปฏิเสธงานซ้ำซาก เผยวิธีเขียนเกราะป้องกันที่เชื่อถือได้จริง

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- นักพัฒนาซอฟต์แวร์เจอระบบตรวจโค้ดปฏิเสธงาน 4 ครั้งติดกันในวันเดียว
- ทุกข้อผิดพลาดเกิดจากการตีความผลลัพธ์ของเครื่องมือผิดคำถามที่แท้จริง
- ระบบป้องกันที่ดีต้องทดสอบการปฏิเสธ (Say No) ให้ดูก่อนจะทดสอบการอนุมัติ
นักพัฒนาหลายคนมักมีความคุ้นเคยกับการรันชุดทดสอบให้ผ่านแล้วจึงส่งมอบงาน แต่มีสักกี่คนที่เคยสร้างการตรวจสอบที่ต้องสั่งห้าม และพิสูจน์ให้เห็นว่ามันเคยปฏิเสธงานจริงๆ เสียก่อน สำหรับนักพัฒนาซอฟต์แวร์รายหนึ่ง ประสบการณ์การทำงานในหนึ่งวันเต็มได้เปลี่ยนมุมมองนี้ไปอย่างสิ้นเชิง เมื่อเครื่องมือที่เขาพัฒนาขึ้นเองได้ปฏิเสธโค้ดของเขาถึง 4 ครั้งติดต่อกัน จนกระทั่งเขาต้องจดบันทึกรูปแบบความผิดพลาดที่เกิดขึ้นซ้ำๆ เหล่านี้
ความผิดพลาดทั้งสี่ครั้งต่างสวมชุดที่แตกต่างกันออกไปแต่มีแก่นเดียวกัน นั่นคือการนำเอาผลลัพธ์ที่เครื่องมือผลิตออกมาไปตีความว่าเป็นหลักฐานของคำถามอีกข้อหนึ่ง โดยครั้งแรกเขาทำการสแกนเน็ตเวิร์กเพื่อหาบริการและเจอสิ่งที่ตอบรับ จึงด่วนสรุปว่าบริการนั้นอยู่ตรงนั้น ทั้งที่ความจริงเป็นกระบวนการตกค้างจากโมเดลเก่า ส่วนครั้งที่สองเขาอ่านข้อความแจ้งข้อผิดพลาดจากบันทึกเดิมและเกือบจะเขียนโค้ดแก้ซ้ำซ้อนกับสิ่งที่เคยแก้ไขไปแล้วถึงสามวันก่อนหน้า

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
ในกรณีที่สาม ลูปการตรวจสอบของเขารายงานว่าไฟล์ทดสอบผ่านสองไฟล์กลับกลายเป็นล้มเหลว เพียงเพราะตัวระบบค้นหาข้อความคำว่า red ในเอาต์พุต และคำในภาษาเยอรมันที่แปลว่าอย่างไรก็ตามดันมีตัวอักษรสามตัวนั้นซ่อนอยู่ภายใน และครั้งสุดท้ายคือการเพิ่มไฟล์ลงในการสร้างระบบโดยลืมใส่ชื่อไฟล์ลงในรายการ ผลลัพธ์คือการสร้างรายงานว่าสำเร็จแต่แพ็กเกจที่ได้กลับพังทลายทันทีเมื่อรันคำสั่งแรก เหตุการณ์เหล่านี้สะท้อนช่องว่างระหว่างคำถามในหัวกับสิ่งที่ระบบรายงานออกมาจริง ซึ่งเป็นจุดที่เวลาทำงานทั้งวันมักจะสูญเสียไปอย่างเงียบๆ
บทเรียนสำคัญที่ต้องใช้เวลานานมากกว่าจะยอมรับได้คือ สำหรับเกราะป้องกันทุกอันที่เขียนขึ้น เรามักจะบอกได้ว่ามันผ่าน แต่ส่วนใหญ่แล้วเราไม่เคยเห็นมันล้มเหลวเลยสักครั้ง เกราะป้องกันที่ไม่เคยลิ้มรสความล้มเหลวก็เป็นเพียงแค่ของประดับตกแต่งที่บังเอิญมีสีที่ถูกต้อง และมันจะยังคงแสดงสีเดิมต่อไปแม้ว่าระบบจะพังไปแล้วก็ตาม ดังนั้นการยอมรับเกราะป้องกันจึงต้องมี 2 กรณีและลำดับมีความสำคัญอย่างยิ่ง โดยต้องพิสูจน์ให้ได้ก่อนว่ามันเอ่ยคำว่าไม่ในเวลาที่ควร แล้วจึงพิสูจน์ว่ามันเอ่ยคำว่าใช่ในเวลาที่ควรเช่นกัน
"A guard that has only ever been green is not a guard. It is decoration that happens to be the right colour"
Heinrich Neb
ในมุมมองของการพัฒนาซอฟต์แวร์สมัยใหม่ แนวคิดเรื่อง Guard หรือตัวตรวจสอบความถูกต้องมีความสำคัญอย่างยิ่งต่อการรักษาคุณภาพโค้ด (Code Quality) การที่เราเขียน Test ให้ผ่านสีเขียว (Green Test) อย่างเดียวนั้นไม่เพียงพอ เพราะมันไม่ได้การันตีว่า Test นั้นมีความสามารถในการตรวจจับข้อผิดพลาดจริงๆ หรือไม่ การบังคับให้เขียนกรณีทดสอบความล้มเหลว (Negative Test) ก่อน จึงเป็นกระบวนการสำคัญที่ช่วยให้มั่นใจว่าเครื่องมือของเราทำงานอย่างมีประสิทธิภาพและพร้อมรับมือกับบั๊กในอนาคต
ท้ายที่สุด การถูกเครื่องมือของตัวเองปฏิเสธถึงสี่ครั้งในหนึ่งวันไม่ใช่เรื่องแย่ แต่เป็นวันที่เครื่องมือชิ้นนั้นพิสูจน์คุณค่าของตัวเองได้อย่างแท้จริง โดยระบบตรวจสอบไฟล์ได้ถูกปรับปรุงให้เริ่มจากการรันเครื่องมือที่แพ็กเกจมาแล้วและล้มเหลวหากไม่ตอบสนอง แทนที่จะสนใจแค่ว่ารายการไฟล์ครบถ้วนหรือไม่ ซึ่งช่วยให้การพัฒนาซอฟต์แวร์มีความแม่นยำและไร้ข้อผิดพลาดหลุดลอดมากยิ่งขึ้น
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น