반응형

제목: 의료 기기 소프트웨어의 아키텍쳐 기반 정적 분석: 1차 결과(Architecture-based Static Analysis of Medical Device Software: Initial Results)

저자: Dharmalingam Ganesan 2, 미국

문서유형: Academy 페이퍼( 4페이지)

 

의료 기기 소프트웨어의 소스 코드 아키텍쳐 분석 방법을 제안하고 자동 수혈 인퓨젼 펌프를 통제하는 CARA 소프트웨어에 제안한 방법을 적용하여 설명한 자료



배경 정보

  • 미식품의약국(US Food and Drug Administration: FDA): 미국에서 판매되는 의료 기기의 안전성과 효과성에 대한 규제 책임을 지고 있음
  • 최근 FDA 데이터베이스 연구에 따르면 소프트웨어 에러로 인한 의료 기기 장애율이 증가 추세: 2006년도에 소프트웨어 에러가 의료 기기 리콜의 21% 차지
  • 2005~2009년 사이에 년간 만 건 이상의 불만이 FDA에 보고되었으며, 이 중 710건이 장비 장애 관련 인명 사고(환자 사망)
  • FDA 분석가들은 의료 장비 장애의 근본 원인(root causes)을 식별하기 위해 정적 분석 도구(static analysis tools: SAT)를 사용하여 소스 코드를 분석. 또한 소스 코드로부터 추출해 낸 아키텍쳐 구조를 SAT를 구성(configure)하는데 사용하여 의료 소프트웨어의 안정성(safety)을 분석하는 연구가 진행 중


CARA 소프트웨어

C/C++로 구현된 실시간 임베디드 소프트웨어인 CARA(Computer-Assisted Resuscitation Algorithm) 는 주입 펌프(an infusion pump)에서 혈압 유지를 위해 소생액(resuscitation fluids)을 환자에게 주입하는 기능을 한다


제안 방법

Fraunhofer 연구팀은 높은 안정성이 요구되는 항공우주 분야(the safety-critical aerospace domain)시스템들의 아키텍쳐를 분석한 지식베이스 구축하였는데, FDA는 이 연구를 활용하여 의료 기기 분야 소스 코드의 아키텍쳐 구조를 분석하는 연구를 진행 중이다. 의료 소프트웨어의 소스 코드 아키텍쳐 분석은 아래와 같은 5 단계로 구성된다.

  • Step 1 코드베이스 정리(Clean the codebase): 코드베이스에는 파서와 분석가를 혼동시키는 중복 파일이 종종 포함되어 있으므로 이 단계에서 이런 노이즈를 식별해 걸러낸다. Fraunhofer 연구팀에서 개발한 인덱싱 도구(an indexing tool)는 정보 검색 기술(information retrieval technologies)을 기반으로 중복 파일들을 식별해 내고 이들을 제거한 후 인덱스를 재구축한다. 이 단계의 출력물은 노이즈가 제거된 깨끗한 버전의 코드베이스이다.
  • Step 2 요약 정보 생성(Generate summary): 소스 코드의 구조적으로 중요한 특징(architecturally significant features)을 식별해낸다. Fraunhofer 연구팀이 지난 10년간 24개 이상의 실제 시스템을 분석하였는데, 이를 기반으로 외부 엔터티(, 프로그래밍 언어 라이브러리, OS 라이브러리, 상용 COTS 소프트웨어)에 존재하는 키워드들의 지식 베이스(a knowledge base: KB) 구축하였다. KB는 특정 시스템에서 적용된 아키텍쳐를 식별하는데 중요한 역할을 하는 키워드를 헤더 파일명(header file names)이나 기능모듈명(function names)으로부터 추출하여 저장하고 있다. KB와 코드베이스를 입력으로 받아서 코드베이스의 요약 정보(a summary of the codebase)를 출력하는 요약정보생성기(a summary generator)를 사용한다.
  • Step 3 코드의 정적 구조 식별(Discover static structures from code): 이 단계의 목표는 테스트용이성(testability) 분석을 돕기 위해 소스 코드로부터 아키텍쳐 정적 구조를 추출해낸다. 정적 구조는 파일 시스템 상의 소스 코드 파일(모듈)이 어떻게 조직되었는가와 이 모듈들간의 상호 의존 관계를 보여주며, 또한 모듈들이 계층(layers) 구조로 되어 있는지 그리고 잠재적인 상호 의존 관계가 존재하는지도 보여준다. 정적 구조는 그래픽 사용자 인터페이스(GUI)의 지원, 외부 하드웨어(, 혈압 모니터, 인퓨젼 펌프)와 상호작용, OS 기능 사용 등에 대한 정보도 알려준다.  
  • Step 4 코드의 런타임 구조 식별(Discover runtime structures from code): 소스 코드로부터 아키텍쳐 런타임 구조를 추출해낸다. 런타임 구조(Runtime structures)는 소스 코드가 어떻게 태스크(tasks)로 나누어지는지, 태스크들간에는 어떻게 서로 커뮤니케이션하고 동기화하는지를 캡쳐한다. 모듈과 런타임 컴포넌트(, 태스크)간에 다 대 다 관계(a many-to-many relation)가 있을 수 있으므로 런타임 구조 식별이 중요하다. , 분석가는 정적 구조가 어떻게 태스크로 변환되는지 그리고 태스크들 간에 어떻게 커뮤니케이션되고 동기화되는지를 이해하기 위해 런타임 구조를 활용한다.
  • Step 5 정적 분석 도구 구성 및 런(Configure and run static analysis tools): 성능 개선을 위해 추출된 정적 구조와 런타임 구조를 활용하여 정적 분석 도구(SAT)를 구성하고 동작시킨다.

 

반응형

+ Recent posts