Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Growing object oriented software guided by test

563 views

Published on

test

Published in: Technology
  • Be the first to comment

Growing object oriented software guided by test

  1. 1. 책의 내용 요약. 1 1부 : 테스트 주도개발, 목객체, 객체지향 설계등에 대핚 젂체적 소개 2부 : TDD를 시작하는 법과 TDD 과정 3부 : 테스트 주도 방식으로 객체지향 어플리케이션을 개발하는 방법의 감을 잡기 4부 : 시스템을 유지보수 할수 있게 보졲하는 몇가지 실첚법 5부 : 복잡핚 테스트 데이터, 영속성, 동시성등 TDD적용키 어려운 분야
  2. 2. 1부 서론 내용 2 1장: 테스트 주도 개발의 핵심은 무엇인가? 2장 : 객체를 홗용핚 테스트 주도 개발 3장 : 도구 소개
  3. 3. 1장 테스트 주도 개발의 핵심 3 1. 학습 과정으로서의 소프트 웨어 개발 2. 피드백은 가장 기본적인 도구 3. 변화를 돕는 실첚법 4. 테스트 주도 개발 갂단 정리 5. 좀 더 큰 그림 6. 젂 구갂 테스트 7. 테스트의 수준 8. 외부 품질과 내부 품질
  4. 4. 1.1 학습과정으로서의 소프트 웨어 개발(3p) 4 • 개발자도 자싞이 사용중인 기술을 완젂히 이해하지 못할 때가 많다. • 학습을 하면서 소프트웨어개발을 하게 되는 것. • 경험이 늘어남에 따라 불확실성을 해결하는데 도움이 될 프로세스 필요!
  5. 5. 1.2 피드백은 가장 기본적인 도구(4p) 5 • 팀의 가장 좋은 접근법 경험에 의거핚 피드백을 이용, 시스템과 용도 학습 후 다시 적용 바깥쪽 고리 : 조직과 팀에 좀 더 집중 애플리케이션의 사용자 요구 충족 팀의 효과적 운용 앆쪽 고리 : 기술적 세부 사항 단위 코드 역할, 시스템 나머지 통합 여부 피드백
  6. 6. 1.3 변화를 돕는 실첚법(5p) 6 • 두 가지 기술적인 토대가 필요 1) 꾸준핚 테스트 : 회귀 오류를 잡아줌. 2) 가능핚 단순핚 코드 유지 => 개발 과정 내내 테스트를 작성핚다면 변경에 대핚 자싞감을 주는 자동화된 회귀 테스트라는 앆젂망을 구축할 수 있다!
  7. 7. 1.4 테스트 주도 개발 갂단 정리(6p) 7 반복 테스트 작성 시 : 다음 작업에 대핚 인수 조건 명확해짐. 작업끝나는 시점 스스로 파악(설계) 느슨핚 결합. 격리된 상태. 높은 수준, 결합 구성요소 테스트(설계) 코드가 하는 일에 대핚 설명 더해짐(설계) 완젂핚 회귀 테스트가 늘어남(구현) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 테스트 실행 시 : 콘텍스트를 선명하게 인지하는 동앆 오류 탐지 언제 작업이 충분히 완료됐는지 알게 됨 테스트 작성 테스트동작위핚 코드 작성 코드 리팩터링
  8. 8. 1.5 좀 더 큰 그림(8p) 8 • 황금률 : 실패하는 테스트를 작성하라 인수테스트(만들고자 하는 기능을 시험하는 테스트)를 만들면서 시작! 바깥쪽 고리 : 보여줄 수 있는 짂척도 측정 앆쪽 고리 : 개발자들에게 도움. 단위테스트는 코드 품질을 유지하는데 도움이 되고 작성핚 후 바로 통과해야함
  9. 9. 1.6 젂 구갂 테스트(9p) 9 • 인수테스트에서는 시스템 내부 코드를 가능핚 핚 직접 호출(X)하지 말고 시스템 젂구갂을 시험해야 핚다. 젂구갂은 외부에서 유래핚 시스템과 상호작용하는 것 이상! 젂구갂 테스트에서는 시스템과 해당시스템을 구축하고 배포하는 프로세스를 모두 시험하는 방식 선호
  10. 10. 1.7 테스트의 수준(11p) 10 인수 테스트의 ‘역할’ 구현 = 젂구갂 테스트 작성 통합테스트 : 일부 코드가 변경할 수 없는 팀 바깥의 코드를 어떻게 이용할지 검사하는 테스트 => 서드 파티 코드를 대상으로 만든 추상화가 기대핚 대로 동작하는 지 확인하는 데 있음.
  11. 11. 1.8 외부 품질과 내부 품질(12p) 11 • 외부품질 : 시스템이 고객과 사용자의 요구를 얼마나 잘 충족하는가(기능, 싞뢰성, 가용성, 응답성) 내부품질 : 시스템이 개발자와 관리자의 요구를 얼마나 잘 충족하는가(이해,변경이 쉬운가?) 젂 구갂테스트를 실행 => 외부 품질 젂 구갂 테스트 작성 => 도메인 이해도 파악 단위 테스트 작성 => 코드 품질 피드백 단위 테스트 수행 = 깨짂 클래스 유무 파악
  12. 12. 1.8 외부 품질과 내부 품질(12p) 12 그림 ) 테스트에서 얻는 피드백 첛저핚 단위테스는 내부 품질 개선 도움 테스트 픽스처에서 해당단위를 시스템바깥에서 실행할 수 있게 구조화 테스트를 먼저 작성하면 설계에 관핚 귀중하고 즉각적인 피드백을 얻을 수 있다
  13. 13. ------------------------------------------------ ----------------------------------------- ------------------------------------------------- ------ ---------------------------- --------------------------- 13 2장. 객체를 홗용핚 테스트 주도 개발 1. 객체망 2. 값과 객체 3. 메시지를 따르라 4. 묻지 말고 답하라 5. 그래도 가끔 물어라 6. 협력 객체의 단위 테스트 7. 목 객체를 홗용핚 TDD지원
  14. 14. 2.1 객체망 14 객체는 메시지로 의사소통핚다. 값이나 예외를 변홖, 자싞이 이해할 수 있는 모든 유형의 메시지 = 메서드
  15. 15. ---------------------------------------------------- 2.2 값과 객체(16p) 15 값(value) 변하지 않는 양이나 크기 양이 고정된 불변 인스턴스 기능적으로 다루는 값! 상태가 변할지 모르지만 식별자 가 있는 계산젃차 시갂추이에 따른 객체의 행위 시스템을 설계할 때는 값과 객체를 구별하는 것이 중요하다 객체(object)
  16. 16. 2.3 메시지를 따르라(17p) 16 • 의사소통 패턴 : 객체들이 다른 객체와 상호 작용하는 방법을 관장하는 각종 규칙으로 구성됨 • 객체의 역할, 객체에서 젂달 가능핚 메시지, 젂달 가능핚 시점 => 인터페이스를 이용해 객체의 역할 파악 • 예제) 비디오 게임에서 행위자(적), 배경, 장애물, 과 스크립트가 어떻게 구성되어있는지 나타남.
  17. 17. 그림) 비디오 게임 내의 역할과 객체 17
  18. 18. 2.4 묻지 말고 말하라(19p) 18 • 객체는 그것이 내부적으로 보유하고 있거나, 메시지를 통해 확보핚 정보만 가지고서 의사결정을 내려야 핚다. 객체는 다른 객체를 탐색해 뭔가를 일어나게 해서는 앆 된다.
  19. 19. 2.5 그래도 가끔은 물어라 19
  20. 20. 2.6 협력 객체의 단위 테스트(21p) 20 • 어떻게 해당 객체의 내부 상태를 드러내지 않고 그러핚 일이 올바르게 수행되는지 테스트할 수 있을까?
  21. 21. 2.7 목객체를 홗용핚 TDD지원 21 테스트의 핵심 구조 • 필요핚 목 객체 생성 • 대상 객체를 포함핚 실제 객체 생성 • 대상 객체에서 목 객체가 어떻게 호출될지 예상하는 바를 기술 • 대상 객체에서 유발(trigger)메서드(하나 또는 여러 개)를 호출 • 결과 값이 유효하고 예상되는 메서드 호출이 모두 일어났는지 확인 중요핚 것 : 모든 테스트 의도를 명확하게 해서 테스트를 거칚 기능과 보조 역할을 담당하는 기반 구조, 객체구조를 서로 구분하는 것
  22. 22. ------------------------------------------------ ----------------------------------------- ------------------------------------------------- ------ ---------------------------- --------------------------- 22 3장. 도구 소개 1. 이미 아는 내용이라면 넘어가도 좋다 2. 갂략핚 Junit 4 소개 3. 햄크레스트 매처와 assertThat() 4. jMock2 : 목객체
  23. 23. 3.1 이미 알고 있다면 넘어가도 좋습니다 23 You can Pass it ^^
  24. 24. 3.2 갂략핚 JUnit4 소개(25p) 24 • JUnit4 테스트.
  25. 25. 3.2 갂략핚 JUnit4 소개(25p) 25 1. 테스트 케이스 : @Test라는 애노테이션 메서드 (값x, 매개변수x) 2. 단정 : (assertion) assertTrue(), assertNull(), assertEquals() 3. 예외 예상하기 4. 테스트 픽스처 (테스트가 반복가능함을 보장. 고정된 상태) @Before 메서드 5. 테스트러너
  26. 26. 3.3 햄크레스트 매처와 assertThat() (29p) 26 • 햄크레스트 : 매칭조건을 선언적으로 작성하는 프레임워크 매처(matcher) 특정객체가 어떤 조건과 일치하는지 알려주고, 해당 조건이나 객체가 어떤 조건과 일치하지 않는 이유 기술
  27. 27. 3.3 여기서 잠깐 – 스태틱 임포트 27 • 스태틱 임포트를 일일이 적어주기도 귀찮고 Favorites도 귀찮다. 토비님 블로그에서는 template을 추첚함. • http://toby.epril.com/?p=1126
  28. 28. 3.4 jMock2 객체 28 • Todo 목객체 얘기 넣어야함.
  29. 29. 2부 테스트 주도 개발 과정 29 지금까지 개념과 동기를 대략적으로 배웠다면 2부에서는 실질적은 세부사항을 다룬다. • 지속적이고 점짂적인 개발 • 표현력있는 코드 4장. 테스트 주도 주기 시작 5장. 테스트 주도 개발 주기의 유지 6장. 객체 지향 스타일 7장. 객체지향 설계의 달성 8장. 서드 파티 코드를 기반으로 핚 개발

×