-
원리 (Principles)
효과적인 테스팅을 하기 위한 토대 (foundation)
↓
메소드 & 테크닉
원리를 기반으로 하여 메소드들과 테크닉들을 빌드할 수 있다.
↓
방법(Methodologies)
메소드들을 효과적으로 적용시킨다.
↓
마지막으로, 이 과정을 툴을 사용하여 자동화시킨다.
테스팅 & 분석의 원리
- 무엇: 품질공정(Quality process)
- 어디서: 버그를 가지고 있고 문제있는 구조와 모듈에 집중
- 언제: 가능한한 일찍 그리고 자주 테스팅 실행
- 누가: 효과적인 테스팅을 위해 조직(organization) 구조화(structuring)
- 어떻게: 효과적인 테스팅을 위한 전략들
무엇: 품질공정(Quality process)
품질(quality): 컴포넌트나 시스템 또는 프로세스가 특정한 요구사항 및 사용자/고객의 요구와 기대를 충족시키는 정도
품질공정(Quality Process): 활동(activities)과 책임감(responsibilities)의 세트
- 적절한 신뢰성을 보장하는데 주로 집중
- 제품 스케쥴 또는 제품 사용성에 대해서 고려
품질공정이 제공하는 프레임워크,
- 활동(activities)을 선택(selecting)하고 정리(arranging)
- 상호작용을 고려하고, 다른 중요한 목표들과 균형유지(trade-off)
품질의 목표
- 과정(process)의 품질: 반복가능성(repeatability), timeliness(적시), 비용, ... 지속적인 개선
- 제품의 품질
- 내적 품질: 재사용가능성, 관리가능성(manageability), 유지가능성, 수정가능성, ...
- 외적 품질
- 신뢰성(dependability) 품질: 가용성, 정확성, 신뢰성(reliability), 안전성, 강건성(robustness)
- 유용성(usefulness) 품질: 사용성(usuability), 성능(performance), 보안, 이식성(portability), 상호운용성(interoperability)
어디서: 오류 발생이 쉬운 요소들
프로그래머들은 비슷한 실수를 하는 경향이 있다.
소수점 숫자들
선천적으로 부정확함. 부정확은 비교불가능으로 이어질 수도 있다.
연속적인 계산은 정확도를 잃게 할 지도 모른다.
포인터(c/c++)
메모리를 잘못 가르키는 포인터들은 데이터 오류를 일으킬 수 있다.
에일리어싱(aliasing)은 프로그램을 이해하고 변경하는데 어려움을 야기시킬 수 있다.
병행성(parallelism)
병행 과정들 사이에서 보이지 않는 상호작용으로 인해 감지하기 힘든 시간 오류들을 일으킬 수 있다.
만약 동기화(synchronization)가 잘못 사용된다면, 결과적으로 교착상태(deadlock)가 될 수 있다.
병행성(parallelism): 컴퓨터 시스템의 여러 부분의 동시 작동을 말하며, 여러 프로그램의 동시 처리 또는 여러 컴퓨터 시스템의 동시 작동을 뜻한다.
교착상태(deadlock): 둘 이상의 프로세스가 서로 남이 가진 자원을 요구하면서 양쪽 모두 작업 수행을 할 수 없이 대기 상태로 놓이는 상태.교착상태를 처리하는 대표적인 3가지 방법
1. 예방(prevention): 교착상태를 유발하는 조건들이 성립되지 않게 사전에 이를 차단함으로서 절대 발생하지 않게 하는 전략
2. 방지(avoidance): 자원 할당 시, 교착상태를 유발할지를 사전에 확인하여 교착상태를 피할 수 없는 자원할당 방법이 있을 경우에만 자원을 할당해주는 전략
3. 감지 및 회복(detection and recovery): 자원 요청이 들어올 때마다 일단 자원을 할당해주며 대신 주기적으로 교착상태가 발생했는지 확인하여, 만약 교착상태가 발생하였다면 시스템의 상태를 회복하여 주는 전략수의 한계(limits)/경계(boundaries)
정수/소수에 있어 아주 큰 값
관계식(relational expression)에 대한 경계값
중단(interrupts)
중단은 중요한 작업이 끝나버리게 할 수 있으며, 프로그램을 이해하기 어렵게 만든다
중단은 goto문과 비슷하다
복잡한 논리식(Boolean expressions)
내포된 논리연산자(nested boolean operators)들은 이해하기 어려울 수 있다.
타입들 사이의 캐스트와 변환(conversions)
특히, 숫자 유형은 정확도를 잃게 하거나 넘침을 야기시킬 수 있다.
캐스트(cast): (C나 자바 같은 컴퓨터 언어에서) 캐스트는 객체를 하나의 형태에서 다른 형태로 변환시켜 주는 프로그램 행위를 자칭한다.
넘침(overflow): 사칙연산 결과가 레지스터 또는 컴퓨터가 다루는 수의 범위를 넘어서는 일.
모듈 테스팅을 위한 80-20 법칙
적은 수의 모듈들은 사전-릴리즈 테스팅 도중에 발견된 대부분의 결점들을 함유한다.
경험에 따르면, 20%의 모듈은 80%의 버그들을 가지고 있다.
프로그래머들은 많은 이유들로 인해 실수한다.
하지만, 몇몇 언어의 구조들과 모듈들은 버그를 가지고 있을 확률이 더 크다.
이러한 요소들에 주의를 가져 테스팅에 집중해야한다.
'테스팅 관련 > 개념' 카테고리의 다른 글
Validation과 Verification (V&V) (0) 2020.05.27 소프트웨어 개발의 "V 모델" (0) 2020.05.27 신뢰성(Dependability) 정의 (0) 2020.05.26 테스트가 뭐지? (0) 2020.05.23 왜 소프트웨어 테스팅은 어려울까? (0) 2020.05.23