용어 설명
Software defect
소프트웨어 결함 Buffer overflow : pointer가 buffer의 영역에 벗어나는 것
Invaild pointer dereference/arithmetric : 널 포인터에 값 할당
Race condition : 다른 프로세스에 의해 결과가 바뀌는 상태
Nested scheduler unlock
Unsafe casting : 강제로 데이터 변환하는거
Stack overflow : stack의 영역을 벗어나서 계속 쌓는 것
Testings
테스팅의 종류 Defect testing
: 결함이 있는지 확인 (멈추더라도 하나라도 fault를 찾는게 중요)
Validation testing
: 동작을 잘 하는지 확인 (결함 발생해도 돌아가게 하는게 중요)
Fault, Error, Failure Fault(defect, 결함) : 소스코드를 잘못친거
ex) assert(x+y==4)assert(x*y==4)라고 적었다.
Error(오류) : Fault인 코드를 실행했을 때 발생하는 잘못된 내부상태. 실행되지 않으면 Error가 아니다.
ex) if z>0 : assert(x*y==4) 에서 z>0이면 Error. z≤0이면 Error가 아니다.
Failure(실패, 오작동) : 외부에서 관찰될 수 있는 실행의 결과값 (execution result)가 원래 기댓값과 다른 경우
Error state State가 처음으로 달라지는 순간
Testing Goals Fault를 찾자

ex) 값이 0인 x의 elements 개수를 찾자. x==null이면 NullPointerException()을 실행 ****for i in range(1,len(x)) : if x[i]==0 : return count+=1 return count

Fault : range(1,len(x)) Error : i에 1이 할당되었을 때 Failure : len(x)>0 && x[0]=0일때 Fault가 Error로 가지 않는 경우 : x가 NullPointer일때 Fault를 수행하는데 Error로 가지 않는 경우 : 없음 Error인데 Failure가 아닌 경우 : len(x)>0 && x[0]≠0인 경우 | | | | | testing vs debugging | testing : 실행의 결과를 관찰함으로써 소프트웨어를 평가 test failure : 소프트웨어 failure를 실행시키는 테스트 debugging : failure으로부터 fault를 발견하는 과정 | | Fault & Failure Model RIPR Model | Reachable : Fault가 영향을 미치는 범위, 장소 Infection : incorrect state를 발생시키는 fault의 실행 Propagation : infected state의 잘못된 output or final state Revealability : Oracle로부터 final state의 incorrect를 확인 |

RIPR. R : 영향을 미침, I : 실행함(감염시킴) P : 잘못된 output, R : 확인

RIPR. R : 영향을 미침, I : 실행함(감염시킴) P : 잘못된 output, R : 확인

용어 설명
Coverage Criteria
커버리지 **테스트할게 너무 많으니 최소한의 test case로 most problem을 search하기 위한 방법

목표 : 최소한의 test case로 최대한의 Fault를 찾아내자**

장점

명세대로 프로그램을 만들었는데도 다를 수 있고, 명세를 보고 test를 만들었는데도 다를 수 있음. 3가지 모두 각각 다른 영역이라 모든 겹치는/안겹치는 영역에 대해 테스트해보는게 좋다. | | Black-box testing White-box testing | Black-box testing : 프로그램이 블랙박스라고 생각하고 테스트 케이스를 디자인함. 프로그램의 구조를 모름. White-box testing : 프로그램의 구조에 따라서 (코드를 보고) 테스트케이스를 디자인함. 프로그램에 대한 지식이 있어야 테스트케이스를 찾아낼 수 있음. | | | | | Black-box Testing | 어떤 input이 들어오면 어떤 output이 나오는지 알고 있어서 프로그램에 대한 이해가 없어도 테스트 케이스를 만들 수 있음 ex) 계산기의 덧셈 이해(ALU)가 없어도 1+1=2인건 알고 있음 | | Equivalence Partitioning 동치류 | Equivalence(동치류) : 교집합이 공집합이고 합집합이 전체집합인 부분집합들 같은 놈들끼리 묶는거. Input을 동치류로 묶어서 대푯값 하나씩을 테스트함 대표값 하나만 테스트해도 다 똑같은(Equivalent한) 놈들이니까 나머지는 안해도 됨. ex) Partition을 x<4, 4≤x≤10, 10<x (동치류)로 나눈다하면 x = 3,4,7,10,11만 테스트하면 됨. | | Specification-based Testing 스펙중심테스팅 | Black-box Testing의 대표적인 테스팅 방법. 되도록이면 Spec 전체를 커버하는 테스트를 수행하자. (Boundary value들을 테스트)

장점

[spec] input : 세 변의 길이 (a,b,c) output : return 0 if 정삼각형 return 1 if 이등변삼각형 return 2 if 나머지 삼각형 return 3 if 삼각형 아님

[Requirement]

  1. 정수 : 0<a≤MAX_INT, 0<b≤MAX_INT, 0<c≤MAX_INT
  2. 삼각형 조건 : a+b>c, a+c>b, b+c>a
  3. not 삼각형 조건 : a+b≤c, a+c≤b, b+c≤a
  4. 이등변삼각형 : a=b=c, a=b≠c, b=c≠a, a=c≠b

이 경우, Equavalence의 전체집합은 integer과 아닌거 or 삼각형인거 아닌걸로 나눌 수 있겠다. 사실 하나씩 줄여나가는거긴함

[정수] form : (a,b,c) Weak normal : 1, MAX_INT/2, MAX_INT Strong normal : (1, MAX_INT/2, MAX_INT)^3 = 3^3 Weak robust : (0,MAX_INT/2,MAX_INT+1) Strong robust : (0, 1, MAX_INT/2, MAX_INT,++) ^3= 5^3

[삼각형] a기준 Weak normal : 1, b, c Strong normal : (1, b, c)^3 = 3^3 Weak robust : 1, b-1, b, c-1, c Strong robust : (1, b-1, b, c-1, c)^3 = 5^3

[이등변] a기준 (a=b=c) Weak normal : a, b, c Strong normal : (a, b, c)^3 = 3^3 Weak robust : a-1, a, b-1, b, c-1, c Strong robust : (a-1, a, b-1, b, c-1, c)^3 = 6^3

[정삼각형] a기준 Weak normal : a, a, a Strong normal : (a,a,a), (b,b,b), (c,c,c) Weak robust : a-1, a Strong robust : (a-1, a)^3 = 2^3 | | Classification Tree Method | Non-numeric feature testing에 사용 |

Classification Tree Method

Untitled

같은 level의 값들이 한번씩만 나타나면 됨(Weak normal) test case 1 : large red circle test case2 : small green square

Untitled

Untitled

Decision Table Based Testing

Untitled