소프트웨어공학 () 2005 년가을학기 문양세컴퓨터과학과강원대학교자연과학대학 In this chapter 실제로현장 (real world) 에서테스트에드는노력은총비용의 50% 이상, 총개발기간의 50% 정도에해당한다. 테스트의목적은소프트웨어의기능을시험하는것이아니라, 소프트웨어의오류를찾아내어그품질 (quality) 을향상시키는데있다. We will cover 테스트개요및테스트원리 화이트박스테스트 (white box test) 블랙박스테스트 (black box test) 자료구조중심테스트 (data structure oriented test) 통합테스트 (integration test) 인수테스트 (acceptance test) 테스트자동화도구 Page 2 1
We are now 테스트개요및테스트원리화이트박스테스트 (white box test) 블랙박스테스트 (black box test) 자료구조중심테스트 (data structure oriented test) 통합테스트 (integration test) 인수테스트 (acceptance test) 테스트자동화도구 Page 3 테스트개요 테스트? 테스트에필요한시간과노력 매우크다. 그러나, 테스트는대부분초보자나개인의역량에맡기는경우가많다. Low level 작업이라는인식이넓게퍼져있다. 정의 시스템이정해진요구를만족하는지, 예상과실제결과가어떤차이를보이는지수동또는자동방법을동원하여검사하고평가하는일련의과정 [IEEE, 1993] 숨어있는결함을찾기위해소프트웨어를작동시키는일련의행위와절차 결함이없음을증명하는것이아니고, 결함이존재함을보여주는작업 테스트 분석, 설계도중에일어나는검증, 검토등품질보증을위한모든행위 Page 4 2
테스트와개발단계 (V 모형 ) 테스트단계와소프트웨어개발단계의관계 개발단계 범위와목표 테스트단계 인수테스트 요구분석 구조설계 시스템테스트 통합테스트 리그레션테스트 프로그램설계 단위테스트 코딩 Page 5 소프트웨어심리 프로그래머의심리 자신의프로그램이옳다고생각, 그러나프로그램은테스트에의하여확인됨 프로그램안의오류를인신공격, 또는개인평가로해석하여테스트를기피 심리적불안 테스트는파괴적인과정 (destructive process) 으로생각 이를극복하기위하여테스트하기전에예상결과를준비 independent test, test automation 모든소프트웨어는테스트를통해서강해집니다. 절대로비판을두려워하지마세요. 급할수록돌아가라는속담은진실입니다. 철저히검사하세요. Page 6 3
테스트이슈 소프트웨어신뢰도요구의증가 오류의방지 개발단계에서의오류유입방지 테스트케이스설계기술 모듈화설계가테스트에드는노력을줄임 개발전단계에서의많은검증노력이요구됨 대부분의오류는설계단계에서의정보관리부재에기인 설계오류가제일많음 오류수정에드는비용은절대무시할수없음 테스트는전개발단계에서이루어져야함 소프트웨어테스트에대한이론적기초 소프트웨어오류의성질을이해 Page 7 테스트유형 (1/2) Validation( 확인 ): Are we building the right product? 만든제품이바른제품이야? ( 기능적측면 ) Verification( 검증 ): Are we building the product right? 만든제품이바르게동작하는거야? ( 품질측면 ) 인증 (Certification): A written guarantee 정적분석 (Static Analysis): 코드 / 문서를보면서 동적분석 (Dynamic Analysis): 프로그램을돌려가면서 단계별 단위테스트 (unit test) 통합테스트 (integration test) 인수테스트 (acceptance test) Page 8 4
테스트유형 (2/2) 시험방법 화이트박스테스트 블랙박스테스트 기능시험성능시험스트레스시험 ( 고온에서시험 ) Benchmark 시험 Field 시험 Regression test 품질보증 (Quality assurance) Page 9 테스트단계 1) 테스트에의하여무엇을점검할것인지정한다. 예 ) 테스트의목표 - 기능의완벽성, 신뢰도 2) 테스트방법을결정한다. 예 ) 검사, 증명, 블랙박스테스트, 화이트박스테스트, 자동화도구 3) 테스트케이스를개발한다. 예 ) 테스트자료, 시행조건, 시험계획서 4) 테스트의예상되는올바른결과를작성한다. 테스트오라클 (test oracle) 모든테스트에대한예상결과모음 5) 테스트케이스로실행시킨다. 테스트하니스 (test harness, 테스트를위해일부기능을변경하는작업 ) 가필요 Page 10 5
테스트에대한올바른이해 테스트는오류를발견하려고프로그램을수행시키는것 절대소극적으로수행하지않아야한다. 잘못하면, 나중에는더큰악재로다가온다. 테스트에의하여오류가발견되지않았다고하여프로그램에오류가있는것은아님 완벽한테스트는불가능하다. 일반적으로전체검수가아닌부분검수에해당 테스트는창조적인일이며힘든일이다. 효율적인테스트를위해서는소프트웨어를잘이해하여야하며, 창조력을지닌전문가에의해서행해져야한다. 테스트는오류의유입을방지할수있다. 개발과정에많은테스트를할수록궁극적으로오류를줄일수있다. 테스트는구현에관계없는독립된팀에의하여수행되어야한다. 자기가자기것을테스트하는것은고양이에게생선을맡긴꼴이다. Page 11 오류 ( 발생 ) 패턴 테스트는시스템의오류패턴과매우밀접한관련 처음에는적당히분산되어고르게오류가발견되는듯하다가, 테스트를하면할수록오류가많은부분에서더많은오류가발생한다. 모듈에오류가너무많다면오류없는모듈이될수있도록테스트하여고치는것은한계가있다. 오류가많다면 다시짜는것이상책이다. 이런일은비일비재한데, 얼마나큰비애를느낄까요? Page 12 6
We are now 테스트개요및테스트원리화이트박스테스트 (white box test) 블랙박스테스트 (black box test) 자료구조중심테스트 (data structure oriented test) 통합테스트 (integration test) 인수테스트 (acceptance test) 테스트자동화도구 Page 13 화이트박스테스트 (1/2) 모듈안의작동을자세히관찰하는시험 각각의라인이제대로수행되는지를철저하게시험 ( 길이가짧은 ) 특수프로그램에대해서나적용가능한방법 검증기준 (test coverage) Statement coverage: 원시코드의모든문장을한번이상수행 Decision coverage: 선택구조조건의모든경우가적어도한번씩테스트 Loop coverage: 루프구조를완벽히테스트 1 반복조건을만족하지못하여루프를수행시키지못한경우 2 루프안의내용을한번만수행 3한번이상수행 Page 14 7
화이트박스테스트순서 (2/2) 화이트박스테스트순서 1) 논리흐름도에의한표현 2) 테스트케이스생성 논리흐름도 : 모듈내의제어흐름을간선으로표시한그래프 세그먼트 (begin-end) 정점 (node) 제어흐름 간선 (edge) 세그먼트의발견 NS- 도표 ( 나씨 - 슈나이더 ) 활용 Page 15 논리흐름도표현의예 (1/2) 점수의평균을구하는프로그램 pp. 275-276 NS- 도표작성 p. 276 논리흐름도 Page 16 8
논리흐름도표현의예 (2/2) 테스트케이스작성 : 검증기준에따라논리흐름도의경로를적어도한번씩방문하도록테스트케이스를추출 예제테스트케이스 score=89.0 <eof> score=53.41, -77.0 경로 a, b, d, h, c, i a, c a, b, d, h, b, e, h, c, j 화이트박스실행 : 모든경우에대한테스트실행표를만들고, 실험을수행하면서정상적으로동작하는지검사 p. 281 의그림 6.7 참조 화이트박스테스트는이론적으로는가능한이야기이나, 실제소프트웨어에적용하는데한계가있음 Page 17 We are now 테스트개요및테스트원리화이트박스테스트 (white box test) 블랙박스테스트 (black box test) 자료구조중심테스트 (data structure oriented test) 통합테스트 (integration test) 인수테스트 (acceptance test) 테스트자동화도구 Page 18 9
블랙박스테스트 모듈이요구에맞게잘작동하는가에초점을맞춘다. 모듈의기능시험에해당한다. 모듈의외형 ( 입력, 출력 ) 모듈의기능위주의검사 현실적으로사용가능한테스트방법이다. 특히, 제 3 자가테스트를수행할경우, 블랙박스테스트가적합하다. Page 19 동치분해 (Equivalence Partitioning) (1/2) 입력조건을여러개의동치클래스로나눔 방법 1) 입력이일정한범위안의값을가져야한다면최소한세개의동치클래스가존재한다. 범위보다작은값 범위내의값 범위보다큰값 예 ) 현금자동지급기지급범위가 10,000 원 ~ 30 만원이라면 범위보다작은값 1,000원보다작은비정상값 범위내의값 10,000원 ~ 30만원정상값 범위보다큰값 30만원보다큰비정상값 Page 20 10
동치분해 (Equivalence Partitioning) (2/2) 방법 2) 이산적집합 (T/F) 에속하는값이어야정상입력이라면, 두가지동치클래스가존재한다. 정상입력에속하는값 그이외의값 예 ) 학적관리시스템에서의재학상태 재학상태의정상적인값. 즉, 재학, 휴학, 졸업, 중퇴 그외의비정상적인값 Page 21 식료품이름및무게예제 (1/2) 입력조건 ( 품명, 무게 1, 무게 2, ) 품명은 2 ~ 15 자리의영문자 무게는 1 ~ 48 범위의숫자 ( 정수 ) 무게는오름차순으로정렬 품명이먼저입력되고, 쉼표가나오고, 무게값의리스트가나옴 품명의이름은영문자이어야한다. 1. 영문자가이름 ( 정상 ): AbcDef 2. 영문자가아닌이름 ( 비정상 ): A2X?/ 품명은 2 ~ 15 의영문자이어야한다. 3. 길이가 2 미만의문자열 ( 비정상 ): A 4. 2 이상 15 이하의문자열 ( 정상 ): AbcDef 5. 길이가 15보다큰문자열 ( 비정상 ): abcdefghij Page 22 11
식료품이름및무게예제 (2/2) 무게는 1 ~ 48 사이의정수 6. 1보다작은값 ( 비정상 ): -1 7. 1 ~ 48 사이의값 ( 정상 ): 24 8. 48보다큰값 ( 비정상 ): 127 9. 정수 ( 정상 ): 24 10. 실수 ( 비정상 ): 5.3 11. 숫자 ( 정상 ): 24 12. 숫자아님 ( 비정상 ): 3A 무게는오름차순이어야함 13. 오름차순의무게 ( 정상 ): 1, 2, 3 14. 오름차순이아닌무게 ( 비정상 ): 2, 1, 3... 나머지는교재참조 Page 23 경계테스트 (Boundary Test) 많은오류가자료값범위의경계에서발생한다는경험에따라, 경계값에대해서테스트를수행한다. 예 : 무게가 1 ~ 48 이면, 1 과 48, 그리고 0 과 49 를시험한다. Page 24 12
We are now 테스트개요및테스트원리화이트박스테스트 (white box test) 블랙박스테스트 (black box test) 자료구조중심테스트 (data structure oriented test) 통합테스트 (integration test) 인수테스트 (acceptance test) 테스트자동화도구 Page 25 자료구조중심테스트 자료구조, 특히배열 (array) 및구조 (structure) 와관련된오류를검출하기위한테스트 예 ) 연결된리스트 (linked list) 나배열 1. 배열이나리스트의요소가하나도없음 2. 하나의요소만가짐 3. 배열이나리스트가가질수있는최대크기보다하나작은요소를가짐 4. 배열이나리스트가가질수있는최대크기의요소를가짐 유사한방법으로구조체 (structure) 타입도테스트 Page 26 13
We are now 테스트개요및테스트원리화이트박스테스트 (white box test) 블랙박스테스트 (black box test) 자료구조중심테스트 (data structure oriented test) 통합테스트 (integration test) 인수테스트 (acceptance test) 테스트자동화도구 Page 27 통합테스트 (Integration Test) 통합테스트의목적 시스템을구성하는모듈의인터페이스와결합을테스트 시스템전체의기능과성능을테스트 Driver 통합순서에따라 동시식 (big-bang) 단번에해치워 하향식 (top-down) 위에서부터아래로 상향식 (bottom-up) 아래서부터위로 연쇄식 (threads) 중요한것을중심으로동시에 테스트대상 Harness Stub 통합시필요한소프트웨어 테스트하니스 (harness): 부분적인테스트를위하여코드에삽입하는프로그램 추후삭제됨 스텁 (stub): 시험대상모듈이호출하는모듈대신에만들어진모의서브루틴 드라이버 (driver): 시험대상모듈을호출하는모의모듈 Page 28 14
동시식통합 (Big Bang) 모든모듈을한꺼번에통합하여테스트 단위테스트에많은시간이필요 시스템의중요부분과부수적인부분을구별하지않음 일정계획에융통성이없음 오류가있을경우어떤모듈이변경되어야하는지파악하기어려움 Page 29 하향식통합 (Top-down) 시스템구조도의위에있는모듈부터아래층의모듈로내려오면서통합 점증적통합이므로하드웨어의사용이분산되고오류의원인을찾아내기쉬움 상위층의중요한모듈을먼저시험 시스템의골격을조기에테스트함 스텁의사용으로시스템의모양을사용자에게조기에보여줄수있음 프로그래머가시스템의작동에대한확신을유지시킬수있음 Page 30 15
상향식통합 (Bottom-up) 시스템구조도의위에있는모듈부터아래층의모듈로내려오면서통합 최하위모듈을먼저시험 드라이버가필요 ( 특성상, 스텁은거의필요치않음 ) 오류발견이쉽고하드웨어의사용을분산 하위층의모듈을상위층보다더많이시험 테스트의초기에뼈대가갖추어지지않음 Page 31 연쇄식통합 (Threads) 최선의통합방법 어느정도의기본기능을수행하는모듈 (thread) 로부터통합 시스템의중요한기능을담당하는모듈부터통합 초기에시스템을골격을보여주고사용자의의견을받아수정가능 주요테스트작업을동시에진행할수도있음 (independent 한경우 ) Page 32 16
사례 : 색인제작시스템통합 Page 33 기타통합테스트 구조테스트 각모듈의입력, 출력매개변수 유틸리티호출을포함한모든모듈의호출 기능테스트 시스템전체를하나의블랙박스로보고시험 정상적인입력에대하여시험 입력과출력예상결과를비교 성능테스트 : 트래픽처리, 가입자용량, 스트레스테스트 : 고온 / 저온테스트, 고압 / 저압테스트, Page 34 17
통합작업일정 Page 35 테스트항목예제 Page 36 18
시험절차서예제 Page 37 We are now 테스트개요및테스트원리화이트박스테스트 (white box test) 블랙박스테스트 (black box test) 자료구조중심테스트 (data structure oriented test) 통합테스트 (integration test) 인수테스트 (acceptance test) 테스트자동화도구 Page 38 19
인수테스트 목적 시스템이사용할수있도록모든준비가되어있는지를보이는것 사용할모든준비가되었다는것을확인시켜주는작업 테스트방법은사용자가선택 인수테스트방법의대부분은통합테스트와같음. 다른점은사용자환경에서한다는것 알파테스트 : 사내고객들을대상으로시험 베타테스트 고객의사용환경에서시험 개발자없이, 실제사용환경에소프트웨어를설치하여시험 Page 39 알파테스트관련기사 Page 40 20
베타 테스트 관련 기사 Page 41 We are now 테스트 개요 및 테스트 원리 화이트 박스 테스트 (white box test) 블랙 박스 테스트 (black box test) 자료 구조 중심 테스트 (data structure oriented test) 통합 테스트 (integration test) 인수 테스트 (acceptance test) 테스트 자동화 도구 Page 42 21
코드분석도구 정적분석도구 : 프로그램을실행하지않고분석 코드분석도구 : 원시코드의문법적적합성을자동으로평가하여잘못된문장을표기 구조검사도구 : 원시코드의그래프를생성하여논리흐름을보여주고구조적인결함이있는지체크 데이터분석도구 : 원시코드에정의된데이터구조, 데이터선언, 컴포넌트인터페이스를검사, 잘못된링크나데이터정의의충돌, 잘못된데이터의사용등을발견 순서검사도구 : 이벤트의순서체크. 잘못된순서로코딩되어있다면이벤트를지적 동적분석도구 : 프로그램을실행하면서분석 프로그램이수행되는동안이벤트의상태를파악하기위하여특정한변수나조건의스냅샷 (snapshot) 을생성 Page 43 테스트케이스생성도구 자료흐름도 원시프로그램을입력받아파싱한후자료흐름도를작성 define-use 테스트 ( 정의는되었느나사용되지않은변수가없는지검사 ) 기능테스트 주어진기능을구동시키는모든가능한상태를파악하여이에대한입력을작성 입력도메인분석 원시코드의내부를참조하지않고, 입력변수의도메인을분석하여테스트데이터작성 랜덤테스트 입력값을무작위로추출 시스템의신뢰성분석에사용 Page 44 22
테스트실행도구 캡쳐및리플레이 테스트계획에표시된테스트데이터를자동으로입력하고실행과정에발생하는화면이나인쇄되는결과를캡쳐 예상되는결과와비교 예상되는결과와차이를보일경우테스트프로그래머에게보고 오류를발견하고수정한후고치는작업이바르게되었는지확인하는데유용 자동적으로스텁과드라이버를생성하는도구 자동테스트환경 테스트수행도구들이테스트환경으로통합되어제공 Page 45 23