1 9. 소프트웨어테스팅
주요내용 품질이란무엇인가? 테스팅이란무엇인가? 블랙박스테스팅기법에는무엇이있는가? 화이트박스테스팅기법에는무엇이있는가? 2
소프트웨어개발과품질 품질의다양한의미 - 프로그램이정상적으로작동하는것 - 프로그램에기대하는막연한완성도 - 명시된요구사항을만족시키는것 - 고객이의도한대로요구사항을올바르게정의하는것 3
4 소프트웨어테스팅 (Software Testing)
테스팅 (Testing) 정의 - 기존조건및필요조건 ( 즉, 결함 / 에러 / 버그 ) 사이의차이점을발견하기위하여 소프트웨어항목을분석하고, 분석된항목의특성을평가하는프로세스 [IEEE-Std-829] - 에러를발견하려는의도를가지고프로그램을실행하는프로세스 [Myers] 5
테스팅과디버깅의차이점 테스팅 (Testing) 디버깅 (Debugging) 목적알려지지않은에러의발견이미알고있는에러의수정 수행 시스템내부관련자, 테스팅팀등외부의제 3 자 시스템내부관련자 주요 작업 에러발견 (Fault Detection) 에러의정확한위치파악 (Fault Location) 에러의타입식별 (Fault Identification) 에러수정 (Fault Correction) 6
결함을지칭하는다양한용어 에러 (Error), 오류 결함의원인사람 (S/W 개발자, 분석가등 ) 에의하여생성된실수가주를이룸 결함 (Defect), 결점 (Fault), 버그 (Bug) 실패또는문제의원인제품에포함된결함 실패 (Failure), 문제 (Problem) 제품의결함 (Defect) 이있는부분이실행될때발생되는현상 7
테스트케이스 (Test Case) 의미 - 테스트의목적에맞게테스트조건, 입력값, 예상출력값, 실제테스트결과를 기록하는것 [IEEE-Std-610] 목적 - 테스터가테스팅을체계적으로할수있도록함 - 개발자가테스팅결과를통해디버깅을하는기준이됨 8
테스트케이스의예 테스트케이스 ID: ST-0001 목적로그인시아이디와패스워드의대소문자를구분하여처리한다. 테스트 조건 아이디 / 비번 : abcd / abcd 가 DB 에이미입력되어있음. 테스터한동석테스트일자 2006.10.01~2006.10.01 단계입력값예상출력값실행결과조치사항 조치후시험결과 1 아이디 : ABCD 패스워드 : abcd 아이디없음경고정상로그인디버깅필요 아이디없음 경고 2 3 아이디 : abcd 패스워드 : ABCD 아이디 : abcd 패스워드 : abcd 패스워드틀림경고패스워드틀림경고 - - 정상로그인정상로그인 - - 9
테스팅종류 테스트정보를얻는대상에따른분류 - 블랙박스테스팅 (Black-Box Testing) 요구사항명세서 (SRS) 나설계서로부터테스트케이스추출 - 화이트박스테스팅 (White-Box Testing) 내부구조 ( 소스코드 ) 를기반으로테스트케이스추출 10
[ 예 ] 세양수중큰수출력프로그램 (1/3) 사용자요구사항 - 서로다른세양수 A, B, C 를입력하여그중가장큰수를출력하라. 시작 시작 1 1 A, B, C 값입력 A, B, C 값입력 2 2 A > B A > B N N Y 3 4 Y 3 4 MAX = A MAX = B Black box 5 MAX = A 5 MAX = B MAX > C N 7 MAX > C N 7 Y 6 MAX = C Y 6 MAX = C MAX 출력 MAX 출력 8 8 종료 종료 11 (a) 블랙박스테스팅 (b) 화이트박스테스팅
[ 예 ] 세양수중큰수출력프로그램 (2/3) 블랙박스테스트케이스 ID 테스트케이스 1 A가가장큰정수일경우 2 B가가장큰정수일경우 3 C가가장큰정수일경우 4 A를음수로입력할경우 5 A와 B를같은정수로입력할경우 6 B를소수로입력할경우 7 12
[ 예 ] 세양수중큰수출력프로그램 (3/3) 화이트박스테스트케이스 시작 ID 테스트케이스 1 A, B, C 값입력 1 (1->2->3->5->6->8) 2 (1->2->3->5->7->8) 3 (1->2->4->5->6->8) 2 A > B N Y 3 4 4 (1->2->4->5->7->8) MAX = A MAX = B 5 MAX > C N 7 Y 6 MAX = C MAX 출력 8 종료 13 (b) 화이트박스테스팅
블랙박스테스팅 (Black-Box Testing) 개요 - 요구사항명세서나설계서를참조하면서수행하는테스팅 소스코드자체의로직 (Logic) 에는관심이없고입, 출력값에만관심이있다 - 방법 신택스테스팅 (Syntax Testing) 동등분할 (Equivalence Partitioning) 경계값분석 (Boundary Value Analysis) 의사결정테이블 (Decision Table) 14
신택스테스팅 (Syntax Testing) 개요 - 블랙박스테스팅기법중가장단순한방법 - 입력데이터가미리정의된데이터유형에적합한지를검증하는방법 - 입력값을적합 (Valid) 과부적합 (Invalid) 으로분류한뒤, 예상되는결과를검증하는기법 활용 - 회원가입폼과같은화면에서사용자의이름이나아이디의데이터유형이적합한지를 확인하는경우 15
[ 예 ] 신택스테스팅 입력변수적합조건부적합조건 사용자이름 6 자리이상 8 자리이하알파벳숫자, 특별기호등 No. 적합 / 부적합입력유형입력값예상결과 1 적합 7자리알파벳 kildong 정상처리 2 부적합 길이가짧은경우 kil 에러메시지 - 길이부적합 3 부적합 알파벳이아닌경우 길동386 에러메시지 - 입력유형부적합 16 2008 Software Engineering
동등분할 (Equivalence Partitioning) 개요 - 입력값이범위가정해져있을경우, 각범위의대표값을이용하여테스팅 장점 - 간단하고이해하기쉬움 - 이용자가작성가능 - 무작위방법보다체계적인방법 17 2008 Software Engineering
[ 예 ] 동등분할 (1/2) 사용자요구사항 - 100 점이만점이고 0 ~ 100 점을받을수있는시험이있다. 시험점수를입 력하면, 점수에따라다음과같이 A 부터 F 까지의성적을출력하라. 성적 90점이상 ~ 100점이하 A 80점이상 ~ 90점미만 B 70점이상 ~ 80점미만 C 0점이상 ~ 70점미만 F 18 2008 Software Engineering
[ 예 ] 동등분할 (2/2) 동등분할테스트케이스 0 점수 < 70 70 점수 < 80 80 점수 < 90 90 점수 100 테스트케이스 1 2 3 4 점수범위 0 점이상 ~ 70 점이하 70 점이상 ~ 80 점미만 80 점이상 ~ 90 점미만 90 점이상 ~ 100 점이하 입력값 ( 점수 ) 50 점 75 점 85 점 95 점 예상결과값 F C B A 실제결과값 F C B A 19 2008 Software Engineering
경계값분석 (Boundary Value Analysis) 개요 - 입력값의주요오류대상인경계값을입력값으로테스트케이스를작성하여테스팅 [ 예 ] - 동등분할의예제를경계값분석방법을이용하여테스트케이스를추출한경우 테스트케이스 1 2 3 4 5 입력값 ( 점수 ) -1점 0점 99점 100점 101점 점수범위 점수범위초과 정상 정상 정상 점수범위초과 예상결과값 경고창 F A A 경고창 실제결과값 경고창 F A A 경고창 20 2008 Software Engineering
의사결정테이블 (Decision Table) 개요 - 입 / 출력값이 True, False 로결정될수있는경우모든경우의수를확인해볼수있는 방법 활용 - 입력, 출력값이 Yes, No 로결정될수있는경우 - 적은수의조건을가진입력값에유용함 21
[ 예 ] 의사결정테이블 사용자요구사항 - 아이디와비밀번호를입력하여둘모두유효하면정상로그인이된다. - 그러나아이디가유효하지않을경우잘못된아이디라는경고창을보여준다. - 아이디는유효하나비밀번호가유효하지않으면잘못된비밀번호라는경고창을보여준다. 의사결정테이블테스트케이스 테스트조건 1 2 3 4 입력값 예상 출력값 유효한아이디 T T F F 비밀번호 T F T F 로그인성공 T F F F 잘못된아이디경고창 F F T T 잘못된비밀번호경고창 F T F F 22
화이트박스테스팅 (White-Box Testing) 개요 - 소스코드를직접참조하면서수행하는테스팅기술 - 방법 문장커버리지 (Statement Coverage) 분기커버리지 (Branch Coverage) 조건커버리지 (Condition Coverage) 다중조건커버리지 (Multiple Condition Coverage) 23
문장커버리지 (Statement Coverage) 개요 - 프로그램을구성하는문장들이최소한한번은실행될수있는입력값을테스트케이 스로선정함 보너스 = 0 [ 예 ] - 테스팅예제순서도를문장커버리지를 ( 가 ) a If( 작년 == A AND condition > 1) N 적용하여추출한테스트케이스 테스트케이스 ID 입력값 경로 출력값 1 (A, 2, 2) (a-b-c-e-f-h) 300 ( 나 ) b Y 보너스 = 100 c If(condition == 2 OR 자녀수 > 3) N d............ e Y 보너스 = 보너스 + 200 g f 보너스출력 h < 테스팅예제순서도 > 24
분기커버리지 (Branch Coverage) 개요 - 프로그램에있는분기를최소한한번은실행하게 보너스 = 0 a 하는테스팅하는방법 ( 가 ) If( 작년 == A AND condition > 1) N [ 예 ] - 테스팅예제순서도를분기커버리지를적용하여 b Y 보너스 = 100 d 추출한테스트케이스 c ID 테스트케이스 입력값경로출력값 ( 나 ) If(condition == 2 OR 자녀수 > 3) N 1 (A, 2, 2) (a-b-c-e-f-h) 300 2 (B, 1, 2) (a-d-c-g-h) 0............ e Y 보너스 = 보너스 + 200 f 보너스출력 g h < 테스팅예제순서도 > 25
조건커버리지 (Condition Coverage) 개요 - &&, 등의조건을가진분기문이전체조건식의결과와관계없이 && 나 전후의각 개별조건식이참한번, 거짓한번을갖도록테스트케이스를만드는방법 26
[ 예 ] 조건커버리지 (1/2) 사용자요구사항 - 학생의평균과과목수를받아서, 장학금대상자를선정하라. 장학금대상자는평균이 90 점이상이고, 과목수가 5 과목이상인학생으로한다. 시작 a 개별조건식 평균, 과목수입력 b If( ( 평균 >=90) && ( 과목수 >=5) ) If( ( 평균 >=90) && ( 과목수 >=5) ) N d 전체조건식 c Y 장학금대상자선정 e 27 종료
[ 예 ] 조건커버리지 (2/2) 조건커버리지테스트케이스 ID 테스트케이스입력값경로출력값 1 (95, 4) (a-b-d-e) 대상자아님 2 (72, 7) (a-b-d-e) 대상자아님............ 입력값은 ( 평균, 과목수 ) 이며, 출력값은대상자선정여부이다. 조건커버리지테스트케이스진리표 평균 과목수 전체조건식 95 이면참 4 이면거짓 거짓 72 이면거짓 7 이면참 거짓......... 28
다중조건커버리지 (Multiple Condition Coverage) 개요 - 조건커버리지가각개별조건식의조건을검사하는것이라면, 다중조건커버리지는 전체조건식의조건을검사하는테스트케이스를만드는방법 29
[ 예 ] 다중조건커버리지 다중조건커버리지테스트케이스 - 조건커버리지의예제를다중조건커버리지를적용하여추출한테스트케이스 ID 테스트케이스입력값경로출력값 1 (95, 4) (a-b-d-e) 대상자아님 2 (72, 7) (a-b-d-e) 대상자아님 3 (80, 4) (a-b-d-e) 대상자아님 4 (92, 5) (a-b-c-e) 대상자 다중조건커버리지진리표 입력값은 ( 평균, 과목수 ) 이며, 출력값은대상자선정여부이다. - 조건커버리지의예제를다중조건커버리지를적용하여추출한테스트케이스진리표 평균 과목수 전체조건식 95 이면참 4 이면거짓 거짓 72 이면거짓 7 이면참 거짓 80 이면거짓 4 이면거짓 거짓 92 이면참 5 이면참 참 30
기본경로테스팅 (Basic Path Testing) 개요 - Tom McCabe에의해개발된기법 - 프로그램의제어구조 (Control Structure) 를플로우그래프 (Flow Graph) 로표현하고, 순환복잡도 (Cyclomatic Complexity) 를통해독립적인경로의수를찾아테스트케이스를추출하는기법 테스트케이스추출단계 1. 테스팅할대상의플로우그래프를그린다. 2. 순환복잡도를계산한다. 3. 독립적인경로들을정의한다. 4. 정의된각경로의테스트케이스를작성한다. 31
1. 테스팅할대상의플로우그래프를그린다. 개요 - 입력에서출력에이르기까지의프로그램내부구조를플로우그래프 (Flow Graph) 로 표현 플로우그래프 프로그램내부구조의제어흐름 (Control Flow) 을그래프로표현하여구조를파악하고시험경로 (Path) 를추출하기위해표현 플로우그래프표기법 Sequence If, else While 32
2. 순환복잡도를계산한다. 개요 - 순환복잡도 (Cyclomatic Complexity) 를통해전체프로그램내부구조를시험할수있 는독립적인경로의수를계산 순환복잡도프로그램의논리적인복잡도를정량적으로측정하기위해제공되는매트릭 (Matric) 순환복잡도공식 CC = R 의수 CC = E - N + 2 CC = P + 1 CC(Cyclomatic Complexity): 순환복잡도 R(Region): 노드와가장자리노드로둘러싸인영역과그래프밖영역의수 E(Edge): 화살표의수 N(Node): 노드의수 P(Predicate): 분기노드의수 33
3. 독립적인경로들을정의한다. 개요 - 순환복잡도를통해계산된횟수를기반으로독립적인경로들을정의 34
4. 정의된각경로의테스트케이스를작성한다. 개요 - 정의된각경로를시험할테스트케이스를작성 35
[ 예 ] 기본경로테스팅 (1/5) 요구사항 - 국어, 영어, 수학점수를입력받아, 평균점수가 70 점이상이면 PASS' 를, 미만이 면 FAIL' 을출력한다 int main(int argc, char *argv[]) { int[] testpoint = input(); while(testpoint.count() =! 3) { int inputpoint; printf(" 점수를입력해주세요 "); scnaf("%d", &inputpoint); testpoint.add() = inputpoint; } int avpoint = (testpoint[0] + testpoint[1] + testpoint[2]) / 3; 36 } if(avpoint >= 70) { printf( PASS"); } else { printf( FAIL"); } printf(" 출력이종료되었습니다 ")
[ 예 ] 기본경로테스팅 (2/5) 1. 테스팅할대상의플로우그래프를그린다. - 3 과목평균점수의 PASS 여부예제의순서도와플로우그래프 시작 1 1 2 Edge 2 R1 Node 3 4 5 Predicate Node 3 4 5 R2 Region 6 7 R2 6 7 8 8 종료 (A) 순서도 (Flow chart) (B) 플로우그래프 (Flow graph) 37
[ 예 ] 기본경로테스팅 (3/5) 2. 순환복잡도를계산한다. - 순환복잡도공식에따라, V(G) = 3 V(G) = 9-8 + 2 = 3 V(G) = 2 + 1 = 3 - 계산결과순환복잡도는 3 이므로, 최소한 3 번이상의독립적인경로를시험하면 전체내부구조를포함할수있음 38
[ 예 ] 기본경로테스팅 (4/5) 3. 독립적인경로들을정의한다. - 순환복잡도를통해계산된횟수를기반으로독립적인경로들을정의하면, 경로 1: 1-2 - 3-2 - 4-5 - 6-8 경로 2: 1-2 - 3-2 - 4-5 - 7-8 경로 3: 1-2 - 4-5 - 6-8 39
[ 예 ] 기본경로테스팅 (5/5) 4. 정의된각경로의테스트케이스를작성한다. - 정의된각경로를시험할테스트케이스를작성하면, 3 과목평균점수의 PASS 여부예제의테스트케이스 ID 테스트케이스 경로입력값예상출력값 1 경로 1 선입력 {70, 75}, 후입력 {80} PASS 2 경로 2 선입력 {60, 65}, 후입력 {50} FAIL 3 경로 3 선입력 {70, 90, 80}, 후입력 { 없음 } PASS 입력값은 ( 국어, 영어, 수학 ) 으로선, 후의입력된조건이있으며, 출력값은 PASS 여부이다. 40
화이트박스테스팅의특징 테스트의목적과조건에맞게적절한방법선택 각테스팅방법에따라복잡도, 소요되는시간 ( 비용 ) 이다름 41
42 테스팅단계
소프트웨어개발단계와테스팅 (V 모델 ) 소프트웨어개발단계마다생산되는산출물을이용하여테스팅수행 요구사항정의 인수테스팅 요구사항분석 시스템테스팅 설계 통합테스팅 구현 단위테스팅 43
테스팅단계 단위테스팅 (Unit Testing) - 개요 구현단계에서각모듈이완성되었을경우개별적인모듈을테스팅 테스팅의주체는해당모듈의개발자 화이트박스 / 블랙박스테스팅모두가능 - 테스트할모듈을단독적으로실행할수있는환경필요 스텁 (Stub) 테스팅대상모듈에서호출하는모듈 테스트드라이버 (Test Driver) 테스팅대상모듈을호출하는환경 44
테스팅단계 통합테스팅 (Integrating Testing) - 개요 모듈을통합한단계에서수행되는테스팅 모듈간의상호작용을검사하는테스팅 - 모듈통합방법에따른테스팅기법종류 빅뱅 (Big Bang) 기법 모듈을한꺼번에통합하여테스팅을하는방법 오류가발생하였을경우어느부분에서오류가났는지찾기가어려움 하향식 (Top-Down) 기법 가장상위모듈부터하위모듈로점진적으로통합하는방법 상위모듈테스팅시, 하위모듈에대한스텁이필요 상향식 (Bottom-Up) 기법 하위모듈부터테스팅하고상위모듈로점진적으로통합하는방법 하위모듈테스팅시, 상위모듈에대한테스트드라이버가필요 45
테스팅단계 시스템테스팅 (System Testing) - 개요 모듈이모두통합된후, 사용자의요구사항이만족되었는지검사하는테스팅 고객에게시스템을전달하기전, 시스템을개발한조직이주체가되는마지막테스팅 - 테스팅대상 요구사항명세서를기초로하여사용자의기능요구사항 보안, 성능, 신뢰성등의비기능요구사항 46
테스팅단계 인수테스팅 (Acceptance Testing) - 개요 시스템이사용자에게인수되기전, 사용자에의해실시되는테스팅 실제사용자가운영하는환경에서실시 인수테스팅을통과해야만시스템이정상적으로사용자에게인수되고프로젝트는종료됨 47
연습문제 1. 모듈안의작동을자세히관찰할수있으며, 프로그램원시코드의논리적 인구조를커버하도록테스트케이스를설계하는프로그램테스트방법은 무엇인가? 2. 블랙박스테스팅은무엇인가? 3. 소프트웨어의테스팅중화이트박스테스팅의과정은무엇이있는가? 4. 테스팅단계의순서를나열하라. 5. 디버깅 (Debugging) 이란무엇인가? 48