-
신뢰성(Dependability) 정의테스팅 관련/개념 2020. 5. 26. 23:04
신뢰성(Dependability)
정해진 시간 내에 방어적으로 신뢰할 수있는 서비스를 제공하는 능력
소프트웨어를 신뢰하는지? = 신뢰할 수 있는 서비스를 전달하는지?서비스
사용자에게 인지(perceive)되는 시스템 행동
예. 비행기 서비스는 사람들을 이 도착지에서 저 도착지로 보내는 것이다.장애(Failure)
원하는 서비스를 서술한 스펙(specification)에서 벗어났을 때 발생
예. 무언가를 살 수 있는 웹사이트에서 구매하려고 했을 때, 에러가 발생하는 것 → 사용자가 볼 수 있는 장애오류(Error)
시스템의 한 부분으로서, 장애(failure)로 이끌 수 있는 요소
오류는 잠복(latent)해 있거나 활동적(effective or active)일 수 있다.
예. 코드에 버그가 있는데 (잠복) → 실행에서 버그를 잡았다 (활동)결점(Fault)
오류를 발생시키는 근원(root)
피지컬(예. 합선(short-circuit)) 또는 사람에 의해 발생(예. 프로그래머의 실수)Faults (e.g. programmer's mistake) are the cause of
Latent Errors (e.g. a line of code with a bug in it) which become
Effective Errors if the system reaches a state where the error can manifest (e.g. executing the line of code containing a bug), which may cause
Failures if the error causes a visible deviation from service from the user's perspective (e.g. the program crashes).
결점은 잠복하고 있는 오류의 원인이다.
만약 시스템이 오류가 나타나는 상황이 된다면,
잠복하고 있는 오류에서 활동적인 오류가 될 수 있다.
만약, 사용자의 관점에서 오류가 서비스에서 확연히 벗어나면 장애를 야기할 수 있다.
결점(예. 프로그래머의 실수) → 잠복하고 있는 오류(예. 버그가 포함된 코드 라인) → 시스템에 오류가 나타날 수 있는 상황(예. 버그 포함한 코드 라인의 실행)이 된다면, 활동적인 오류 → 만약 오류가 사용자의 관점에서 확연히 서비스에서 벗어난다면(예. 프로그램 충돌), 장애자세한 설명 참고: 버그/이슈/결함/장애
신뢰할 수 있는 시스템(dependable system)을 얻으려면,
- 결점 방지(Fault avoidance): 예방(preventing), 구축(construction)에 의해 발생한 결점의 수를 줄이는 테크닉.
- 결점 허용성(Fault tolerance): 발생한 결점으로부터 시스템 장애가 발생하는 것을 방지하는 테크닉. 제공(providing), 반복(redundancy)에 의해 발생된 또는 발생 중인 결점에도 불구하고 스펙을 준수(comply)하는 서비스 허용.
- 오류 제거: [검증(validation)과 검증(verification) - V&V]을 수행하면서 오류를 발견 및 제거하는 테크닉.
- 오류 예측(forecasting): 검증(validation)에서 주로 사용되며, 결점 & 오류 &장애를 추정(estimating) 및 평가(evaluation). 대체적으로 신뢰성(Reliability) 측정에 집중.
신뢰성(Dependability) 측정
- 가용성(Availability): 올바른 서비스를 위한 준비성. 사용자 요구에 답하기 위한 소프트웨어의 준비성. 제품을 사용하고자 할 때 컴포넌트나 시스템의 운용, 접근 가능한 정도. 원할 때 시스템을 사용할 수 있는지?
- 신뢰성(Reliability): 올바른 서비스의 지속성. 컴포넌트나 시스템이 특정한 조건에서 특정 기간 중 특정 기능을 수행하는 정도. 얼마나 오랫동안 잘 실행되는지?
- 안전성(Safety): 사용자와 환경에 대한 파멸(catastrophic)의 결과들의 부재. 규정된 조건에서 시스템이 인간의 생명, 건강, 재산 또는 환경이 위험한 상태에 이르지 않도록 하는 역량.
- 진실성(Integrity): 부당한 시스템 개조의 부재.
- 유지보수성(Maintainability): 프로세스가 변경(modification)과 수리(repair)를 겪어낼 수 있는 능력
가용성(Availability) 측정
2가지에서 파생,
- 신뢰성(Reliability): 시스템이 어떻게 실행되면 좋을까?
- 평균 고장 간격 (Mean-Time Between Failures (MTBF)) 로 측정된다.
- 회복성(Recoverability): 얼마나 빨리 장애(failure)에서 회복할 수 있는가?
- 평균 수리 시간 (Mean-Time To Repair (MTTR)) 로 측정된다.
따라서, 가용성은 R = MTBF / MTBF + MTTR
장애(Failure)를 위한 계획,
중요한 시스템은 장애 계획에 많은 노력을 쏟는다
- 물리적 장치가 망가질 것이라 예상한다.
- 소프트웨어가 오작동(fail)할 것이라 예상한다.
- [허용가능한 장애들 vs. 중요한 장애들] 식별은 핵심 아이디어!
소프트웨어는 신뢰(dependable)할 수 있어야 한다!
결점 → 잠복오류 → 활동적오류 → 장애
테스팅은 오류 제거에 있어서 효과적인 전략의 한 부분일 뿐이다.
1. 결점 방지 2. 결점 허용성 3. 오류 제거 4. 오류 예측
중요한 시스템들은 장애(Failure)에 대한 계획을 세운다.
테스팅은 장애(Failure)를 포함해야한다.
Rigor of Testing은 위험한 상태에 따라 행해져야한다.
'테스팅 관련 > 개념' 카테고리의 다른 글
소프트웨어 개발의 "V 모델" (0) 2020.05.27 테스팅 원리 (0) 2020.05.27 테스트가 뭐지? (0) 2020.05.23 왜 소프트웨어 테스팅은 어려울까? (0) 2020.05.23 SW Testing 101 (0) 2020.05.22