นักพัฒนาตัดสินใจไม่แก้โค้ดเสียหายที่อาจทำให้เมืองดับไฟ

ที่มาภาพ: The Register

Software-อ่าน 5 นาทีThe Register

นักพัฒนาตัดสินใจไม่แก้โค้ดเสียหายที่อาจทำให้เมืองดับไฟ

⚡ สรุป 30 วิ

Socrates ในคอลัมน์ On Call ของ The Register ปฏิเสธแก้โค้ดเก่าไม่มีเอกสารและใช้ GOTO เพราะอาจทำให้เครื่องกำเนิดไฟฟ้า overspeed จนดับไฟเมืองการตัดสินใจ…

การพัฒนาและบำรุงรักษาซอฟต์แวร์ในอุตสาหกรรมพลังงานต้องเผชิญกับความเสี่ยงสูงเมื่อต้องทำงานบนระบบโบราณที่ไม่มีเอกสารกำกับ การเล่าเรื่องของผู้อ่าน “Socrates” ในคอลัมน์ On Call ของ *The Register* แสดงให้เห็นว่าผู้ดูแลระบบบางคนอาจเลือกละทิ้งภารกิจซึ่งอาจทำให้เมืองตกไฟได้ เพียงเพื่อหลีกเลี่ยงการสร้างความเสียหายที่ไม่สามารถย้อนกลับได้


Overview

Socrates ซึ่งเคยดำรงตำแหน่งผู้จัดการฝ่ายซอฟต์แวร์ขนาดเล็ก ได้รับมอบหมายจากนายจ้างให้ไปตรวจสอบระบบเฝ้าติดตามอุปกรณ์ของโรงไฟฟ้า ลูกค้าซึ่งผลิตเครื่องจักรสำหรับสถานีไฟฟ้านั้นไม่ได้บันทึกข้อมูลการติดตั้งอย่างเป็นทางการ เมื่อ Socrates ไปถึงไซต์ เขาได้พบกับ turbine overspeed detector ที่เชื่อมต่อกับคอมพิวเตอร์รุ่นเก่าแบบ CP/M พร้อมบอร์ด I/O หลากหลายชนิด

Background

ตามรายงานของ *The Register* ระบบนี้ถูกติดตั้งในโรงไฟฟ้าที่มีเครื่องจักรขนาดมหึมา ซึ่งทำหน้าที่หมุนด้วยไอศักดิ์เพื่อผลิตกระแสไฟฟ้า การควบคุมความเร็วเกิน (overspeed) ของเทอร์ไบน์เป็นสิ่งสำคัญเพราะหากเกิดเหตุการณ์ดังกล่าว เครื่องจักรอาจเสียหายและส่งผลให้ระบบไฟฟ้าทั้งเมืองดับไปได้ แม้ว่าตอนนั้นภาพยนตร์ Mission: Impossible ยังไม่ออก และ The Matrix ยังไม่มีในตลาด แต่จินตนาการของ Socrates ถูกผูกติดกับฉากแอคชันเหล่านั้น ทำให้ความเสี่ยงดูเหมือน “ภารกิจที่เป็นไปไม่ได้”

The Legacy System

เมื่อ Socrates นั่งทำงานบนคีย์บอร์ด เขาพบว่าโค้ดที่ควบคุม turbine overspeed detector มีลักษณะดังต่อไปนี้

  • มีการใช้คำสั่ง GOTO อย่างสุ่มโดยไม่มีโครงสร้างชัดเจน
  • การเข้าถึง I/O ทำที่อยู่แบบสุ่มโดยไม่มีการอธิบายหรือคอมเม้นต์ใด ๆ
  • การคำนวณและการทำงานของบิต (AND, OR) ใช้ค่าคงที่ที่ดูเหมือนจะเป็น “ตัวเลขลึกลับ”

โค้ดเหล่านี้ขาด documentation และไม่มีคำอธิบายประกอบ ทำให้ยากต่อการเข้าใจหรือแก้ไขโดยผู้ที่ไม่ได้เขียนมาตั้งแต่แรก

Code Condition & Risks

สภาพของซอฟต์แวร์ดังกล่าวถือว่า “horrible” ตามที่ Socrates ระบุไว้ ความไม่เป็นระบบและไม่มีคอมเม้นท์ทำให้การเปลี่ยนแปลงใด ๆ มีความเสี่ยงต่อการสร้างข้อบกพร่องใหม่ ซึ่งอาจกระตุ้นให้เครื่องเทอร์ไบน์หยุดทำงานหรือเกิดเหตุการณ์ overspeed ที่อาจนำไปสู่การดับไฟฟ้าทั่วเมืองได้ การแก้ไขโดยไม่มีข้อมูลพื้นฐานจึงเป็นการเสี่ยงที่สูงเกินกว่าจะยอมรับ

Decision & Lessons

หลังจากพิจารณาโค้ดทั้งหมด Socrates ตัดสินใจ ถอยกลับ อย่างระมัดระวังและไม่ทำการเปลี่ยนแปลงใด ๆ กับระบบ เขาอธิบายว่าบางอย่าง “ควรปล่อยให้เป็นเช่นนั้น” เพื่อหลีกเลี่ยงผลเสียที่อาจเกิดขึ้น การตัดสินใจนี้สะท้อนถึงบทเรียนสำคัญในการจัดการซอฟต์แวร์โบราณ:

  • ระบบที่ไม่มีเอกสารและมีโค้ดสกปรกควรได้รับการประเมินความเสี่ยงอย่างละเอียดก่อนทำการแก้ไข
  • การอ้างอิงจากผู้เชี่ยวชาญหรือทีมงานที่คุ้นเคยกับระบบเป็นสิ่งจำเป็น
  • บางครั้งการ “ไม่ทำอะไร” อาจเป็นวิธีที่ปลอดภัยที่สุดในสถานการณ์ที่ความล้มเหลวจะส่งผลต่อโครงสร้างพื้นฐานระดับชาติ

Impact

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

Summary

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

แชร์บทความนี้:

ชอบบทความแบบนี้?

สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม

แหล่งข่าวต้นฉบับ

ชื่อต้นฉบับ
Developer given Mission:Impossible - fixing rubbish code that could crash a city - simply chose not to accept it
ผู้เขียน
Unknown
แหล่ง
The Register
วันที่เผยแพร่
21 สิงหาคม 2569 เวลา 13:30

Related

บทความที่เกี่ยวข้อง

Astropad Workbench 1.3 ปรับปรุงสตรีมเร็วขึ้นและเพิ่มฟีเจอร์ Privacy Curtain สำหรับการเชื่อมต่อ Unattended MacsSoftware
21 สิงหาคม 2569 เวลา 17:00

Astropad Workbench 1.3 ปรับปรุงสตรีมเร็วขึ้นและเพิ่มฟีเจอร์ Privacy Curtain สำหรับการเชื่อมต่อ Unattended Macs

Astropad เปิดตัวเวอร์ชัน Workbench 1.3 ที่เร่งความเร็วการสตรีมข้อมูลและเพิ่มฟีเจอร์ Privacy Curtain ปกป้องหน้าจอเมื่อต่อกับ Mac แบบ unattended.…

9to5Mac6 นาที
Microsoft ค่อย ๆ ยกเลิก Windows Media Player ผ่านโครงการ Windows K2 เพื่อบังคับให้ใช้แอป Media Player ใหม่Software
21 สิงหาคม 2569 เวลา 15:30

Microsoft ค่อย ๆ ยกเลิก Windows Media Player ผ่านโครงการ Windows K2 เพื่อบังคับให้ใช้แอป Media Player ใหม่

Windows Media Player จะค่อย ๆ ถูกยกเลิกใน Windows 11 ภายใต้โครงการ Windows K2 โดย Microsoft แรงผลักดันให้ผู้ใช้งเปลี่ยนไปใช้แอป Media Player…

XDA Developers7 นาที
In the Van ผสานความอบอุ่นและการเอาตัวรอดในโลกหลังวันสิ้นสุดSoftware
21 สิงหาคม 2569 เวลา 09:30

In the Van ผสานความอบอุ่นและการเอาตัวรอดในโลกหลังวันสิ้นสุด

เกมอินดี้ In the Van จากสตูดิโอ Cosmic Tofu ผสมผสานแนว cozy survival กับโลกหลังวันสิ้นสุด ให้ผู้เล่นขับรถตู้หาที่พักปลอดภัยและทำกิจกรรมเช่นปลูกพืช…

GamesRadar6 นาที
วิธีรัน Docker บน Proxmox ให้สอดคล้องกับฮาร์ดแวร์และกรณีใช้งานSoftware
21 สิงหาคม 2569 เวลา 06:30

วิธีรัน Docker บน Proxmox ให้สอดคล้องกับฮาร์ดแวร์และกรณีใช้งาน

Proxmox รองรับ KVM และ LXC แต่บางงานต้องการ Docker เพื่อความยืดหยุ่น การเลือกวิธีรัน Docker บน VM หรือ LXC…

XDA Developers6 นาที
คัดลอกลิงก์แล้ว!