← กลับไปยังบทความทั้งหมด

Therac-25 บทเรียนราคาแพงจากความผิดพลาดของซอฟต์แวร์ทางการแพทย์

สรุปใจความสำคัญ

  • เกิดอุบัติเหตุรังสีเกินขนาดอย่างน้อย 6 ครั้งระหว่างปี 1985-1987
  • ผู้ป่วยบางรายได้รับรังสีสูงกว่าปกติถึง 250 เท่าเนื่องจาก Race Condition ในซอฟต์แวร์
  • มีการเปลี่ยนกลไกความปลอดภัยจากฮาร์ดแวร์มาเป็นซอฟต์แวร์ทั้งหมดในรุ่น Therac-25

Therac-25 คือเครื่องบำบัดด้วยรังสีที่ควบคุมด้วยคอมพิวเตอร์ซึ่งผลิตโดย Atomic Energy of Canada Limited (AECL) ในปี 1982 ซึ่งกลายเป็นหนึ่งในกรณีศึกษาที่โด่งดังที่สุดในด้านวิศวกรรมซอฟต์แวร์ จริยธรรมทางคอมพิวเตอร์ และสารสนเทศสุขภาพ เนื่องจากความผิดพลาดร้ายแรงในระบบที่นำไปสู่การได้รับรังสีเกินขนาดในผู้ป่วยหลายราย

Therac-25 Machine
เครื่อง Therac-25 เครื่องบำบัดด้วยรังสีที่ควบคุมด้วยคอมพิวเตอร์

ประวัติและการพัฒนา

ก่อนหน้า Therac-25 ทาง AECL ได้ร่วมมือกับบริษัท CGR จากฝรั่งเศสในการสร้างเครื่อง Therac-6 และ Therac-20 ซึ่งในรุ่นก่อนหน้านี้ ระบบความปลอดภัยส่วนใหญ่ยังคงเป็นฮาร์ดแวร์ที่ทำงานแยกจากซอฟต์แวร์ อย่างไรก็ตาม เมื่อ AECL พัฒนา Therac-25 พวกเขาได้ตัดสินใจเปลี่ยนกลไกความปลอดภัยหลายอย่างจากฮาร์ดแวร์มาเป็น ซอฟต์แวร์ แทน เพื่อลดต้นทุนและเพิ่มความกะทัดรัดของตัวเครื่อง

Therac-20 and 25 comparison
การพัฒนาจากรุ่น Therac-20 สู่ Therac-25 ที่เน้นการควบคุมด้วยซอฟต์แวร์มากขึ้น

ซอฟต์แวร์ของ Therac-25 ถูกพัฒนาโดยโปรแกรมเมอร์เพียงคนเดียวโดยใช้ภาษา PDP-11 assembly ซึ่งเป็นการต่อยอดมาจากซอฟต์แวร์ของ Therac-6 โดยไม่มีการตรวจสอบความถูกต้องอย่างเข้มงวดเพียงพอ

การทำงานและโหมดการรักษา

เครื่อง Therac-25 มีโหมดการทำงานหลัก 3 โหมด โดยใช้จานหมุน (Turntable) เพื่อปรับตำแหน่งอุปกรณ์ให้เหมาะสม:

  • โหมด Field Light: ใช้แสงสว่างเพื่อระบุตำแหน่งการรักษาให้ถูกต้อง
  • โหมด Electron-beam Therapy: ใช้ลำอิเล็กตรอนพลังงานสูง (5 ถึง 25 MeV) ยิงไปยังบริเวณที่ต้องการรักษา
  • โหมด Megavolt X-ray Therapy: ยิงลำอิเล็กตรอนให้กระทบกับเป้าทังสเตน (Tungsten Target) เพื่อสร้างรังสีเอกซ์พลังงานสูง ซึ่งต้องใช้กระแสไฟฟ้าสูงกว่าโหมดอิเล็กตรอนถึง 100 เท่า
Therac-25 Operation
แผนผังการทำงานของระบบส่งลำรังสีในเครื่อง Therac-25

ความผิดพลาดร้ายแรง Race Condition

ระหว่างปี 1985 ถึง 1987 เกิดอุบัติเหตุรังสีเกินขนาดอย่างน้อย 6 ครั้ง ซึ่งส่งผลให้ผู้ป่วยได้รับรังสีสูงกว่าปกติถึง 250 เท่า นำไปสู่การบาดเจ็บสาหัสและการเสียชีวิต สาเหตุหลักเกิดจาก Concurrent Programming Errors หรือที่เรียกว่า Race Condition

ความผิดพลาดนี้เกิดขึ้นเมื่อผู้ปฏิบัติงานป้อนคำสั่งเร็วเกินไป ทำให้ซอฟต์แวร์ประมวลผลคำสั่งไม่ทันและเกิดการสลับโหมดการทำงานผิดพลาด เช่น เครื่องส่งรังสีในโหมด X-ray (ซึ่งใช้พลังงานสูงมาก) แต่ไม่มีการเลื่อนเป้าทังสเตนมาขวางไว้ ทำให้ลำอิเล็กตรอนพลังงานสูงยิงเข้าสู่ร่างกายผู้ป่วยโดยตรงโดยไม่มีตัวกรอง

Race Condition Diagram
ภาพจำลองการเกิด Race Condition ในซอฟต์แวร์ควบคุมเครื่อง Therac-25

บทเรียนสำหรับวิศวกรรมซอฟต์แวร์

กรณีของ Therac-25 เน้นย้ำถึงอันตรายของการพึ่งพาซอฟต์แวร์เพียงอย่างเดียวในระบบที่วิกฤตต่อความปลอดภัย (Safety-critical systems) และความประมาทของวิศวกรที่เพิกเฉยต่อรายงานความผิดปกติจากผู้ใช้งานในช่วงแรก ซึ่งนำไปสู่ความสูญเสียที่ไม่อาจเรียกคืนได้

คำถามที่พบบ่อย

สาเหตุหลักที่ทำให้ Therac-25 เกิดอุบัติเหตุคืออะไร?

เกิดจากความผิดพลาดในการเขียนโปรแกรมแบบ Concurrent Programming (Race Condition) ซึ่งทำให้เครื่องปล่อยรังสีพลังงานสูงโดยไม่มีตัวกรองป้องกันในบางจังหวะที่ผู้ใช้งานป้อนคำสั่งเร็วเกินไป

ทำไมความผิดพลาดนี้ถึงไม่เกิดขึ้นในรุ่น Therac-20?

เพราะ Therac-20 ยังมีระบบความปลอดภัยทางฮาร์ดแวร์ (Hardware Interlocks) ที่ช่วยป้องกันไม่ให้เครื่องทำงานหากอุปกรณ์ไม่อยู่ในตำแหน่งที่ถูกต้อง แม้ซอฟต์แวร์จะสั่งการผิดพลาดก็ตาม

กรณีนี้ให้บทเรียนอะไรแก่ผู้พัฒนาซอฟต์แวร์ในปัจจุบัน?

เน้นย้ำถึงความสำคัญของการทดสอบซอฟต์แวร์อย่างเข้มงวด การไม่พึ่งพาซอฟต์แวร์เพียงอย่างเดียวในระบบที่ส่งผลต่อชีวิต และการรับฟังรายงานข้อผิดพลาดจากผู้ใช้งานอย่างจริงจัง