반응형

제목: 소프트웨어 신뢰성 방법들(Software reliability methods)

저자: Eduardo Valido-Cabrera, 스페인

문서유형: 기술 문서( 17페이지), 2006


소프트웨어 신뢰성 개선을 돕는 기법들을 세 개 범주(결함 방지, 결함 발견, 결함 허용)로 분류하여 설명한 자료



소프트웨어 신뢰성(Software reliability)

  • 소프트웨어 신뢰성 정의: 소프트웨어가 특정 조건 하에서 특정 시간 동안 시스템 실패를 야기하지 않을 확률
  • 이 확률은 시스템에 주어지는 입력(시스템이 어떻게 사용되어지나)과 소프트웨어에 존재하는 결함에 달려 있음. , 소프트웨어 신뢰성은 소프트웨어에 있는 결함의 수와 이 결함들이 발생될(, 잘못된 코드가 실행되어 실패를 생성) 확률을 조합하여 결정됨
  • 따라서 소프트웨어 신뢰성은 결함의 수를 감소시키거나 또는 결함이 실패를 생성시킬 확률을 감소시킴으로써 개선될 수 있음


소프트웨어의 신뢰성을 개선시키는 기법들이 아래의 세 개 그룹으로 분류됨

  • 결함 방지(Fault avoidance): 소프트웨어 개발 동안 결함이 도입되는 것을 예방하는 것이 목표. 소프트웨어 개발 프로세스를 조사하는 기법들이 포함됨(, 표준, 방법론 등)
  • 결함 발견(Fault detection): 일단 개발된 코드에서 결함을 발견하는 것이 목표. 이 그룹의 기법들은 프로세스 보다는 결과물로 얻어진 제품에 집중함
  • 결함 허용(Fault tolerance): 발견된 결함에 통제된 반응(a controlled response)을 주는 것이 목표. 이 기법들은 안전 필수 소프트웨어(safety-critical software)에서 사용됨


결함 방지(Fault avoidance)

  • 이 범주에 속하는 기법들은 프로세스에 집중. , 개발 프로세스를 통제하고 결함의 도입을 막는 방법론과 표준을 정의(, ISO9000, CMM, ECSS, DO178B )
  • 개발 프로세스에 대한 확신(confidence)에 기반해 최종 제품의 신뢰성을 평가(추정)하는 연구가 존재. 이게 매우 주관적인 접근 방법이기는 하지만 제품이 개발되기 전에 신뢰성에 대한 개략적인 지표를 얻을 수 있음


결함의 도입을 막기 위해 개발 프로세스에 적용할 수 있는 기법으로 아래와 같은 것들이 있다.

  • 정형화 방법(Formal methods): 시스템을 구축하는데 엄격한 수학적 모델을 사용하는 설계 기법. 특히 설계 초기 단계에서 시스템으로 에러가 도입되는 것을 줄이는데 도움이 됨. 정형적 명세(Formal specifications)는 소프트웨어가 반드시 가져야 할 속성(properties)을 정밀하게 기술하기 위해 수학적 표기법(mathematical notation)을 사용. 자연어에 비해 표현이 제한되고 적용이 다소 어려운 것이 단점(정밀한 방식으로 시스템을 표현할 수 있게 하지만 표기법을 이해하고 사용하는데 많은 노력을 요구)
  • 소프트웨어 경화(Software Hardening): 소프트웨어의 복잡도가 도입되는 결함 수에 직접적인 영향을 미치는 것이 증명됨(소프트웨어가 복잡할수록 결함이 도입될 확률이 높다). 소프트웨어 경화는 소프트웨어 복잡도에 대한 정량적 지표를 제공하는 메트릭의 참조 값을 확립함으로써 소프트웨어 복잡도를 제한하려는 노력. , 작업자가 감당할 수 있는 복잡도 이상을 넘지 못하도록 제한
  • 소프트웨어 노화와 회춘(Software aging and rejuvenation): 소프트웨어도 그 생명 주기 동안 퇴화를 겪게 됨. 일부 미발견된 버그나 축적된 메모리 누수/훼손 등으로 인해 일정 실행 기간 후 실패가 일어나는데, 이를 소프트웨어 노화라 지칭. 이런 실패의 다수가 단지 주기적으로 애플리케이션을 재시작하는 것 만으로도 예방될 수 있는데, 이런 개념을 소프트웨어 회춘이라 함. , 결함이 여전히 그 자리에 있더라도 시스템을 재시작(완전 또는 부분적 재시작)함으로써 결함이 실패로 이어질 확률을 줄일 수 있으며, 그 결과 전체적인 시스템 신뢰성과 고객 만족도가 증가


결함 발견(Fault detection)

  • 정형화 방법과 검증(Formal methods and formal verification): 시스템을 명세하는데 정형화 방법이 사용되었다면 소프트웨어가 보여야 할(또는 보이지 않아야 할) 속성들을 정형적으로 검증하는 것이 가능
  • 동적 분석(Dynamic analysis): 프로그램 실행 동안 수행됨. 대개 코드를 인스트루먼트하고, 몇몇 통계치를 얻고, 런타임에서 소프트웨어의 동적 행동을 조사함. 이 분석은 테스트 케이스가 선정한 실행 경로에 기반하게 된다.
  • 의미론적 분석(Semantic analysis): 소프트웨어의 동적 속성의 정적 분석을 수행. 런타임 동안 보여지는 속성(, 참조 해제 메모리 영역에 접근, 초기화 안된 변수 등)의 정적 확인(static validation)


Semantic Analysis는 컴파일 타임에서 소프트웨어 애플리케이션의 동적 속성을 정적으로 분석하는 도구이며(코드 실행이 불필요), 아래와 같은 런타임 에러를 발견할 수 있다.

  • 공유 데이터에 동시 접근(Concurrent accesses to shared data)
  • 포인터 참조 해제 이슈(Pointer de-referencing issues): null, out-of bounds 액세스
  • 한도를 벗어난 어레이 접근(Out-of-bounds array accesses)
  • 초기화 안된 데이터에 읽기 접근(Read accesses to non-initialized data)
  • 타당하지 않은 산술 연산(Invalid arithmetic operations): 0으로 나누기, 음수의 제곱근 등
  • float이나 integer의 오버플로우/언더플로우
  • 불법 타입 전환(Illegal type conversion): , float에서 int로 또는 long에서 short로 전환
  • 동적으로 도달 불가능한 코드(Dynamically unreachable code)
  • 무한 루프(Non-termination of loops)
  • 초기화된 반환 값(Initialized return values)


결함 허용(Fault tolerance)

아래와 같이 여러 수준의 결함 허용이 구현될 수 있다.

  • 완전 결함 허용(Full fault tolerance): 실패 발생 시 시스템이 정상적 운용을 계속함
  • 점진적 저하(Graceful degradation): 시스템이 감소된 기능 또는 성능으로 운용됨
  • 안전 모드(Safe mode): 시스템이 수리되어 다시 완전하게 가동될 수 있을 때까지 최소 기능과 성능으로 운용됨


소프트웨어 결함 허용 기법들이 아래의 두 개 그룹으로 나뉜다.

  • 단일 버전 결함 허용(Single version fault tolerance): 결함 활성화에 의해 야기되는 에러를 발견/억제/처리하는 메커니즘을 추가함으로써 단일 소프트웨어의 결함 허용을 개선하는데 집중. 소프트웨어의 단 하나 버전만 개발하는 장점이 있지만 복잡도가 추가되고 상당한 성능 오버헤드가 수반됨. 시스템의 출력을 결정하는데 단 하나의 버전에 의존
  • 다중 버전 결함 허용(multiple-version fault tolerance): 다수 버전의 소프트웨어를 사용하며, 이 여러 다른 버전이 동시에 실패를 야기하지 않도록 설계됨(, 각기 다른 실패 프로파일을 가짐). 정확한 출력이 될 확률이 증가되지만, 여러 다른 버전으로부터 나온 출력물에 기반해 정확한 출력을 제공하는 의사결정 모듈(the decision module)을 구현하기가 어려움. 또한 다중 버전 상의 실패의 독립성을 보장하는 것도 중요 이슈


운용 프로파일(operational profiles) 개발

  • 테스팅 노력이 높은 실행 확률을 가진 기능에 집중되는 것이 매우 중요함.
  • 운용 프로파일은 시스템에 있는 모든 오퍼레이션과 이들의 확률을 식별함. 오퍼레이션 간 테스팅 노력을 분배하기 위해서 이 확률을 각 오퍼레이션의 중요도(criticality)와 조합한다.
  • 소프트웨어 신뢰성을 효과적으로 높이기 위해 테스팅 자원을 효과적으로 사용하려는 것이 운용 프로파일 개발의 목표이다.
  • 운용 프로파일을 통해 1)가장 많이 사용되고 가장 중요한 기능에 자원을 집중시키고, 2) 테스트가 운용 현장을 잘 대표하도록 만들어 테스트 효과성을 최대화시킴


반응형

+ Recent posts