SlideShare a Scribd company logo
1 of 23
자동화된 test case의 효과 플랫폼 TL팀 임도형 책임
본 문서의 목적 자동화된 test case의 효과에 대한여 기술한다.
자동화된 테스트 케이스란?
테스트 케이스란? 동작 확인을 위한 특정 시나리오에 해당하는 코드를 의미한다. 예) 함수 sum()에 2와3을 입력하면 5가 반환된다. assertEqual(sum(2,3), 5); 모든 코드는 테스트 되어 진다. 단 재활용 하지 못할 뿐이다. printf()로 동작확인을 위한 코드는 대부분 주석처리 되거나 삭제된다. printf(“%i, %i”, sum(2,3), 5); 재활용 하기 위하여 정형화된 방법으로 테스트 코드를 작성하자는 것이다. 보통 특정 프레임웤을 사용한다. Junit, CppUnit같은.
자동화? 자동화 되지 않는 테스트 코드는 재활용 되기 힘들다. 테스트용 어플리케이션이 잘 재활용 될까? 컴파일 방법, 실행 방법을 일일이 명시해야 한다. 정형화 되지 않아 제각각이다. 이 코드를 SCM에 포함시켜야 하나? 테스트 케이스가 많아 지면 일일이 사람 손으로 할 수 없다. 어짜피 자동화 해야 한다. 자동화 하더라도 그 결과를 자동적으로 취합할 수 있어야 한다. 사람 손이 필요없이 실행할 수 있는 것을 의미.
효과
효과 수정 시의 생산성 향상 버그 잡기가 빨라진다. 버그 잡기가 쉬워진다. 시스템 구조가 좋아진다. 리팩토링의 조건 회귀테스트를 제공한다. 하위호환성 보증의 방법을 제공한다. 전체 시스템의 이해 없이 부분의 수정이 가능하다. 샘플로 활용된다. 코드 리뷰 시에 부담감이 준다. CI가 제대로 활용된다. 설계와 구현을 분리할 수 있다.
효과 – 수정 시의 생산성 향상 자동화된 테스트 케이스가 없다는 것은 모든 테스트를 손으로 해야 한다는 것이다. 작은 수정이라도 기존의 테스트를 전부 손으로 해야 한다. 소프트웨어는 매일마다 수정된다. 매일마다 손으로 테스트해야 한다. 이를 자동화 하면 생산성이 향상된다.
효과 – 버그 잡기가 빨라진다. 자동화 할 수 있는 테스트 케이스가 없는 경우, 보통 한번에 몰아서 테스트 한다. 한달에 한번? 만약 테스트 케이스가 있다면 언제나 테스트를 실행할 수 있다. 만약 테스트 케이스가 없다면? 방금 수정한 것에 의한 버그가 한달 뒤에 QA팀에 의해 보고 된다. 혹은 6달 뒤에 고객에게서 알려져 온다. 몇 달 전의 기억을 되살려, 혹은 문서를 뒤적여 로직을 파악해야 한다. 테스트 케이스가 있다면 수정 직후 테스트 케이스를 돌리고, 버그 여부를 그자리에서 파악한다.
효과 – 버그 잡기가 쉬워진다. 방금 만들어진 버그의 존재를 그 자리에서 확인할 수 있다. 생생한 개발 상황이 아직 머리에 올라가 있을 때 버그를 확인하고 잡아낼 수 있다. 타인이 작성한 코드에서의 버그를 파악할 때도 그 시작점을 기존 테스트 케이스로 할 수 있다.
효과 – 시스템 구조가 좋아진다. 인수 테스트나 통합 테스트가 아닌 경우는 각 단위별로 테스트 된다. 시스템 단위 컴퍼넌트 단위 클래스 단위 메소드 단위 각 단위 별로 테스트를 하려면 각 단위의 독립성이 절대적이다. 서로 얽힌 코드들은 테스트 하기도 어렵다. 테스트를 고민하다 보면 서로 엮인 부분을 풀게 되고, 시스템 구조가 좋아진다. 시스템 설계 부터 테스트를 고려해야 한다. 혼자서 테스트 할 수 없는 컴퍼넌트는 존재하지 않는다.
효과 – 리팩토링의 조건 리팩토링은 외적으로는 변경되지 않으면서 내부를 개선하는 것이다. 기능 추가가 아니다. 소프트 웨어 개발에 필수적인 항목이다. 그런데 외적으로 변경되지 않는다는 것을 어떻게 보증하지? 오직 테스트 케이스 뿐이다. 테스트 케이스가 없이는 리팩토링이 불가능하다.
효과 –회귀테스트를 제공한다. 회귀 테스트는 기존에 잘 동작하던 것을 다시 확인하는 테스트 이다. 기능 추가, 수정, 버그 픽스 등으로 인해 멀쩡하던 것이 오동작 하면 안된다. 계속 추가해온 테스트 케이스는 이러한 정상 동작의 확인해 사용된다. 즉 회귀테스트에 활용된다.
효과 – 하위호환성 보증의 방법을 제공한다. 제품이 업그레이드될 때, 기존의 환경에서도 잘 동작하는지를 확인해야 한다. 업그레이드가 진행될 수록 고려할 가지 수는 팩토리알 단위로 증가한다. 기존에 작성된 테스트 케이스는 자연스럽게 하위호환 확인에 사용될 수 있다.
효과 – 전체 시스템의 이해 없이 부분의 수정이 가능하다. 한 부분의 수정에 따른 영향도 분석은 실제로는 불가능하다. 어느 정도의 분석조차도 불가능하다. 유일한 방법은 실제 동작시켜보는 것이며, 동작 확인은 테스트 케이스에 의한다. 시스템의 전체를 이해하지 않고, 부분만을 이해한 경우라도 기존의 모든 테스트가 성공했다면 수정에 의한 영향이 없다고 판단할 수 있다.
효과 – 샘플로 활용된다. 테스트 케이스의 코드가 곧 본 코드의 사용예가 된다. 테스트 케이스 작성 시에 불편하다는 것은 본 코드의 사용이 불편하다는 것을 의미한다. 본 코드의 파악에 좋은 첫걸음은 샘플이다. 곧 테스트 케이스가 이 용도로 사용되기 좋다. 문서 작성 시에 따로 샘플 코드를 작성하지 말고 테스트 케이스의 코드를 활용한다.
효과 – 코드 리뷰 시에 부담감이 준다. 모든 코드 로직을 파악하는 것이 아닌, 작성된 테스트 케이스들만을 가지고 정상 동작 여부를 파악할 수 있다. 내부 로직을 코드로 이해하는 것보다, 외부에서 입출력 관계로 로직의 목적을 이해하는 것이 더 쉽다.
효과 – CI가 제대로 활용된다. CI? Continuous Integration, 지속적인 통합 막판에 한번의 통합이 아닌 평소에 꾸준히 통합하자는 것. 보통 tool을 사용한다. 소소가 수정되면 SCM에서 소스를 가져와 자동 컴파일 그리고 자동화된 테스트를 진행 보통 daily build라고도 한다. ‘컴파일 성공’+ ‘테스트 성공’ 상태의 유지가 목적이다. 그런데 테스트 케이스가 없으면 반쪽뿐이다. 컴파일 되는 것만을 보장한다. 이것은 지속적 통합이 아니다.
효과 – 설계와 구현을 분리할 수 있다. 테스트 케이스에서 본 코드 중에 사용하는 코드는 인터페이스 부분이다. 내부 구현은 관여하지 않는다. 인터페이스의 정의와 이 인터페이스의 동작을 확인한다. 인터페이스를 설계하고그 인터페이스를 코드로 정의만한 상태에서, 테스트 케이스 작성이 가능하다. 본 코드 개발이란, 이렇게 미리 작성된 테스트 케이스를 성공하도록 하는 작업이다.
단점
단점 개발 시에 테스트 케이스 자체에 시간이 걸린다.
테스트 케이스 코드의 양 보통은 본 코드의 양 만큰 테스트 케이스 코드가 작성된다.  적당량은 상황에 따라 다르지만 함수 하나에 케이스 하나는 최소한 아닐까?
Special Thanks! Are There Any Other Questions?

More Related Content

What's hot

개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)SangIn Choung
 
Introduce Katalon tool
Introduce Katalon toolIntroduce Katalon tool
Introduce Katalon tool재연 김
 
우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 SangIn Choung
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례SangIn Choung
 
소프트웨어 테스팅
소프트웨어 테스팅소프트웨어 테스팅
소프트웨어 테스팅영기 김
 
Rest api 테스트 수행가이드
Rest api 테스트 수행가이드Rest api 테스트 수행가이드
Rest api 테스트 수행가이드SangIn Choung
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)SangIn Choung
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Jaehoon Oh
 
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례SangIn Choung
 
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)SangIn Choung
 
모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)Jongwon Kim
 
Istqb 4-테스트설계기법-2015-1
Istqb 4-테스트설계기법-2015-1Istqb 4-테스트설계기법-2015-1
Istqb 4-테스트설계기법-2015-1Jongwon Lee
 
(애자일) 테스트 계획서 샘플
(애자일) 테스트 계획서 샘플(애자일) 테스트 계획서 샘플
(애자일) 테스트 계획서 샘플SangIn Choung
 
[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스철민 신
 
Istqb 4-테스트설계기법-2015-3-배포
Istqb 4-테스트설계기법-2015-3-배포Istqb 4-테스트설계기법-2015-3-배포
Istqb 4-테스트설계기법-2015-3-배포Jongwon Lee
 
SI 화면테스트(단위) 가이드
SI 화면테스트(단위) 가이드SI 화면테스트(단위) 가이드
SI 화면테스트(단위) 가이드SangIn Choung
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testingikhwanhayat
 
위험기반테스트접근 테스트계획 사례
위험기반테스트접근 테스트계획 사례위험기반테스트접근 테스트계획 사례
위험기반테스트접근 테스트계획 사례SangIn Choung
 
Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDDDror Helper
 
jacoco를 이용한 매뉴얼 테스트의 서버사이드 코드 커버리지 측정하기
jacoco를 이용한 매뉴얼 테스트의 서버사이드 코드 커버리지 측정하기jacoco를 이용한 매뉴얼 테스트의 서버사이드 코드 커버리지 측정하기
jacoco를 이용한 매뉴얼 테스트의 서버사이드 코드 커버리지 측정하기SangIn Choung
 

What's hot (20)

개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)
 
Introduce Katalon tool
Introduce Katalon toolIntroduce Katalon tool
Introduce Katalon tool
 
우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
 
소프트웨어 테스팅
소프트웨어 테스팅소프트웨어 테스팅
소프트웨어 테스팅
 
Rest api 테스트 수행가이드
Rest api 테스트 수행가이드Rest api 테스트 수행가이드
Rest api 테스트 수행가이드
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
 
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례
 
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
 
모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)
 
Istqb 4-테스트설계기법-2015-1
Istqb 4-테스트설계기법-2015-1Istqb 4-테스트설계기법-2015-1
Istqb 4-테스트설계기법-2015-1
 
(애자일) 테스트 계획서 샘플
(애자일) 테스트 계획서 샘플(애자일) 테스트 계획서 샘플
(애자일) 테스트 계획서 샘플
 
[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스
 
Istqb 4-테스트설계기법-2015-3-배포
Istqb 4-테스트설계기법-2015-3-배포Istqb 4-테스트설계기법-2015-3-배포
Istqb 4-테스트설계기법-2015-3-배포
 
SI 화면테스트(단위) 가이드
SI 화면테스트(단위) 가이드SI 화면테스트(단위) 가이드
SI 화면테스트(단위) 가이드
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testing
 
위험기반테스트접근 테스트계획 사례
위험기반테스트접근 테스트계획 사례위험기반테스트접근 테스트계획 사례
위험기반테스트접근 테스트계획 사례
 
Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDD
 
jacoco를 이용한 매뉴얼 테스트의 서버사이드 코드 커버리지 측정하기
jacoco를 이용한 매뉴얼 테스트의 서버사이드 코드 커버리지 측정하기jacoco를 이용한 매뉴얼 테스트의 서버사이드 코드 커버리지 측정하기
jacoco를 이용한 매뉴얼 테스트의 서버사이드 코드 커버리지 측정하기
 

Viewers also liked

TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)sung yong jung
 
목 오브젝트(Mock Object)의 이해
목 오브젝트(Mock Object)의 이해목 오브젝트(Mock Object)의 이해
목 오브젝트(Mock Object)의 이해Yong Hoon Kim
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵중선 곽
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Jemin Huh
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅Keesun Baik
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 

Viewers also liked (10)

TEST?
TEST?TEST?
TEST?
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
목 오브젝트(Mock Object)의 이해
목 오브젝트(Mock Object)의 이해목 오브젝트(Mock Object)의 이해
목 오브젝트(Mock Object)의 이해
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵
 
Maven의 이해
Maven의 이해Maven의 이해
Maven의 이해
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
Spring Boot 소개
Spring Boot 소개Spring Boot 소개
Spring Boot 소개
 

Similar to 자동화된 Test Case의 효과

행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스도형 임
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스KTH, 케이티하이텔
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙codevania
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법도형 임
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9ukjinkwoun
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드Herren
 
testing for agile?, agile for testing
testing for agile?, agile for testingtesting for agile?, agile for testing
testing for agile?, agile for testingSangIn Choung
 
Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit TestingYeon Soo Kim
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법성훈 김
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
xUnitTestPattern/chapter16
xUnitTestPattern/chapter16xUnitTestPattern/chapter16
xUnitTestPattern/chapter16suitzero
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
DebugIt/chapter1~4
DebugIt/chapter1~4DebugIt/chapter1~4
DebugIt/chapter1~4stupidfox
 
The roadtocodecraft
The roadtocodecraftThe roadtocodecraft
The roadtocodecraftbbongcsu
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)도형 임
 

Similar to 자동화된 Test Case의 효과 (20)

행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드
 
testing for agile?, agile for testing
testing for agile?, agile for testingtesting for agile?, agile for testing
testing for agile?, agile for testing
 
Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit Testing
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
xUnitTestPattern/chapter16
xUnitTestPattern/chapter16xUnitTestPattern/chapter16
xUnitTestPattern/chapter16
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
DebugIt/chapter1~4
DebugIt/chapter1~4DebugIt/chapter1~4
DebugIt/chapter1~4
 
Android unit testing
Android unit testingAndroid unit testing
Android unit testing
 
The Introduction to Refactoring
The Introduction to Refactoring The Introduction to Refactoring
The Introduction to Refactoring
 
The roadtocodecraft
The roadtocodecraftThe roadtocodecraft
The roadtocodecraft
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
X unit 14장
X unit 14장X unit 14장
X unit 14장
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
 

More from 도형 임

인공지능과 심리상담
인공지능과 심리상담인공지능과 심리상담
인공지능과 심리상담도형 임
 
Anomaly detection practive_using_deep_learning
Anomaly detection practive_using_deep_learningAnomaly detection practive_using_deep_learning
Anomaly detection practive_using_deep_learning도형 임
 
Deep learning application_to_manufacturing
Deep learning application_to_manufacturingDeep learning application_to_manufacturing
Deep learning application_to_manufacturing도형 임
 
프로그래머를 고려하는 당신에게
프로그래머를 고려하는 당신에게프로그래머를 고려하는 당신에게
프로그래머를 고려하는 당신에게도형 임
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능도형 임
 
알파고 학습 이해하기
알파고 학습 이해하기알파고 학습 이해하기
알파고 학습 이해하기도형 임
 
Ai 그까이거
Ai 그까이거Ai 그까이거
Ai 그까이거도형 임
 
테스트 케이스와 SW 품질
테스트 케이스와 SW 품질테스트 케이스와 SW 품질
테스트 케이스와 SW 품질도형 임
 
유지보수성이 sw의 품질이다.
유지보수성이 sw의 품질이다.유지보수성이 sw의 품질이다.
유지보수성이 sw의 품질이다.도형 임
 
Release and versioning
Release and versioningRelease and versioning
Release and versioning도형 임
 
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드도형 임
 
고품질 Sw와 개발문화
고품질 Sw와 개발문화고품질 Sw와 개발문화
고품질 Sw와 개발문화도형 임
 
오버라이딩을 사용한 테스트 시의 설정 처리
오버라이딩을 사용한 테스트 시의 설정 처리오버라이딩을 사용한 테스트 시의 설정 처리
오버라이딩을 사용한 테스트 시의 설정 처리도형 임
 
행복, 그리고 인지과학
행복, 그리고 인지과학행복, 그리고 인지과학
행복, 그리고 인지과학도형 임
 
유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발도형 임
 
Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드도형 임
 
흰머리 성성하게 개발하기 위해
흰머리 성성하게 개발하기 위해흰머리 성성하게 개발하기 위해
흰머리 성성하게 개발하기 위해도형 임
 
행복한 소프트웨어 개발
행복한 소프트웨어 개발행복한 소프트웨어 개발
행복한 소프트웨어 개발도형 임
 
Java 그쪽 동네는
Java 그쪽 동네는Java 그쪽 동네는
Java 그쪽 동네는도형 임
 
스토리포인트로 공수산정하기 운선순위정하기
스토리포인트로 공수산정하기 운선순위정하기스토리포인트로 공수산정하기 운선순위정하기
스토리포인트로 공수산정하기 운선순위정하기도형 임
 

More from 도형 임 (20)

인공지능과 심리상담
인공지능과 심리상담인공지능과 심리상담
인공지능과 심리상담
 
Anomaly detection practive_using_deep_learning
Anomaly detection practive_using_deep_learningAnomaly detection practive_using_deep_learning
Anomaly detection practive_using_deep_learning
 
Deep learning application_to_manufacturing
Deep learning application_to_manufacturingDeep learning application_to_manufacturing
Deep learning application_to_manufacturing
 
프로그래머를 고려하는 당신에게
프로그래머를 고려하는 당신에게프로그래머를 고려하는 당신에게
프로그래머를 고려하는 당신에게
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능
 
알파고 학습 이해하기
알파고 학습 이해하기알파고 학습 이해하기
알파고 학습 이해하기
 
Ai 그까이거
Ai 그까이거Ai 그까이거
Ai 그까이거
 
테스트 케이스와 SW 품질
테스트 케이스와 SW 품질테스트 케이스와 SW 품질
테스트 케이스와 SW 품질
 
유지보수성이 sw의 품질이다.
유지보수성이 sw의 품질이다.유지보수성이 sw의 품질이다.
유지보수성이 sw의 품질이다.
 
Release and versioning
Release and versioningRelease and versioning
Release and versioning
 
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
 
고품질 Sw와 개발문화
고품질 Sw와 개발문화고품질 Sw와 개발문화
고품질 Sw와 개발문화
 
오버라이딩을 사용한 테스트 시의 설정 처리
오버라이딩을 사용한 테스트 시의 설정 처리오버라이딩을 사용한 테스트 시의 설정 처리
오버라이딩을 사용한 테스트 시의 설정 처리
 
행복, 그리고 인지과학
행복, 그리고 인지과학행복, 그리고 인지과학
행복, 그리고 인지과학
 
유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발
 
Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드
 
흰머리 성성하게 개발하기 위해
흰머리 성성하게 개발하기 위해흰머리 성성하게 개발하기 위해
흰머리 성성하게 개발하기 위해
 
행복한 소프트웨어 개발
행복한 소프트웨어 개발행복한 소프트웨어 개발
행복한 소프트웨어 개발
 
Java 그쪽 동네는
Java 그쪽 동네는Java 그쪽 동네는
Java 그쪽 동네는
 
스토리포인트로 공수산정하기 운선순위정하기
스토리포인트로 공수산정하기 운선순위정하기스토리포인트로 공수산정하기 운선순위정하기
스토리포인트로 공수산정하기 운선순위정하기
 

Recently uploaded

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 

Recently uploaded (6)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 

자동화된 Test Case의 효과

  • 1. 자동화된 test case의 효과 플랫폼 TL팀 임도형 책임
  • 2. 본 문서의 목적 자동화된 test case의 효과에 대한여 기술한다.
  • 4. 테스트 케이스란? 동작 확인을 위한 특정 시나리오에 해당하는 코드를 의미한다. 예) 함수 sum()에 2와3을 입력하면 5가 반환된다. assertEqual(sum(2,3), 5); 모든 코드는 테스트 되어 진다. 단 재활용 하지 못할 뿐이다. printf()로 동작확인을 위한 코드는 대부분 주석처리 되거나 삭제된다. printf(“%i, %i”, sum(2,3), 5); 재활용 하기 위하여 정형화된 방법으로 테스트 코드를 작성하자는 것이다. 보통 특정 프레임웤을 사용한다. Junit, CppUnit같은.
  • 5. 자동화? 자동화 되지 않는 테스트 코드는 재활용 되기 힘들다. 테스트용 어플리케이션이 잘 재활용 될까? 컴파일 방법, 실행 방법을 일일이 명시해야 한다. 정형화 되지 않아 제각각이다. 이 코드를 SCM에 포함시켜야 하나? 테스트 케이스가 많아 지면 일일이 사람 손으로 할 수 없다. 어짜피 자동화 해야 한다. 자동화 하더라도 그 결과를 자동적으로 취합할 수 있어야 한다. 사람 손이 필요없이 실행할 수 있는 것을 의미.
  • 7. 효과 수정 시의 생산성 향상 버그 잡기가 빨라진다. 버그 잡기가 쉬워진다. 시스템 구조가 좋아진다. 리팩토링의 조건 회귀테스트를 제공한다. 하위호환성 보증의 방법을 제공한다. 전체 시스템의 이해 없이 부분의 수정이 가능하다. 샘플로 활용된다. 코드 리뷰 시에 부담감이 준다. CI가 제대로 활용된다. 설계와 구현을 분리할 수 있다.
  • 8. 효과 – 수정 시의 생산성 향상 자동화된 테스트 케이스가 없다는 것은 모든 테스트를 손으로 해야 한다는 것이다. 작은 수정이라도 기존의 테스트를 전부 손으로 해야 한다. 소프트웨어는 매일마다 수정된다. 매일마다 손으로 테스트해야 한다. 이를 자동화 하면 생산성이 향상된다.
  • 9. 효과 – 버그 잡기가 빨라진다. 자동화 할 수 있는 테스트 케이스가 없는 경우, 보통 한번에 몰아서 테스트 한다. 한달에 한번? 만약 테스트 케이스가 있다면 언제나 테스트를 실행할 수 있다. 만약 테스트 케이스가 없다면? 방금 수정한 것에 의한 버그가 한달 뒤에 QA팀에 의해 보고 된다. 혹은 6달 뒤에 고객에게서 알려져 온다. 몇 달 전의 기억을 되살려, 혹은 문서를 뒤적여 로직을 파악해야 한다. 테스트 케이스가 있다면 수정 직후 테스트 케이스를 돌리고, 버그 여부를 그자리에서 파악한다.
  • 10. 효과 – 버그 잡기가 쉬워진다. 방금 만들어진 버그의 존재를 그 자리에서 확인할 수 있다. 생생한 개발 상황이 아직 머리에 올라가 있을 때 버그를 확인하고 잡아낼 수 있다. 타인이 작성한 코드에서의 버그를 파악할 때도 그 시작점을 기존 테스트 케이스로 할 수 있다.
  • 11. 효과 – 시스템 구조가 좋아진다. 인수 테스트나 통합 테스트가 아닌 경우는 각 단위별로 테스트 된다. 시스템 단위 컴퍼넌트 단위 클래스 단위 메소드 단위 각 단위 별로 테스트를 하려면 각 단위의 독립성이 절대적이다. 서로 얽힌 코드들은 테스트 하기도 어렵다. 테스트를 고민하다 보면 서로 엮인 부분을 풀게 되고, 시스템 구조가 좋아진다. 시스템 설계 부터 테스트를 고려해야 한다. 혼자서 테스트 할 수 없는 컴퍼넌트는 존재하지 않는다.
  • 12. 효과 – 리팩토링의 조건 리팩토링은 외적으로는 변경되지 않으면서 내부를 개선하는 것이다. 기능 추가가 아니다. 소프트 웨어 개발에 필수적인 항목이다. 그런데 외적으로 변경되지 않는다는 것을 어떻게 보증하지? 오직 테스트 케이스 뿐이다. 테스트 케이스가 없이는 리팩토링이 불가능하다.
  • 13. 효과 –회귀테스트를 제공한다. 회귀 테스트는 기존에 잘 동작하던 것을 다시 확인하는 테스트 이다. 기능 추가, 수정, 버그 픽스 등으로 인해 멀쩡하던 것이 오동작 하면 안된다. 계속 추가해온 테스트 케이스는 이러한 정상 동작의 확인해 사용된다. 즉 회귀테스트에 활용된다.
  • 14. 효과 – 하위호환성 보증의 방법을 제공한다. 제품이 업그레이드될 때, 기존의 환경에서도 잘 동작하는지를 확인해야 한다. 업그레이드가 진행될 수록 고려할 가지 수는 팩토리알 단위로 증가한다. 기존에 작성된 테스트 케이스는 자연스럽게 하위호환 확인에 사용될 수 있다.
  • 15. 효과 – 전체 시스템의 이해 없이 부분의 수정이 가능하다. 한 부분의 수정에 따른 영향도 분석은 실제로는 불가능하다. 어느 정도의 분석조차도 불가능하다. 유일한 방법은 실제 동작시켜보는 것이며, 동작 확인은 테스트 케이스에 의한다. 시스템의 전체를 이해하지 않고, 부분만을 이해한 경우라도 기존의 모든 테스트가 성공했다면 수정에 의한 영향이 없다고 판단할 수 있다.
  • 16. 효과 – 샘플로 활용된다. 테스트 케이스의 코드가 곧 본 코드의 사용예가 된다. 테스트 케이스 작성 시에 불편하다는 것은 본 코드의 사용이 불편하다는 것을 의미한다. 본 코드의 파악에 좋은 첫걸음은 샘플이다. 곧 테스트 케이스가 이 용도로 사용되기 좋다. 문서 작성 시에 따로 샘플 코드를 작성하지 말고 테스트 케이스의 코드를 활용한다.
  • 17. 효과 – 코드 리뷰 시에 부담감이 준다. 모든 코드 로직을 파악하는 것이 아닌, 작성된 테스트 케이스들만을 가지고 정상 동작 여부를 파악할 수 있다. 내부 로직을 코드로 이해하는 것보다, 외부에서 입출력 관계로 로직의 목적을 이해하는 것이 더 쉽다.
  • 18. 효과 – CI가 제대로 활용된다. CI? Continuous Integration, 지속적인 통합 막판에 한번의 통합이 아닌 평소에 꾸준히 통합하자는 것. 보통 tool을 사용한다. 소소가 수정되면 SCM에서 소스를 가져와 자동 컴파일 그리고 자동화된 테스트를 진행 보통 daily build라고도 한다. ‘컴파일 성공’+ ‘테스트 성공’ 상태의 유지가 목적이다. 그런데 테스트 케이스가 없으면 반쪽뿐이다. 컴파일 되는 것만을 보장한다. 이것은 지속적 통합이 아니다.
  • 19. 효과 – 설계와 구현을 분리할 수 있다. 테스트 케이스에서 본 코드 중에 사용하는 코드는 인터페이스 부분이다. 내부 구현은 관여하지 않는다. 인터페이스의 정의와 이 인터페이스의 동작을 확인한다. 인터페이스를 설계하고그 인터페이스를 코드로 정의만한 상태에서, 테스트 케이스 작성이 가능하다. 본 코드 개발이란, 이렇게 미리 작성된 테스트 케이스를 성공하도록 하는 작업이다.
  • 21. 단점 개발 시에 테스트 케이스 자체에 시간이 걸린다.
  • 22. 테스트 케이스 코드의 양 보통은 본 코드의 양 만큰 테스트 케이스 코드가 작성된다. 적당량은 상황에 따라 다르지만 함수 하나에 케이스 하나는 최소한 아닐까?
  • 23. Special Thanks! Are There Any Other Questions?