ทำไมเราต้อง Test Software มากกว่าแค่พอผ่าน: MultiData Case

Teerayut Hiruntaraporn
2 min readDec 5, 2023

--

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

ซึ่งการทดสอบที่ไม่เพียงพอบางครั้งก็ก่อให้เกิดความเสียหายในการใช้งานจริงๆ ขึ้นมา อาจจะมากหรือน้อยแตกต่างกันไป แต่สำหรับครั้งนี้จะให้เห็นความเสียหายที่หนักมากคือ มีคนเสียชีวิต คนที่รอดชีวิตก็อาการหนัก ผู้ใช้โดนจำคุก นั้่นคือกรณีการทำงานผิดพลาดของ เครื่องฉายรังสี Cobalt-60 ของบริษัท MutiData

เหตุการณ์นี้เกิดขึ้นที่ Panama Cancer Institute โดย เครื่องฉายรังสีได้ฉายรังสีที่มีปริมาณมากกว่าปกติให้กับ ผู้ป่วย 28 คน โดยมีปริมาณมากกว่าปกติตั้งแต่ 20% จนถึง 100% ซึ่งส่งผลให้มีผู้เสียชีวิต 21 คน หลังจากที่เวลาผ่านไป 40 เดือน ที่เหลือก็อาการร่อแร่ คนที่ดำเนินการฉายรังสี 3 คน ถูกจับกุมข้อหาฆ่าคนตายโดยไม่เจตนา

แล้วทำไมเครื่อง Cobalt-60 ถึงทำการฉายรังสีมากเกินขนาดได้ ต้องอธิบายการทำงานของกระบวนการฉายรังสีก่อน โดยก่อนที่จะเริ่มทำการฉายรังสี เมื่อผู้ป่วยได้นอนบนเครื่องแล้ว ทางเจ้าหน้าที่จะใช้แผ่นตะกั่วมาป้องกันร่างกายของผู้ป่วยในส่วนอื่นๆ ที่ไม่เกี่ยวข้อง ไม่ให้โดนรังสี จากนั้นก็จะให้ตัว Software ทำการคำนวณปริมาณรังสีที่ใช้ โดยมีการป้อนข้อมูลเกี่ยวกับจำนวนและตำแหน่งของแผ่นตะกั่วนั้นๆ เมื่อระบบคำนวณเรียบร้อย ก็จะเริ่มกระบวนการฉายรังสี

ส่วนที่มีปัญหาคือช่วงที่นำแผ่นตะกั่วไปวาง แล้วกรอกข้อมูลนั่นแหละครับ แน่นอนว่าในสามัญสำนึกเรา ก็คิดว่า การนำเอาแผ่นตะกั่วไปใส่มาก ก็ย่อมป้องกันตัวคนไข้มากขึ้นใช่ไหมครับ

แต่โชคร้าย ระบบนี้ ถูกทดสอบ ที่แผ่นตะกั่วมากที่สุด 4 ใบเท่านั้น เมื่อนำเอาใบที่ 5 มาใส่เพิ่ม แล้วกรอกข้อมูลเข้าไป ระบบกลับทำงานผิดพลาด แล้วไปเพิ่มปริมาณรังสี โดยที่ทางเจ้าหน้าที่ไม่รู้

ซึ่งการเพิ่มแผ่นตะกั่วใบที่ 5 จะไม่มีเขียนใน Manual (ใน manual recommend 4 ใบ) แต่ทางเจ้าหน้าที่ก็ได้ปรึกษากับหมออย่างดีแล้ว

ณ จุดนี้ ทางบริษัทก็โด้แย้งว่า ทำไมเจ้าหน้าที่ไม่เทสกับน้ำก่อนไปเทสกับคน ให้เรียบร้อย ถ้าฟังตรงนี้ก็ดูเหมือนเรื่องปกตินะครับ

แต่ถ้าอ้างแบบนี้ เราจะทำ Product ให้ใครไม่ได้

เพราะ ลูกค้าจะมี Assumption ว่า Software ที่ซื้อมาทำงานถูกต้องเสมอ

การทดสอบเคสเล็กๆน้อยๆ เขาจะเชื่อว่าบริษัททดสอบมาแล้ว

ถ้าลูกค้าสงสัยว่าเคสโน้นใช้ได้ไหม เคสนี้ใช้ได้ไหม แล้วต้องมาทดสอบด้วยตัวเอง

เขาจะซื้อของบริษัทเราทำไม ??

นอกจากนี้ทาง FDA ของอเมริกาได้ทำการตรวจสอบเบื้องต้น พบว่า ทางบริษัทมีปัญหาดังนี้

  • poor specification and documentation procedures
  • inadequate testing
  • a lack of comprehensive investigation into customer complaints

นอกจากนี้มีการเทสอีกรอบ ก็ได้คำตอบคล้ายกัน กล่าวคือ

In particular the company didn’t have a comprehensive testing plan that proved the code was “fit for use.”

ย้อนกลับมาเรื่องการทดสอบซอฟแวร์ เราจะเห็นว่าการทดสอบเพียงแค่พอผ่าน หรือพิจารณาเฉพาะกรณีเดียว ไม่เพียงพอต่อการใช้งานจริงๆ

เพราะ ผู้ใช้จะมีสมมติฐานการใช้งาน ตามสถานการณ์จริงที่มากกว่าที่เราคิด

หน้าที่ของเราในฐานะคนที่พัฒนา จำเป็นต้องคิด Test Plan, Scenario ให้ดี บางครั้งก็จำเป็นต้องคาดเดา ศึกษาล่วงหน้า ในสถานการณ์การใช้งานที่คาดไม่ถึง

รวมถึงเอกสารการใช้งาน ที่ต้องชัดเจน ว่าเคสไหน ใช้ได้ ใช้ไม่ได้ (ซึ่งก็ควรจะ derive มาจาก Test นั่นแหละ ไม่ใช่เทียนว่าใช้ได้ แต่กลับใช้ไม่ได้)​

Software ในปัจจุบันสร้างผลกระทบต่อชีวิตประจำวันค่อนข้างเยอะ กระบวนการที่ทำให้ Software ทำงานได้ดีและส่งผลทางบวกให้กับผู้ใช้เป็นสิ่งที่จำเป็น

สุดท้ายขอเอา ประโยค จาก IEEE Codes of Ethics มาใช้ ว่าทำไมเราต้องสร้างมาตรฐาน Software ที่ดี

to hold paramount the safety, health, and welfare of the public, to strive to comply with ethical design and sustainable development practices, to protect the privacy of others, and to disclose promptly factors that might endanger the public or the environment;

References:

  1. https://www.baselinemag.com/project-management/We-Did-Nothing-Wrong/
  2. https://www.embedded.com/whos-at-fault-when-code-kills/
  3. https://www.ieee.org/about/corporate/governance/p7-8.html

--

--

Teerayut Hiruntaraporn
Teerayut Hiruntaraporn

No responses yet