반응형

Therac-25

  • Atomic Energy of Canada Limited(AECL) Therac-6 Therac-20에 이어 생산한 방사선 치료 기기로 암 치료에 두 개의 치료 모드(X-ray 모드와 일렉트론 모드)를 제공
  • 기기는 자체 운영 체제를 사용하며 소프트웨어는 어셈블리 언어로 쓰여짐. 이전 모델인 Therac-6 Therac-20의 설계 및 코드가 일부 재사용됨
  • 1985 6월과 19871월 사이에 최소 6건의 과다 투여 사고에 관여(처방된 투여량의 30~100배가 넘는 방사선이 환자에게 투여되어 4명이 죽고 2명은 심각하게 부상). 빔 스프레더 플레이트가 제자리에 있지 않는 상태에서 의도한 저파워 빔 대신에 고파워 빔이 활성화되면서 과다 투여 사고가 발생
  • 이전 기기 모델들은 안전 장치인 하드웨어 인터록(hardware interlocks)이 존재하여 이런 사고를 방지했지만 Therac-25는 이를 소프트웨어 인터록으로 대체하였고 결함 때문에 인터록이 제대로 동작하지 않는 경우가 생김

 

[위 사고와 관련된 Race Condition 버그를 설명한 Udacity의 영상 - 2분 46초]

 

사고 원인

조사 결과 여러 소프트웨어 결함이 식별됨

  • 테스팅 루틴에 있는 1-바이트 정수 카운터에서 종종 오버플로우가 일어나며 오버플로우가 발생한 바로 그 시점에 오퍼레이터가 기계에 입력을 가하면 소프트웨어 인터록이 동작하지 않음
  • 기기의 실시간 운영 체제(RTOS)가 쓰레드 메시지 패싱을 지원하지 않아서 대신 전역 변수(global variables)를 사용. 전역 변수의 무결성 보호가 미흡하여 결과적으로 기기 동작 중에 잘못된 데이터가 사용됨
  • 기기 콘트롤 태스크가 오퍼레이터 인터페이스 태스크와 제대로 동기화되지 않아서 오퍼레이터가 셋업을 너무 빠르게 변경하면 경쟁상태(race conditions)가 발생. 오퍼레이터가 이런 상황을 유발할 정도로 빠르게 기기를 조작할 수 있게 되려면 일정 숙련 기간이 걸리므로 테스팅에서는 이 문제가 드러나지 않음

 

조사 위원회는 발견된 여러 코딩 에러 보다는 잘못된 소프트웨어 설계와 개발 관행에 문제의 일차적인 이유가 있다고 결론 내림. 특히, 깔끔하게 자동화된 방식으로 테스트 하는 것이 현실적으로 불가능하도록 소프트웨어가 설계되었음을 지적.

 

 

[콜로라도 대학의 소프트웨어 설계 강의에서 Therac-25 사례 연구 부분 - 강사 Albert Glock, 14분 9초]

 

반응형

+ Recent posts