Test-Driven Development

Slides:



Advertisements
Similar presentations
한국의 전통 문화 2 조 국제 수행 보고서 조장 : 신양우 조원 : 김 솔, 류원빈, 송선우, 임준희 2 조 국제 수행 보고서 조장 : 신양우 조원 : 김 솔, 류원빈, 송선우, 임준희.
Advertisements

신도초 김민희.  어렸을 때 많이 불었던 비눗방울을 다시 불 어보자 너무 빨리 사라지는 게 아쉬워서, 무 슨 방법이 있으면 오랫동안 비눗방울이 남 아있을 수도 있을 것 같다는 생각이 좋아서 연구를 시작하였다.
간질 ( 뇌전증 ) 장 애 김성혜 이현지 윤승희 이윤선.
보건소영양사 실습 강북구보건소 건강증진과 보충 영양실 & 판교보건지소 건강증진센터 2011 년 여름방학.
2012학년도 교내과학탐구대회 4월 16일(월요일, 5~6교시). 5 교시 활 동 실험.조립활동 - 별자리열쇠고리만들기 (5교시) 각 학급에 과학동아리학생들이 2인 1조로 들어가서 실험키트조립활동을 안내함 임장 지도교사가 컴퓨터로 탐구대회 PPT안을 띄워주고 동아리원들이.
김수민, 박태일, 이찬솔, 하광철, 하주미. 서 론 - 목 적 : 보수동 책방골목의 관광지로서의 기능 조사 ( 제목과 ???) 본 론 - 공간지각 : 보수동 책방골목 - 참여관찰 ( 주제에 맞는 소제목 !!) 보수동 상인들 설문조사 공식 / 비공식 인터뷰 보수동 손님들.
사과가 어느 상태일 때 갈변 현상이 늦게 나타날까?
지은아 알바하자! With. 알바천국 .
발표:김경아,방수정 자료:최경자 PPT:주한솔
신장,심장,간 장애 정영화 윤병란 이달해 최지희.
포사체 실험 1조 김민수 전수진 이예연 오혜윤 최지수.
4월 임신*출산부 영양관리.
03. 인쇄광고 알아보기.
경찰.
But, 성공하려면 과정이 필요합니다. 목표달성을 위해 정해진 기간이 필요~! 어떤 노력을 기울여야 할가요~?
2016년도 625바로 알리기 교육 평가 보고 대한민국6∙25참전유공자회
11ㅡㅡ 공모 1. 대단위 미술마을 조성 (행복프로젝트) 작성 방법 및 제출 서류 2016마을미술프로젝트
프로젝트 1 프로젝트 공지: 1-1학기부터 4-1학기까지 프로젝트 수업 3개 이상 수강해야 졸업작품 제출할 수 있음
102 베기 학번: 이름: 박지훈.
TDD Junit TDD & Spring Framework 참고자료
반 학생들의 컴퓨터 사용시간 ppt제작담당 : 최민수 박지호.
문제 해결하기 수학 3학년 1학기 덧셈과 뺄셈 (8/9) 수업계획 수업활동 -학습진행내용-
경기도 화성시 봉담 동화 역말길 33번지(동화 휴먼시아 5단지 앞)
경기도 화성시 봉담 동화 역말길 33번지(동화 휴먼시아 5단지 앞)
노인 자원봉사 학 과 명 : 사회복지과 교 과 명 : 자원봉사론 담당 교수 : 한경리교수님
인사의 중요성 알기 바른 생활 1학년 1학기 5.안녕하세요 1) 인사의 중요성 알기(1/4) [본차시의 주요내용]
단원의 길잡이 국어 중학교 1학년/1학기 1. 문학의 즐거움〉단원의 길잡이(1/9) [화면 소개] 초기화면 : 학습 주제 제시
PPT No.1 원호문과 문천상 POWERPOINT 중어중국학 최소영.
타이머를 시작하려면 슬라이드 쇼 메뉴에서 쇼 보기를 클릭하십시오.
업무 메뉴얼 1. 사무용품/소모품 청구의뢰서 작성요령 2. 법인 등기부등본/법인 인감증명 발급 요청서 작성요령
과학적 관리론 과 목 명 : 유아교육기관운영관리 교 수 명 : 홍성훈 교수님 학 과 : 유아교육과 학 번 :
심리사회이론. ppt_ 곽호연 자료조사 임진섭 김유한
나의 과거, 현재 그리고 미래 경제학과 권오성.
제 5생활실 실장:뇌출혈, 부실장:또라이 타조,기럭지,홍홍,외계인,이내,우엉
양일중학교 1학년 최경은 지도교사-이춘자선생님
쇼트트랙 스케이팅의 특성과 효과 체육 1학년 Ⅴ. 개인운동 > 3. 스케이팅 (3/5) 활용방법
조 양명용. 하미자. 손혜련. 원 정영숙. 강미라. 이해섭.
인류의 대재앙 지구온난화 유영준.
『CLEAN 사업장』조성사업 추진현황 한 국 산 업 안 전 공 단 부 산 지 역 본 부 - (주)은창티엔씨 -
농원 사업계획서.
원의 넓이를 다른 도형으로 구할 수 있을까? 만든이 : 박민설 소속 : 구엄초등학교 한림초등학교 영재학급 -1-
고전 소설 갈래 정리 이 CD의 ppt 자료를 정상적으로 보기 위해서는 나눔글꼴 설치가 꼭 필요합니다.
허생전 許生傳 소단원 정리 문학에서 삶을 찾다 (3) 문학과 삶의 다양성
퍼머넌트 웨이브의 종류 뷰티디자인과 박해진.
◈ 본 PPT자료는 날짜와 원장님의 원명, 성함으로 바꿔서 사용하실 수 있는 자료입니다.
(1) 홍길동전 국어 중학교 1학년/1학기 7. 문학과 사회 > (1) 홍길동전(2/7) [화면 소개]
결정은 어떤 환경에서 잘 자랄까? 한림초등학교 6학년 송은지.
90cm 120cm 학술대회 발표논문 제목(1번예) 연 구 개 요 결과 및 고찰 결 론 저자명(근무처명)
(1) 자아의 발견과 실현 도 덕 1학년 1학기삶과 도덕 Ⅰ. 삶과 도덕 2. 개성신장과 인격도야 [제작의도] [활용방법]
파# 운지 익히기 리코더 합주하기 음악 4학년 2학기 20. 가을길(3/3) 수업계획 수업활동 <제작의도>
천국 가는 길 천국 가는 길 ♧ 천국 가는 길 ♧ 1. 죄와 사망(지옥) 1) 사람의 3가지 공통점 - 죄인, 죽음, 심판
2019년 사립작은도서관 운영설명회 및 회계 교육 일 시 : (화) 14:00 ~
내가 뽑고싶은 국회 의원 지은이:4-1 이름:송윤아..
네 자리 수끼리의 뺄셈 알아보기 수학 3학년 2학기 1. 덧셈과 뺄셈 ( 4/8 ) -학습진행내용-
수학 2 학년 1 학기 문자와 식 > 부 등 식 ( 2 / 2 ) 부등식의 성질 이용 풀기.
한국 사회와 정치 제11강. 한국 정치의 과거, 현재, 그리고 미래 신라대학교 국제관계학과 교수 이 동 윤.
두 수의 크기 비교 수학 3학년 1학기 10,000까지의 수 (6/8) 수업계획 수업활동 - 학습진행내용-
문제 해결하기 수학 3학년 1학기 6. 곱 셈 (7-8/9) 수업계획 수업활동 -학습진행내용-
곱셈(3) 수학 3학년 1학기 6. 곱셈 (3/9) 수업계획 수업활동 -학습진행내용- O 수업 시작하면서 제시되는 화면이다.
곱셈(4) 수학 3학년 1학기 6. 곱셈 (4/9) 수업계획 수업활동 -학습진행내용- O 수업 시작하면서 제시되는 화면이다.
재미있는 놀이, 문제 해결하기 수학 3학년 2학기 8. 문제 푸는 방법 찾기 (4/6) -학습진행내용-
◈ 본 PPT자료는 날짜와 원장님의 원명, 성함으로 바꿔서 사용하실 수 있는 자료입니다.
타이머를 시작하려면 슬라이드 쇼 메뉴에서 쇼 보기를 클릭하십시오.
<PPT3> 어느 날 예수님이 예루살렘성에 들어와서 성전에서 가르치시러 들렸어요
3월의 나에게….
◈ 본 PPT자료는 날짜와 원장님의 원명, 성함으로 바꿔서 사용하실 수 있는 자료입니다.
주제 : 원핵에서 진핵으로, 단세포에서 다세포로
농구의 패스 3 체육 2학년 Ⅵ. 단체운동 > 1. 농구 (5/10) 활용방법
성명 : 웹툰 제목 :.
Presentation transcript:

Test-Driven Development STG / 황성원

TDD(Test-Driven Development) 란? TDD 개발법 TDD 의 장점 TDD 의 한계

TDD란? TDD

TDD(Test-Driven Development)란? 01 TDD(Test-Driven Development)란? TDD 목적 또한 개발 된 소프트웨어의 품질을 보장하고 향상시키는 데 있다. TDD의 목표는 작동하는 깔끔한 코드 “Clean code that works”이다 . 이를 위해 두 가지 원칙을 제시한다. 오직 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다 중복을 제거한다. 일반적인 개발 절차는 다음과 같이 진행 되어 왔다. 요구사항 분석 -> 설계 -> 개발 -> 테스트 ->배포 기존 개발법엔 소프트웨어 개발을 느리게 하는 잠재적 위험들이 존재한다 - 소비자의 요구사항의 불 명확성 - 완벽한 설계에 대한 부담 - 실제 코드와 설계간의 갈등 - 수정이 다른 기능의 정상동작에 관한 영향력

01 TDD 개발 절차 테스트 스크립트 개발 -> 개발 -> 리팩토링 테스트 스크립트 개발 -> 개발 -> 리팩토링 TDD 전문서적의 내용을 바탕으로 TDD를 간단히 설명한다면, - TDD는 코드를 먼저 만드는 것이 아니라, 테스트 스크립트를 먼저 만든다. - 그 다음에 실제 서버에서 수행되는 코드를 작성하는데, 먼저 만든 테스트 스크립트를 수행하면 통과 될 수 있도록 코딩한다. - 코드 작성을 마치고 , 그 코드의 가독성, 유지 보수성 등을 높이기 위해서 리팩토링을 한다 애자일 개발론의 Robert C . martin 은 다음의 TDD 원칙을 제시한다 - 실패하는 테스트를 작성하기 전에는 절대로 제품코드를 작성하지 않는다. - 실패하는 테스트 코드를 한 번에 하나이상 작성하지 않는다. - 현재 실패하고 있는 테스트를 통과하기에 충분한 정도를 넘어서는 제품코드를 작성하지 않는다

01 만일 수행될 코드를 만든 후 테스트 스크립트를 만들어 테스트하고, 리팩토링 작업을 했다면 TDD를 적용한 것이 아닐까 ? 이는 그리 중요치 않다. 개발을 하는 과정에 있어서 테스트 스크립트를 만들었고 리팩토링을 수행했다면 TDD를 적용했다고 말할 수 있다. TDD의 목적은 소프트웨어의 품질 향상을 시키는 한 방법이라는 것을 잊지 말자. 그럼 도대체 왜 TDD를 해야 하는가? 보통 개발하는데 코드를 짜는 시간 보다 디버깅을 하는 시간이 더 많이 소요 된다. 그렇다면 디버깅은 보통 어떻게 할까? 대부분 개발자들은 자바의 경우 System.out.print()를 호출 하 거나 Log.debug()를 호출하는 방법으로 디버깅을 한다. 물론 이 방법은 개발할 당시에는 문제가 되지 않겠지만, 이러한 코드가 그대로 운영서버로 올라가게 된다면 한번도 호출되지 않는 이러한 코드들이 메모리를 점유할 것이고 또한 사용자에게 보여지지 않 는 부분이 호출됨에 따라서(System.out.print()는 웹 브라우저가 아닌 콘솔에 뿌려지므로), 성능에도 영향을 준다. 그렇다면 JUnit 메소드를 호출해서 테스트를 수행할 경우는 어떨까? 어떠한 메소드를 디버깅 한다고 했을 때, 보통은 WAS를 띄우고 화면을 클릭해서 해당 메소드를 호출하게 할 것이다. 이렇게 소요되는 시간과 JUnit으로 메소드 호출을 통해 테스트를 한다고 했을 때, 어떤 방법이 더 오래걸릴까? 또한 기존 디버깅방법은 재사용성도 못하게 된다.

01 어차피 테스터가 테스트를 하는데, 왜 내가 테스트 코드를 만들어야 하는가? 프로그램을 개발할 때 테스터보다 더 그 프로그램의 구동방식에 대해서 잘 알고 있는 사람은 그 프로그램을 지시한 고객과 개발자 이다. 다시 말하면 제 3자의 의한 테스트를 수행할 경우 개발자가 직접 수행하는 경우를 비교하면 커버리지 차이가 굉장히 많다는 것이다. 또한, 결함을 발견하는 시기에 있어서는 빠르면 빠를 수록 좋다. 결함을 발견하는 시기가 늦어질 수록 그 결함을 처리하는데 드는 비용이 증가하기 때문이다. TDD 같은 것은 외국 실정에 적합하다. 시간이 부족한 한국에서는 안 맞는다? 회귀테스트에 대해서 다시 한번 생각해보자. 개발하는데 있어서 시간이 부족하다는 말도 맞는 말이다. 하지만 메소드 하나를 수정했을 때 관련된 메소드를 점검하고 다음 단계로 넘어가는가 ? 테스트 코드의 개수에 따라 달라질 수 있지만 만들어 놓은 테스트코드를 수행하는데 1분 정도 걸리는 대상 메소드가 있을 경우 일일이 메뉴얼로 테스트하는데 얼마나 걸릴지 생각해보기 바란다.

01 리팩토링 리팩토링의 수행절차 1 . 리팩토링 할 대상을 선정한다. 2 . 선정된 대상의 테스트 코드를 작성한다. 3 . 코드를 분해한 후 재조립한다. 4 . 재조립한 코드를 테스트한다. 5 . 3번 작업과 4번 작업을 반복한다.

리팩토링해야 할 대상 반복되는 코드 : 지겨운 Copy & Paste 작업만 수행한 코드가 있다. 이 경우의 단점은 잘못된 부분이 있어서 하나를 수정해야 할 때 다른 모든 코드도 수정해야 한다는 것이다. 긴 메소드 : 하나의 메소드에서 모든 처리를 하면 작성한 본인은 이해할 수 있다 쳐도, 해당 프로그램을 인수인계 받은 사람은 이해하기도 , 수정하기도 어렵다. 큰 클래스 : 하나의 클래스에 너무 많은 메소드나 변수가 있으면 누구도 손대기 두려워 한다. 긴 매개변수 목록 : 매개변수가 너무 많으면 나중에 몇 번째 매개변수가 어떤 의미인지 혼동한다. 확산을 위한 변경 : 한 클래스의 목적이 여러 부분에서 사용되고, 각각의 목적에 따라서 수정이 이루어져야 하는 경우 분리하는 것이 좋다. 샷건(산탄총) 수술 : 확산을 위한 변경과 같아 보이지만, 다른 것이 샷건 수술이다. 하나의 수정을 위해서 여러 클래스를 건드려야 할 경우가 발생된다면, 차후 하나의 클래스만 수정하는 것이 가능하도록 만드는 것을 의미한다. 기능에 대한 욕심 : 어떤 메소드가 같은 클래스의 메소드보다, 다른 클래스의 메소드를 더 많이 사용한다면 그 메소드는 많이 사용하는 클래스로 옮기는 것이 차라리 낫다. 큰 데이터 덩어리 : 하나의 TO(Transtfer Object or Value Object)를 여러 곳에서 사용하려고 덕지덕지 변수들을 추가해서 사용하는 경우가 상당히 많다. 비단 TO가 아니라 일반 클래스에서도 마찬가지다. 필요 없는 객체가 생성되지 않도록 꼭 필요한 것만 묶어서 재구성 한다. 기본 자료형에 대한 집착 : 너무 기본 자료형만 밝히지 말고, 필요한 TO를 만들어서 사용하는 것이 좋다 Switch 문장 : Switch 문장을 다형성에 맞추어 중복이 최대한 발생하지 않도록 해야 한다. 게으른 클래스 : 별로 사용되지 않는 클래스는 없애야 한다. 추측한 것들 제거 : 필요한 것이라고 생각해서 만든 것들 중 사용되지 않는 것은 삭제해야 한다. 임시 필드 : 임시로 만든 필드가 너무 많고, 별로 사용되지 않으면 이해하기 어려워지기 때문에 수정해야 한다. 메세지 연결 : 메세지를 의미 없이 연속적으로 호출하고, 호출하고 또 호출하게 되면 간략하게 변경해야 한다. 중간자적 입장 : 클래스에 있는 메소드가 주로 다른 클래스를 참조한다면, 지나친 캡슐화가 된 것이므로 수정한다. 높은 연관성 제거 : 두 클래스의 연광성이 너무 높으면 유지 보수할 때 위험하다. 다른 인터페이스를 구현한 비슷한 클래스 : 같은 작업을 하지만, 다른 인터페이스를 구현한 경우를 말한다. 즉 하는 일은 같은대 무엇을 사용해야 하는지 혼동되는 클래스가 있다면 수정해야 한다. 약간 부족한 라이브러리 : 제공받은 라이브러리가 부족한 부분이 있다면, 기능을 보완하는 클래스를 추가하는 것이 좋다. 잘못된 상속 : 상속받은 클래스가 너무 많은 일을 하거나 복잡할 경우 부모 클래스에게 동생을 하나 만들어 달라고 하는 것이 낫다. 불필요한 주석 제거 : 디버깅을 위해서 만든 필요없는 주석들은 제거해야 한다. 소스의 가독성이 떨어진다. 01

이번 프로젝트를 들어가면서 TDD란 걸 처음 알게 되면서 이런저런 방법론들에 대해 알아보게 되었습니다. 마치며… 이번 프로젝트를 들어가면서 TDD란 걸 처음 알게 되면서 이런저런 방법론들에 대해 알아보게 되었습니다. 한번에 TDD에 대한 PPT 를 다 끝내고 싶었지만, 여기까지 공부하면서도 생각보다 이해가 잘 안되어서 앞으로 파트를 나눠 학습회시간에 이어 가 볼 생각 입니다. 1부는 TDD에 대한 개요라고 보시면 될 것 같습니다. 앞으로 개발법이라든지 장점이나 한계점에 대해 연재 하도록 하겠습니다. 이 문서는 나눔글꼴로 작성되었습니다. 설치하기