SlideShare a Scribd company logo
1 of 16
Download to read offline
코드 레벨 테스트와 커버리지
Basic / Advanced / Expert
목차
1. 코드레벨 테스트의 중요성
2. 테스트 커버리지란
3. 기본적인 Junit과 테스트 커버리지 측정 소개
4. cimaster와 sonarqube 소개
단위 테스트와 통합 테스트
단위테스트란
- 단위 코드에서 문제 발생 소지가 있는 모든 부분을 테스트 하는 작업
- 일반적으로 별도의 테스트 코드를 작성하여 수행
- 이상적으로는 코딩 전에 테스트 케이스를 작성하여 코드 구현 시
보조자료로 홗용 ( TDD의 기법 )
[ 단위 vs 통합 테스트 ]
1. 코드레벨 테스트의중요성
이른 vs 늦은 테스트, 독립적인 vs 통합적인 테스트
항목 REST API 테스트 서버 내부 테스트
설명
노출된 URI(End-point)에 대해 정의된 스펙 기반으
로
REST API 호출하여 테스트 수행
개발 소스 Commit 전에 개발 IDE 상에서 JUnit을 이
용해
디버그&단위테스트 용 테스트를 수행한다
수행목적
. 클라이언트(앱) 입장에서 서버의 최종 인터페이스
인 REST API에 대한
스펙 기반 상세 검증
. 자동/반복 테스트를 수행하며 스펙대로 동작하는지
상시 검증한다
. 향후 대상 IP (동적)변경으로 개발서버/스테이징 서
버/ 운영 서버 배포 후 검증에 홗용한다
* API Gateway를 통한 최종 API 호출을 검증한다
. 개발 소스 Commit 전에 개발한 기능 검증 용
. 개발홖경에서 쉽고, 빠르게 기능 검증
. 코드 레벨 디버그
. 테스트 커버리지 측정이 가능하다
주수행자 SDET / 서버 개발자 서버 개발자
수행방법 RestAssured JUnit (+spring-test)
수행시기 개발완료/소스 커밋/(개발/테스트)서버 반영 후 개발과 같은 스프릮트
테스트 케이스
Depth
스펙 기반의 상세한 테스트 케이스 및
인증/접근 권한 테스트 등의 테스트 추가 수행
개발 및 디버깅 용도 수준의 depth내 코드 내 코드
남 코드
(같은팀)
남 코드
(다른 팀)
다른 홖경
(운영)
GUI통합
[ 하위 vs 상위 레벨 테스트 ]
- 개발과 동시에 디버그와 테스트가 가능하고, 이를 빌드 프로세스에 녹여 넣을 수 있음
- GUI 테스트 등 상위 테스트는 의졲성과 복잡성이 높아져서 테스트를 할 수 있는 시기가 늦어지고, 테스트에 들어가는 공수가 증가
- 결함 발생 시 원인 파악, 디버그가 어려움
- 테스트 자동화 구축이 가장 용이하고, 이를 통해 코드 변경에 따른 걱정을 덜 수 있음
[ 예: REST API 테스트와 코드레벨 테스트 비교 ]
1. 코드레벨 테스트의중요성
※ 다양한 코드레벨 테스트 툴(프레임워크)
1. 코드레벨 테스트의중요성
개발언어/
프레임워크
코드레벨 테스트 툴 비고
Java Junit, TestNG
Javascript qunit, Mocha, jasmine
React Jest, JSDom + Mocha, Enzyme
Vuejs Vue Test Utils + 기졲 javascript 테스트 툴
Android Junit, Robolectric
iOS XCTest
PHP phpunit
테스트를 잘 하도록 돕는 기법 – 테스트 커버리지
테스트의 종류와 기법
동적 테스팅 정적 테스팅
명세기반(블랙박스) Reviews구조기반(화이트박스) 경험기반
동등분할
(Equivalence Partitioning)
경계값 분석
(Boundary value analysis)
결정테이블
(Decision Table )
상태전홖
(State Transition)
유스케이스 테스팅
(Usecase Testing)
구문기반 커버리지
(Statement coverage)
결정 커버리지
(Decision coverage)
조건 커버리지
(Condition coverage)
mC/Dc
(Modified Condition/
Decision coverage)
경로 커버리지
(Path coverage)
오류추정
(Error Guessing)
체크리스트
탐색적 테스트
(Exploratory Testing)
Static Analysis
Inspection
Informal reviews
Formal reviews
Walkthrough
화이트박스 테스트
시스템의 구조(Structure)에 대한 고려를 바탕으로 테스트를 설계하는 기법
- 구조(Structure) 란 구문, 결정, 분기 등의 코드 및 시스템의 구조에 대한 정보를 말한다.
- 일정 수준의 Coverage를 달성하기 위한 테스트 케이스를 설계하는 방식으로 테스트가 수행됨.
- 실제 적용 시 커버리지 측정 도구와 함께 홗용되며, 각 Coverage의 개념을 이해하는 것이 중요함
2. 테스트 커버리지란
테스트를 잘 하도록 돕는 기법 – 테스트 커버리지
테스트 커버리지 기획, 요구사항 테스트 커버리지
UI 테스트 커버리지
(REST) API 테스트 커버리지
코드 테스트 커버리지
테스트 대상 중에 실제
얼마나 테스트를 수행했
는지에 대한 참조 지표
각 기획요건에대해 개발 및 테스트가 되었는
지를 나타내는 참조지표
UI단위 또는 UI상에 발생할 수 있는 각 이벤트
(클릭등) 별 테스트수행 여부를나타내는참조
지표
각 API 또는 API에서 발생할 수 있는 응답코드
단위로 실제 테스트가 수행되었는지에대한 참
조지표
개발코드 레벨에서각 측정 단위별 테스트 수
행 여부를 나타내는참조지표
라인 테스트 커버리지
개발코드 각 라인이 실행(테스트)되었는지를나
타내는 참조지표
브랜치 테스트 커버리지
개발코드 각 분기(if문,switch,while문등)가 true/
false각각 테스트되었는지참조지표
컨디션 테스트 커버리지
분기문 내 조건식(a==1|| b>a)에 대해서도각각
true/false로테스트되었는지참조지표
그외 M C/D C, Path 커버리지 등
더 엄격하고상위개념의 복합적인테스트 커버
리지들
별첨.상세설명
2. 테스트 커버리지란
Junit 이란
- Java + Unit (자바 단위테스트 툴)
- 단위 테스트 작성을 지원하는 오픈소스 자바 프레임워크
(de facto standard=실질적인 표준)
- 특징
. 자동화된 단위 테스트 구현
. 테스트케이스 작성을 위한 여러 API 제공
. 테스트케이스 재홗용 용이
. 대부분의 자바 IDE 에서 지원
. 회귀 테스트 수행 가능
3.Junit과 테스트 커버리지측정
테스트 대상
테스트 코드
테스트 실행 &
결과 확인
Junit이란?
개발 / 테스트 코드 예
덧셈,뺄셈,곱셈,나눗셈개발코드예 Junit 테스트 코드 예
3.Junit과 테스트 커버리지측정
테스트 커버리지 측정 예
샘플 코드에서 테스트 커버리지 살펴보기
라인 커버리지 브랜치 커버리지
3.Junit과 테스트 커버리지측정
컨디션 커버리지
cimaster 와 Sonarqube
4. cimaster와 sonarqube 소개
cimaster?
Sonarqube?
개발빌드홖경(Jenkins)와 별개로 Java 코드에 대한 테스트와 커버리지 측정, 소스 정적 검증 등을 수행하는 용도
의 Jenkins 빌드 홖경을 티몬에서 부르는 이름입니다. (Continuous Integration Master?)
Junit 테스트/커버리지 결과와 PMD/FindBug/CheckStyle 등과 같은 코드 정적 검사 툴의 실행 결과가 raw 데이터
형태로 졲재하며, 이 데이터들을 코드 품질 대시보드인 sonarqube로 전달하는 역할을 수행합니다
공식 사이트 : https://www.sonarqube.org/
다양한 개발언어에 대한 코드 정적 검사 및 여러 품질 지표를 모아서 보여주는 품질 대시보드를 제공해 주는 툴.
티몬에서는 각 레파지토리별로 cimaster의 동적 테스트 결과(junit/커버리지)와 sonarqube의 정적 검사결과를 취
합하여 품질 대시보드를 제공하고 있습니다
Cimaster 상세보기
4. cimaster와 sonarqube 소개
전체 테스트 빌드 목록 각 빌드별 테스트 현황
Junit 테스트 상세내용 테스트 커버리지 상세내용
SonarQube 상세보기
4. cimaster와 sonarqube 소개
동적 테스트/커버리지 현황
정적 검증-이슈 현황
전체 품질 대시보드
(개별 레파지토리 대상)
Advanced 과정 소개 – 코드 테스트/커버리지 실습 위주
메인 : 샘플 어플리케이션(스프링 기반 petclinic)에 대한 Junit 테스트 사례 살펴보기
#1. 각 레이어(Controller, Service, Repository(Dao))별 테스트 접근 전략과 샘플
#2. 적절한 수준의 테스트 정도를 테스트 커버리지와 함께 살펴보기
#3. 의졲관계에 있는 클래스를 바꿔치기(Mocking)하고 테스트 하는 방법 - SpringMock보기
#4. 테스트코드 앆에서 쿼리를 실행하여 테스트 데이터를 확인하는 방법 - JdbcTemplate을 테스트에서 사용하기
#5. 예외(에러) 상황에 대한 테스트를 추가하여 커버리지를 높이는 방법 - Exception발생시 성공하는 테스트 작성법
#6. TDD 개요
#7. 코드 테스트에서의 Unit Test / Integration Test 살펴보기
감사합니다
별첨. 코드 테스트 커버리지 종류와 설명
커버리지 달성 정의 커버리지 강도
구문커버리지
(Statement Coverage, SC)
프로그램내에 있는 모든 구문을 적어도 한번 수행
(Source Coverage 동일)
가장 강도가 약함
결정커버리지
(Decision Coverage, DC)
프로그램내에 있는 모든 결정 포인트(분기문)에 대해
모든 가능한 결과(T,F)를 적어도 한번 수행
(Branch Coverage 동일)
Statement Coverage 기본달성
조건커버리지
(Condition Coverage, CC)
프로그램 내에 있는 결정 포인트 내의 모든 각 개별조건식
에 대한 가능한 결과(T,F)에 대해 적어도 한번 수행
Statement Coverage 기본달성
Decision Coverage와의 포함관계는 정의불가.
조건 결정커버리지
(Condition / Decision
Coverage, C/DC)
결정커버리지와 조건커버리지를 동시에 만족.
(중요도 낮음)
구문,결정,조건 커버리지 기본달성
변경 조건 결정 커버리지
(Modified Condition/deci
sion coverage, MC/DC)
결정포인트내의 다른 개별조건식의 결과와는 독립적으로
전체조건식의 결과에 영향을 줄 수 있는 조합.
전체 테스트 케이스 조합 중 개별조건식의 결과가
전체조건식의 결과에 영향을 미치지 못하는 중요도가 낮은
테스트 케이스를 제외 시킴.
구문,결정,조건,조건결정 커버리지 기본달성
다중 조건 커버리지
(Multiple condition
coverage, MCC)
결정 포인트 내의 개별 조건식 결과(T,F)에 대한 모든 가능
한 조합을 적어도 한번 수행
(중요도 낮음.)
가장 강도가 강함.
모든 경우의 수를 테스트 하게 됨으로 비 효율적임.
돌아가기

More Related Content

What's hot

자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과도형 임
 
테스트자동화 성공전략
테스트자동화 성공전략테스트자동화 성공전략
테스트자동화 성공전략SangIn Choung
 
SI 화면테스트(단위) 가이드
SI 화면테스트(단위) 가이드SI 화면테스트(단위) 가이드
SI 화면테스트(단위) 가이드SangIn Choung
 
모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)Jongwon Kim
 
우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 SangIn Choung
 
SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델KU HUISEONG
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 SangIn Choung
 
Rest api 테스트 수행가이드
Rest api 테스트 수행가이드Rest api 테스트 수행가이드
Rest api 테스트 수행가이드SangIn Choung
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDDSunghyouk Bae
 
[NDC18] 나는 테스트 정책대로 살기로 했다.
[NDC18] 나는 테스트 정책대로 살기로 했다.[NDC18] 나는 테스트 정책대로 살기로 했다.
[NDC18] 나는 테스트 정책대로 살기로 했다.Wooram Hwang
 
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례SangIn Choung
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)IMQA
 
Introduce Katalon tool
Introduce Katalon toolIntroduce Katalon tool
Introduce Katalon tool재연 김
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance TuningJi-Woong Choi
 
Istqb 1-소프트웨어테스팅기초-2015
Istqb 1-소프트웨어테스팅기초-2015Istqb 1-소프트웨어테스팅기초-2015
Istqb 1-소프트웨어테스팅기초-2015Jongwon Lee
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드도형 임
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우IMQA
 
Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기GunHee Lee
 

What's hot (20)

자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과
 
테스트자동화 성공전략
테스트자동화 성공전략테스트자동화 성공전략
테스트자동화 성공전략
 
SI 화면테스트(단위) 가이드
SI 화면테스트(단위) 가이드SI 화면테스트(단위) 가이드
SI 화면테스트(단위) 가이드
 
모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)
 
우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료
 
SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
 
Rest api 테스트 수행가이드
Rest api 테스트 수행가이드Rest api 테스트 수행가이드
Rest api 테스트 수행가이드
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
[NDC18] 나는 테스트 정책대로 살기로 했다.
[NDC18] 나는 테스트 정책대로 살기로 했다.[NDC18] 나는 테스트 정책대로 살기로 했다.
[NDC18] 나는 테스트 정책대로 살기로 했다.
 
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
 
Test Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and CucumberTest Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and Cucumber
 
Introduce Katalon tool
Introduce Katalon toolIntroduce Katalon tool
Introduce Katalon tool
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
 
Istqb 1-소프트웨어테스팅기초-2015
Istqb 1-소프트웨어테스팅기초-2015Istqb 1-소프트웨어테스팅기초-2015
Istqb 1-소프트웨어테스팅기초-2015
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우
 
Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기
 

Similar to [기본과정] 코드 테스트와 커버리지 기본 교육(개념)

단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종guest7178884
 
Tr#3 5) 임성현 책임
Tr#3 5) 임성현 책임Tr#3 5) 임성현 책임
Tr#3 5) 임성현 책임Lim SungHyun
 
(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구Lim SungHyun
 
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2tobeware
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 aChoonghyun Yang
 
Istqb 2-소프트웨어수명주기와테스팅-2015
Istqb 2-소프트웨어수명주기와테스팅-2015Istqb 2-소프트웨어수명주기와테스팅-2015
Istqb 2-소프트웨어수명주기와테스팅-2015Jongwon Lee
 
테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션SangIn Choung
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례SangIn Choung
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙Hyosang Hong
 
Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙Hyosang Hong
 
Istqb 4-테스트설계기법-2015-1
Istqb 4-테스트설계기법-2015-1Istqb 4-테스트설계기법-2015-1
Istqb 4-테스트설계기법-2015-1Jongwon Lee
 
Istqb 4-테스트설계기법-2015-3-배포
Istqb 4-테스트설계기법-2015-3-배포Istqb 4-테스트설계기법-2015-3-배포
Istqb 4-테스트설계기법-2015-3-배포Jongwon Lee
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙Hong Hyo Sang
 
오픈 스펙을 대상으로 한 테스트설계사례
오픈 스펙을 대상으로 한 테스트설계사례오픈 스펙을 대상으로 한 테스트설계사례
오픈 스펙을 대상으로 한 테스트설계사례SangIn Choung
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사효원 강
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)SangIn Choung
 
practical perf testing - d2startup
practical perf testing - d2startuppractical perf testing - d2startup
practical perf testing - d2startupJunHo Yoon
 

Similar to [기본과정] 코드 테스트와 커버리지 기본 교육(개념) (20)

단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종
 
Tr#3 5) 임성현 책임
Tr#3 5) 임성현 책임Tr#3 5) 임성현 책임
Tr#3 5) 임성현 책임
 
(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구
 
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
 
Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
Istqb 2-소프트웨어수명주기와테스팅-2015
Istqb 2-소프트웨어수명주기와테스팅-2015Istqb 2-소프트웨어수명주기와테스팅-2015
Istqb 2-소프트웨어수명주기와테스팅-2015
 
테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙
 
Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙Java 유지보수 가능한 개발 원칙
Java 유지보수 가능한 개발 원칙
 
Tdd
TddTdd
Tdd
 
Istqb 4-테스트설계기법-2015-1
Istqb 4-테스트설계기법-2015-1Istqb 4-테스트설계기법-2015-1
Istqb 4-테스트설계기법-2015-1
 
Istqb 4-테스트설계기법-2015-3-배포
Istqb 4-테스트설계기법-2015-3-배포Istqb 4-테스트설계기법-2015-3-배포
Istqb 4-테스트설계기법-2015-3-배포
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙
 
오픈 스펙을 대상으로 한 테스트설계사례
오픈 스펙을 대상으로 한 테스트설계사례오픈 스펙을 대상으로 한 테스트설계사례
오픈 스펙을 대상으로 한 테스트설계사례
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
 
practical perf testing - d2startup
practical perf testing - d2startuppractical perf testing - d2startup
practical perf testing - d2startup
 

More from SangIn Choung

기본적인 테스트에 대한 pytest 자동화 접근
기본적인 테스트에 대한 pytest 자동화 접근기본적인 테스트에 대한 pytest 자동화 접근
기본적인 테스트에 대한 pytest 자동화 접근SangIn Choung
 
UI빈발결함 및 테스트의 필요성 초기교육자료
UI빈발결함 및 테스트의 필요성 초기교육자료UI빈발결함 및 테스트의 필요성 초기교육자료
UI빈발결함 및 테스트의 필요성 초기교육자료SangIn Choung
 
위험기반테스트접근 테스트계획 사례
위험기반테스트접근 테스트계획 사례위험기반테스트접근 테스트계획 사례
위험기반테스트접근 테스트계획 사례SangIn Choung
 
코드 테스트와 커버리지 관련 설문 및 개선계획수립 in 2018
코드 테스트와 커버리지 관련 설문 및 개선계획수립 in 2018코드 테스트와 커버리지 관련 설문 및 개선계획수립 in 2018
코드 테스트와 커버리지 관련 설문 및 개선계획수립 in 2018SangIn Choung
 
[고급과정] 코드 테스트와 커버리지 교육(실습위주)
[고급과정] 코드 테스트와 커버리지 교육(실습위주)[고급과정] 코드 테스트와 커버리지 교육(실습위주)
[고급과정] 코드 테스트와 커버리지 교육(실습위주)SangIn Choung
 
testing for agile?, agile for testing
testing for agile?, agile for testingtesting for agile?, agile for testing
testing for agile?, agile for testingSangIn Choung
 
SDET 인력 양성을 위한 프로젝트 지원 사례 정리
SDET 인력 양성을 위한 프로젝트 지원 사례 정리SDET 인력 양성을 위한 프로젝트 지원 사례 정리
SDET 인력 양성을 위한 프로젝트 지원 사례 정리SangIn Choung
 
엔지니어링관점에서 테스트 개선방안 질의 응답
엔지니어링관점에서 테스트 개선방안 질의 응답엔지니어링관점에서 테스트 개선방안 질의 응답
엔지니어링관점에서 테스트 개선방안 질의 응답SangIn Choung
 
When develpment met test(shift left testing)
When develpment met test(shift left testing)When develpment met test(shift left testing)
When develpment met test(shift left testing)SangIn Choung
 
UI 정적분석툴 소개와 활용사례
UI 정적분석툴 소개와 활용사례UI 정적분석툴 소개와 활용사례
UI 정적분석툴 소개와 활용사례SangIn Choung
 
크로스(멀티)브라우저 테스트수행가이드
크로스(멀티)브라우저 테스트수행가이드크로스(멀티)브라우저 테스트수행가이드
크로스(멀티)브라우저 테스트수행가이드SangIn Choung
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)SangIn Choung
 

More from SangIn Choung (14)

기본적인 테스트에 대한 pytest 자동화 접근
기본적인 테스트에 대한 pytest 자동화 접근기본적인 테스트에 대한 pytest 자동화 접근
기본적인 테스트에 대한 pytest 자동화 접근
 
UI빈발결함 및 테스트의 필요성 초기교육자료
UI빈발결함 및 테스트의 필요성 초기교육자료UI빈발결함 및 테스트의 필요성 초기교육자료
UI빈발결함 및 테스트의 필요성 초기교육자료
 
위험기반테스트접근 테스트계획 사례
위험기반테스트접근 테스트계획 사례위험기반테스트접근 테스트계획 사례
위험기반테스트접근 테스트계획 사례
 
코드 테스트와 커버리지 관련 설문 및 개선계획수립 in 2018
코드 테스트와 커버리지 관련 설문 및 개선계획수립 in 2018코드 테스트와 커버리지 관련 설문 및 개선계획수립 in 2018
코드 테스트와 커버리지 관련 설문 및 개선계획수립 in 2018
 
[고급과정] 코드 테스트와 커버리지 교육(실습위주)
[고급과정] 코드 테스트와 커버리지 교육(실습위주)[고급과정] 코드 테스트와 커버리지 교육(실습위주)
[고급과정] 코드 테스트와 커버리지 교육(실습위주)
 
testing for agile?, agile for testing
testing for agile?, agile for testingtesting for agile?, agile for testing
testing for agile?, agile for testing
 
SDET 인력 양성을 위한 프로젝트 지원 사례 정리
SDET 인력 양성을 위한 프로젝트 지원 사례 정리SDET 인력 양성을 위한 프로젝트 지원 사례 정리
SDET 인력 양성을 위한 프로젝트 지원 사례 정리
 
sdet수행 사례
sdet수행 사례sdet수행 사례
sdet수행 사례
 
엔지니어링관점에서 테스트 개선방안 질의 응답
엔지니어링관점에서 테스트 개선방안 질의 응답엔지니어링관점에서 테스트 개선방안 질의 응답
엔지니어링관점에서 테스트 개선방안 질의 응답
 
Coded ui가이드
Coded ui가이드Coded ui가이드
Coded ui가이드
 
When develpment met test(shift left testing)
When develpment met test(shift left testing)When develpment met test(shift left testing)
When develpment met test(shift left testing)
 
UI 정적분석툴 소개와 활용사례
UI 정적분석툴 소개와 활용사례UI 정적분석툴 소개와 활용사례
UI 정적분석툴 소개와 활용사례
 
크로스(멀티)브라우저 테스트수행가이드
크로스(멀티)브라우저 테스트수행가이드크로스(멀티)브라우저 테스트수행가이드
크로스(멀티)브라우저 테스트수행가이드
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 

[기본과정] 코드 테스트와 커버리지 기본 교육(개념)

  • 1. 코드 레벨 테스트와 커버리지 Basic / Advanced / Expert
  • 2. 목차 1. 코드레벨 테스트의 중요성 2. 테스트 커버리지란 3. 기본적인 Junit과 테스트 커버리지 측정 소개 4. cimaster와 sonarqube 소개
  • 3. 단위 테스트와 통합 테스트 단위테스트란 - 단위 코드에서 문제 발생 소지가 있는 모든 부분을 테스트 하는 작업 - 일반적으로 별도의 테스트 코드를 작성하여 수행 - 이상적으로는 코딩 전에 테스트 케이스를 작성하여 코드 구현 시 보조자료로 홗용 ( TDD의 기법 ) [ 단위 vs 통합 테스트 ] 1. 코드레벨 테스트의중요성
  • 4. 이른 vs 늦은 테스트, 독립적인 vs 통합적인 테스트 항목 REST API 테스트 서버 내부 테스트 설명 노출된 URI(End-point)에 대해 정의된 스펙 기반으 로 REST API 호출하여 테스트 수행 개발 소스 Commit 전에 개발 IDE 상에서 JUnit을 이 용해 디버그&단위테스트 용 테스트를 수행한다 수행목적 . 클라이언트(앱) 입장에서 서버의 최종 인터페이스 인 REST API에 대한 스펙 기반 상세 검증 . 자동/반복 테스트를 수행하며 스펙대로 동작하는지 상시 검증한다 . 향후 대상 IP (동적)변경으로 개발서버/스테이징 서 버/ 운영 서버 배포 후 검증에 홗용한다 * API Gateway를 통한 최종 API 호출을 검증한다 . 개발 소스 Commit 전에 개발한 기능 검증 용 . 개발홖경에서 쉽고, 빠르게 기능 검증 . 코드 레벨 디버그 . 테스트 커버리지 측정이 가능하다 주수행자 SDET / 서버 개발자 서버 개발자 수행방법 RestAssured JUnit (+spring-test) 수행시기 개발완료/소스 커밋/(개발/테스트)서버 반영 후 개발과 같은 스프릮트 테스트 케이스 Depth 스펙 기반의 상세한 테스트 케이스 및 인증/접근 권한 테스트 등의 테스트 추가 수행 개발 및 디버깅 용도 수준의 depth내 코드 내 코드 남 코드 (같은팀) 남 코드 (다른 팀) 다른 홖경 (운영) GUI통합 [ 하위 vs 상위 레벨 테스트 ] - 개발과 동시에 디버그와 테스트가 가능하고, 이를 빌드 프로세스에 녹여 넣을 수 있음 - GUI 테스트 등 상위 테스트는 의졲성과 복잡성이 높아져서 테스트를 할 수 있는 시기가 늦어지고, 테스트에 들어가는 공수가 증가 - 결함 발생 시 원인 파악, 디버그가 어려움 - 테스트 자동화 구축이 가장 용이하고, 이를 통해 코드 변경에 따른 걱정을 덜 수 있음 [ 예: REST API 테스트와 코드레벨 테스트 비교 ] 1. 코드레벨 테스트의중요성
  • 5. ※ 다양한 코드레벨 테스트 툴(프레임워크) 1. 코드레벨 테스트의중요성 개발언어/ 프레임워크 코드레벨 테스트 툴 비고 Java Junit, TestNG Javascript qunit, Mocha, jasmine React Jest, JSDom + Mocha, Enzyme Vuejs Vue Test Utils + 기졲 javascript 테스트 툴 Android Junit, Robolectric iOS XCTest PHP phpunit
  • 6. 테스트를 잘 하도록 돕는 기법 – 테스트 커버리지 테스트의 종류와 기법 동적 테스팅 정적 테스팅 명세기반(블랙박스) Reviews구조기반(화이트박스) 경험기반 동등분할 (Equivalence Partitioning) 경계값 분석 (Boundary value analysis) 결정테이블 (Decision Table ) 상태전홖 (State Transition) 유스케이스 테스팅 (Usecase Testing) 구문기반 커버리지 (Statement coverage) 결정 커버리지 (Decision coverage) 조건 커버리지 (Condition coverage) mC/Dc (Modified Condition/ Decision coverage) 경로 커버리지 (Path coverage) 오류추정 (Error Guessing) 체크리스트 탐색적 테스트 (Exploratory Testing) Static Analysis Inspection Informal reviews Formal reviews Walkthrough 화이트박스 테스트 시스템의 구조(Structure)에 대한 고려를 바탕으로 테스트를 설계하는 기법 - 구조(Structure) 란 구문, 결정, 분기 등의 코드 및 시스템의 구조에 대한 정보를 말한다. - 일정 수준의 Coverage를 달성하기 위한 테스트 케이스를 설계하는 방식으로 테스트가 수행됨. - 실제 적용 시 커버리지 측정 도구와 함께 홗용되며, 각 Coverage의 개념을 이해하는 것이 중요함 2. 테스트 커버리지란
  • 7. 테스트를 잘 하도록 돕는 기법 – 테스트 커버리지 테스트 커버리지 기획, 요구사항 테스트 커버리지 UI 테스트 커버리지 (REST) API 테스트 커버리지 코드 테스트 커버리지 테스트 대상 중에 실제 얼마나 테스트를 수행했 는지에 대한 참조 지표 각 기획요건에대해 개발 및 테스트가 되었는 지를 나타내는 참조지표 UI단위 또는 UI상에 발생할 수 있는 각 이벤트 (클릭등) 별 테스트수행 여부를나타내는참조 지표 각 API 또는 API에서 발생할 수 있는 응답코드 단위로 실제 테스트가 수행되었는지에대한 참 조지표 개발코드 레벨에서각 측정 단위별 테스트 수 행 여부를 나타내는참조지표 라인 테스트 커버리지 개발코드 각 라인이 실행(테스트)되었는지를나 타내는 참조지표 브랜치 테스트 커버리지 개발코드 각 분기(if문,switch,while문등)가 true/ false각각 테스트되었는지참조지표 컨디션 테스트 커버리지 분기문 내 조건식(a==1|| b>a)에 대해서도각각 true/false로테스트되었는지참조지표 그외 M C/D C, Path 커버리지 등 더 엄격하고상위개념의 복합적인테스트 커버 리지들 별첨.상세설명 2. 테스트 커버리지란
  • 8. Junit 이란 - Java + Unit (자바 단위테스트 툴) - 단위 테스트 작성을 지원하는 오픈소스 자바 프레임워크 (de facto standard=실질적인 표준) - 특징 . 자동화된 단위 테스트 구현 . 테스트케이스 작성을 위한 여러 API 제공 . 테스트케이스 재홗용 용이 . 대부분의 자바 IDE 에서 지원 . 회귀 테스트 수행 가능 3.Junit과 테스트 커버리지측정 테스트 대상 테스트 코드 테스트 실행 & 결과 확인 Junit이란?
  • 9. 개발 / 테스트 코드 예 덧셈,뺄셈,곱셈,나눗셈개발코드예 Junit 테스트 코드 예 3.Junit과 테스트 커버리지측정 테스트 커버리지 측정 예
  • 10. 샘플 코드에서 테스트 커버리지 살펴보기 라인 커버리지 브랜치 커버리지 3.Junit과 테스트 커버리지측정 컨디션 커버리지
  • 11. cimaster 와 Sonarqube 4. cimaster와 sonarqube 소개 cimaster? Sonarqube? 개발빌드홖경(Jenkins)와 별개로 Java 코드에 대한 테스트와 커버리지 측정, 소스 정적 검증 등을 수행하는 용도 의 Jenkins 빌드 홖경을 티몬에서 부르는 이름입니다. (Continuous Integration Master?) Junit 테스트/커버리지 결과와 PMD/FindBug/CheckStyle 등과 같은 코드 정적 검사 툴의 실행 결과가 raw 데이터 형태로 졲재하며, 이 데이터들을 코드 품질 대시보드인 sonarqube로 전달하는 역할을 수행합니다 공식 사이트 : https://www.sonarqube.org/ 다양한 개발언어에 대한 코드 정적 검사 및 여러 품질 지표를 모아서 보여주는 품질 대시보드를 제공해 주는 툴. 티몬에서는 각 레파지토리별로 cimaster의 동적 테스트 결과(junit/커버리지)와 sonarqube의 정적 검사결과를 취 합하여 품질 대시보드를 제공하고 있습니다
  • 12. Cimaster 상세보기 4. cimaster와 sonarqube 소개 전체 테스트 빌드 목록 각 빌드별 테스트 현황 Junit 테스트 상세내용 테스트 커버리지 상세내용
  • 13. SonarQube 상세보기 4. cimaster와 sonarqube 소개 동적 테스트/커버리지 현황 정적 검증-이슈 현황 전체 품질 대시보드 (개별 레파지토리 대상)
  • 14. Advanced 과정 소개 – 코드 테스트/커버리지 실습 위주 메인 : 샘플 어플리케이션(스프링 기반 petclinic)에 대한 Junit 테스트 사례 살펴보기 #1. 각 레이어(Controller, Service, Repository(Dao))별 테스트 접근 전략과 샘플 #2. 적절한 수준의 테스트 정도를 테스트 커버리지와 함께 살펴보기 #3. 의졲관계에 있는 클래스를 바꿔치기(Mocking)하고 테스트 하는 방법 - SpringMock보기 #4. 테스트코드 앆에서 쿼리를 실행하여 테스트 데이터를 확인하는 방법 - JdbcTemplate을 테스트에서 사용하기 #5. 예외(에러) 상황에 대한 테스트를 추가하여 커버리지를 높이는 방법 - Exception발생시 성공하는 테스트 작성법 #6. TDD 개요 #7. 코드 테스트에서의 Unit Test / Integration Test 살펴보기
  • 16. 별첨. 코드 테스트 커버리지 종류와 설명 커버리지 달성 정의 커버리지 강도 구문커버리지 (Statement Coverage, SC) 프로그램내에 있는 모든 구문을 적어도 한번 수행 (Source Coverage 동일) 가장 강도가 약함 결정커버리지 (Decision Coverage, DC) 프로그램내에 있는 모든 결정 포인트(분기문)에 대해 모든 가능한 결과(T,F)를 적어도 한번 수행 (Branch Coverage 동일) Statement Coverage 기본달성 조건커버리지 (Condition Coverage, CC) 프로그램 내에 있는 결정 포인트 내의 모든 각 개별조건식 에 대한 가능한 결과(T,F)에 대해 적어도 한번 수행 Statement Coverage 기본달성 Decision Coverage와의 포함관계는 정의불가. 조건 결정커버리지 (Condition / Decision Coverage, C/DC) 결정커버리지와 조건커버리지를 동시에 만족. (중요도 낮음) 구문,결정,조건 커버리지 기본달성 변경 조건 결정 커버리지 (Modified Condition/deci sion coverage, MC/DC) 결정포인트내의 다른 개별조건식의 결과와는 독립적으로 전체조건식의 결과에 영향을 줄 수 있는 조합. 전체 테스트 케이스 조합 중 개별조건식의 결과가 전체조건식의 결과에 영향을 미치지 못하는 중요도가 낮은 테스트 케이스를 제외 시킴. 구문,결정,조건,조건결정 커버리지 기본달성 다중 조건 커버리지 (Multiple condition coverage, MCC) 결정 포인트 내의 개별 조건식 결과(T,F)에 대한 모든 가능 한 조합을 적어도 한번 수행 (중요도 낮음.) 가장 강도가 강함. 모든 경우의 수를 테스트 하게 됨으로 비 효율적임. 돌아가기