Search Results for '개발방법론'

4 POSTS

  1. 2009.09.27 Kent Beck의 Responsive Design 세미나 내용 정리
  2. 2006.09.25 UnitTest++ 이야기
  3. 2006.09.23 TDD관련 추천 서적 몇 가지
  4. 2006.09.23 Unit Testing
[수정 중 버전입니다.]
켄트벡 세미나 참석 후 정리한 내용입니다.
아직 일부분 정리가 덜 되었으나 너무 늦어지고 있어서 현재 버전을 그냥 공개합니다.
세미나 때 필기한 내용을 위주로 정리를 했으나 + 여러 후기 및 xper 에서 오갔던 이야기들 + 켄트벡 블로그의 내용도 일부 추가가 되었습니다.
나중에 시간날 때 부족한 부분 업데이트를 하도록 하겠습니다.

* 중간에 따옴표로 적은 내용은 설명보다는 켄트벡이 한 말을 인용형식으로 넣은 것입니다.

1. 김창준님의 켄트벡 소개
1.1. 켄트 벡의 3가지
  1) xUNIT을 만듬: 이것을 통해 소프트웨어 업계에 공헌한 바가 큼 (다 잘 아는 내용 들...)
  2) Pattern의 선구자: (GoF가 아니라고 주장하심 ^^)
     '87 OOPSLA에 Ward Cunningham과 같이 'Using Pattern Languages for Object-Oriented Programs'라는 패턴관련 논문을 냄
     내용이 구현패턴이 아니라 UI패턴에 대한 내용이었음
     (-> 켄트벡의 패턴관련 짧은 글)
   * 김창준의 패턴인식의 변화계기 2가지
      - Design Patterns Smalltalk Companion : 언어 특성상 간결하고 한눈에 보여서 GoF보다 이해하기 쉬움
      - Smalltalk Best Practice Patterns : (진흙속에서 우연히 발견한 진주)
      - Implementation Patterns : ???

1.2 켄트벡의 3가지를 관통하는 2가지 (김창준 개인의견)
   1) 단순성에 대한 집착 : 터무니없이 단순한 아이디어와 멍청할 정도의 극단적으로 적용하는 실험
   2) 인간적 성숙에 대한 노력: XP 2판부터 1판과 달라짐
       1판 시절에는 비판에 대해 너가 틀렸다고 이야기함 (기술 중심)
       2판 시절에는 비판에 대해 내가 잘못전달해서 죄송하다고 함 (인간관계에 대한 노력)
* 김창준님의 여담: 컨퍼런스 후 두가지 반응 -> 열린괄호(질문, 에너지가 막 생겨남) 와 닫힌괄호(아! 하는 깨달음), 켄트벡 강의는 열린괄호에 가깝다고 생각됨
---------------------------------------------------
2. Responsive Design의 시작
   시작: 대략 3년 전에 Structured Design 저자와 같은 컨퍼런스 참석이 계기가 됨
          대학교때 교재였지만 내용을 모르다 최근에 다시 읽으므로서 소프트웨어의 설계의 근본적인 법칙을 발견함
          이 책을 통해 Coupling과 Cohesion 개념이 나옴
          "소프트웨어 커뮤니티는 기본(기초)를 잃어버렸다"
이것을 통해 Responsive Design의 동기를 갖게되었다.
-> 본인의 아이디어를 추가해서 개념을 더 확장하고 내가 배운 것을 내가 속한 커뮤니티에 전달하는 것

"테스팅문제는 사실 다지인문제다"라는 말을 하면서 몇가지 예를 들어 줌.
- 테스트하기 어려우면 더 좋은 테스팅 툴을 구하지만 이것이 디자인 문제라고 생각하면 근본적인 것을 고치기 시작하고 테스트 문제는 사라진다
- 예) 동일한 파일을 여러사람이 고치는 경우 문제의 증상만 봤을 때는 check in, check out 등 여럿이 사용가능한 프로토콜을 정의 한다. 디자인 문제로 관점을 전환하면 '왜 동일한 파일을 여러명이 접근해야 하는가?'의 생각을 할 수 있다. 즉 한사람만 접근하도록 디자인을 변경할 수도 있다.
- "디자인은 소프트웨어를 더 단순하게 만든다."
- 예) 빌드시간이 너무 길다 -> 빌드시간의 문제이면 CPU나 빌드를 빠르게할 수 있는 장비를 구입, 디자인의 문제이면 작게 나누어서 필요한 부분만 빌드할 수 있게 한다.

3. 소프트웨어 디자인은 무엇인가?
소프트웨어를 디자인하는 3가지 단계
1) Introspection - 내가 어떻게 디자인하는지 관찰, 과정에 대한 많은 메모를 남김
2) Empirical - 많은 소프트웨어를 관찰한다
       practical
       esthetic -> 개발자에게 있어서 중요한 스킬, 아름다움을 인정(감상)하고 추한것을 인식한다.
3) Quantitatively - 측정된 결과를 보면 다른 결론을 얻기도 한다.

==> 오늘 강의의 결론: 소프트웨어 디자인은 이성적인 프로세스가 아니다. 우리가 완벽히 컨트롤 하지 못한다.

4. 왜 지금인가? (Responsive Design에 대해서 이야기하는 것)
  우리가 여태까지 사용한 방법들이 앞으로 통하지 않을 것이다.
  '변화의 시대에 디자인은 많은 영향을 줄 수 있다.'
  - 무어의 법칙의 종료: 여태까지 단순히 기다리는 것 만으로도 성능문제를 해결할 수 있었다.
  - scale: 데이터는 단일 쓰레드의 성능보다 더 빠른 속도로 증가하고  있다.
  - cloud: "혁신을 이룰 수 있는 유일한 도구는 디자인이다"
  - Re-client: 웹의 출현으로 서버에서 모든 작업이 이루어지고 클라이언트는 단순한 웹페이지만 보여주는 시대에서 점점 클라이언트쪽에 많은 기능이 들어가는 시대로 바뀜. 과거를 통해 배운 것은 서버와 클라이언트가 모두 커지면 프로그램 하기가 어려워진다는 사실.

5. 소프트웨어 개발의 목표
- Steady Flow of Features : 기능의 지속적인 흐름

50개의 기능을 50번째 주에 한번에 릴리즈하는 것보다는 매주 하나의 기능을 릴리즈하는 것이 좋다. "지속적인 흐름"을 갖는 것이 더 좋다.
모든 기능을 한번에 릴리즈할 경우 어떤 기능이 더 가치가 있는지 파악할 수 없고 문제가 발생할 경우에도 어떤 기능때문인지 파악이 어렵다.
즉, 지속적인 흐름을 통해 경과과정에 대한 피드백을 받을 수 있다.
오랜 기간을 두고 봤을 때 처음에 시작할 때와 디자인이 같은 경우는 없다.
"마지막 순간에 많은 기능을 릴리즈하는 것을 거부하라"

6. 좋은 디자인이란?
   기능을 추가하는 것은 단순해야 한다. (Adding features should be straight forward)

7. 딜레마
   Time  Options
 Revenue  Sooner  More
 Cost  Later  Less


   소프트웨어 디자인은 수입을 빨리 얻도록 하며 지출을 늦게할 수 있도록 장려해야 한다.
   (켄트 벡의 관련글: The Design Dilemma)

8. 효율

(Initial work + cost of feature + cost of changes + cost of mistakes + opportunity cost ) * risk

9. Latency, Throughput, Variance
 - 이것을 통해서 전략을 결정하는데 도움을 받는다
 - "뒤로 물러서서 좀 더 큰 그림을 봐야한다"
예) 호텔 회전문
throughput = 사용인원/시간
latency = 사람당 대기시간
variance = 시간에 따른 줄의 변화
회전문 처리 능력을 증가시키는 것보다 근본적인 원인을 볼 필요가 있다.
만약 문밖에 커피 스탠드에 사람이 몰리는 것이면 문 안쪽으로 커피 스탠드로 옮기도록 제안할 수 있다.

start up 이변 latency가 중요 (빨리 출시하고 필요하면 빨리 버릴 수 있는...)
business s/w는 throughput이 중요 (현재의 투자가 일년 후에 결과로 나타날 수 있다)

(-> 켄트벡의 관련글: Latency, Throughput and  Variance )
10. 도전
  - "소프트웨어 디자인은 가장 어려운 지적인 도전이다"
 
  - Human
  - Social
  - Sensitivity
  - Succession
  - Uncertainty
     - Value
     - Means (How?)
     - Technology
     - Team


succession -> http://www.threeriversinstitute.org/FirstOneThenMany.html
------------------------------------------------------------------------------
요약
[오전] steady flow + sesitivity to design needs
[오후] 3 pieces of concrete advice
------------------------------------------------------------------------------
11. 가치(Values)
  - Feedback
  - Humanity
  - Courage
  - Ambiguity
     "learn to value moments of ambiguity"
     "artificially create chaos to find pattern"

12. 디자인의 정의
 Beneficially Relating Elements
  두 가지로 이해가 가능
  - Design is beneficially relating elements. (relationship)
  - Designing is beneficially relating elements. (activity)

  (-> 켄트벡의 관련 글: Design in beneficically relating elements)

13. Coupling
  (일반적인 정의가 아닌 켄트벡이 사용하는 정의)
  The probability that a change in one element will require a change in another
   하나의 element가 변할 때 다른 element가 변하는 정도
   지속적인 흐름을 유지하기가 어렵다 -> coupling을 줄여야 한다

14. Cohesion
  The probability that a change in one sub-element will require a change in all others
  Inversly related to coupling
  하나의 sub-element가 변할 때 다른 sub-element가 변하는 정도
  cohesion을 분석하는 것이 더 간단하다.
 
  element의 크기를 적절히 해서 변화시 element 전체를 변경가능하도록 해야 한다.
  element가 너무 작으면 변경시 element와 연관된 다른 element도 변경해야 하며
  element가 너무 크면 element의 일부만 변경해야 하므로 변경되지 않는 부분이 변경되기 전과 동일하다는 것을 증명해야 하는 문제가 발생한다.

소프트웨어 디자인에 있어서 뉴튼의 법칙과 같다.

==> Increase cohesion and reduce coupling

(-> 켄트벡의 관련글: Coupling and Cohesion)

15. Safe Steps => [Advice 1]

16. 4 Stratagies (Taxonomies) => [Advice 2]
- Leap

- Parallel

- Stepping Stone

- Simplification
  마스터 디자이너만 사용한다.


17. Refactoring
 - Bi-directional   예) extract method vs. inline method
 - Isolate Change
 - Interface or implementation
   인터페이스와 구현을 동시에 변경해서는 안된다.

18. Isolate Change
많은 양의 코드 중 몇 줄만 바꿀 경우 extract method후에 변경을 한다. (cohesive)
변경을 완료한 후 에 다시 inline method를 한다. (not cohesive)
"refactor until making change is easy"
"Responsive designer doesn't make difficult changes. Responsive designer works hard to make changes easy."


19. Design is an Island


"how to make design worst to make it better"


20. Observations



* 다른 후기 보기
http://blog.maiet.net/xe/?mid=blog&category=136&document_srl=6150
http://blog.gloridea.net/1165540691
http://homo-ware.tistory.com/archive/20090906

http://blog.outsider.ne.kr/370
http://blog.outsider.ne.kr/371
http://okjungsoo.tistory.com/entry/%EC%BC%84%ED%8A%B8-%EB%B2%A1%EC%9D%98-Responsive-Design-%EC%84%B8%EB%AF%B8%EB%82%98-%ED%9B%84%EA%B8%B0
http://homo-ware.tistory.com/archive/20090906

* 기타
Appreciative Inquiry
"Positive emotion is just as important as intellectual idea."

*참고자료
- 켄트벡의 Responsive Design 기사 (The Pragmatic Bookshelf Magazine - Sep. 2009)
http://www.pragprog.com/magazines/download/3.pdf

- InfoQ 2008년도 Resposive Design 세미나 영상
http://www.infoq.com/presentations/responsive-design
- 켄트벡 블로그의 Responsive Design 카테
고리
http://www.threeriversinstitute.org/blog/?cat=6

- 세미나 ppt 자료
http://drop.io/responsive/asset/responsive-design-one-day-ppt
- 세미나 관련 내용 톰합 위키
http://sites.google.com/site/kentbackkorea2009/home/syncretism_on_seminar


저작자 표시 변경 금지
신고


UnitTest++ 이야기

2006.09.25 13:09
여러가지로 살펴본 결과 가장 마음에 드는 Framework라는 생각이 듭니다.
Windows CE로 빌드해도 함수 2가지만 주석처리하고 빌드하면 문제없이 빌드가 되네요.

마음에 드는 기능 중 하나는 테스트 결과를 보여주는 방식입니다.
PC버전으로 빌드를 할 경우 post build step으로 테스트 어플을 실행시키고
문제가 있을 경우 stdout으로 printf를 해주면 바로 Visual Studio 2005의 output창으로 관련 내용이 프린트 됩니다.
에러메시지에 소스파일 및 라인 수까지 찍혀서 클릭해주면 test fail이 된 소스코드로 바로 이동도 가능합니다.

이걸 Windows Mobile용으로 원격으로 실행해서 결과를 얻어오려면
뭔가 더 해줘야할 것 같아서 Remote API연구를 하고 그랬는데
생각외로 그냥 디바이스로 파일 deploy하고 디버그 모드로 실행시켜 주니까
stdout으로 나오는게 그냥 VS2005 output 창으로 나와 버리네요.
생각외로 쉽게 동일한 기능이 제공이 되는 것을 확인했습니다.

그래서 추가적으로 생각해 본 것이 테스트를 PC에서 돌리는 것이 빠르니까 일단 PC에서 돌리고
device에서 테스트해야만 하는 부분이 있을 경우 device에서 돌릴 수 있도록
하나의 프로젝트에서 win32 와 WM5.0 프로젝트 설정을 같이 할 수 있는 방법을 연구해 봤습니다.
심지어 사용자 정의 프로젝트 템플릿을 만드는 것도 고려해 보았지만
결론적으로 C++ 프로젝트는 자동으로 두개으 플랫폼을 생성할 수 있는 방법이 없습니다.

그래서 일단 win32프로젝트를 만드록 거기에 WM5.0 configuration을 추가하고
이렇게 되면 project property가 제대로 세팅되어 있지않으므로 다른 WM5.0 프로젝트에서 복사를 해서
수동으로 vcproj 파일을 수정하면 하나의 프로젝트로 데스크탑 및 윈도우 모바일 디바이스 빌드가 가능합니다.

신고


테스트 주도 개발(Test Driven Development; TDD)혹은 Unit Testing(단위 테스트)를 하기 위해서는 아래의 몇가지 기본 서적을 읽어보면 도움이 된다.

1. TDD의 원조격 인 책
Test Driven Development: By Example (Addison-Wesley)
 

테스트 주도 개발 : Test-Driven Development



2. TDD에 적용시 보면 도움이 될만한 책

위 서적 보다는 약간 더 실용적인 관점에서 쓰여진 책이다. 특히 아래 2개의 chapter는 보는게 TDD적용에 도움이 된다.

Chapter 7. Mock Objects

Chapter 8. Developing a GUI-Test First

Test Driven Development: A Practical Guide



3. TDD와 떼놓을 수 없는 관계인 리팩토링(refactoring)
Refactoring: Improving the Design of Existing Code


Refactoring (한글판)

 

* 그 외 참고 서적
TDD와 refactoring을 적극적으로 사용하고 있는 Extreme Programming(XP)에 대한 책.
아래 서적은 XP의 개발 방법론보다는 XP의 철학에 대해 이야기 하고 있고 실제 XP적용을 위해서는 좀 더 방법론적인 책을 봐야한다.

Extreme Programming Explained: Embrace Change (2nd Edition)


익스트림 프로그래밍, 제2판 : 변화를 포용하라



** 그리고 다들 아시겠지만 OOP하려면 필수적으로 봐야할 Design Pattern 책도 있다.
Design Patterns: Elements of Reusable Object-Oriented Software


GoF의 디자인 패턴 : Design Patterns

신고


Unit Testing

2006.09.23 11:50
최근에 나름대로 테스트 주도 개발(TDD)를 실무에 적용해 보려고 Windows Mobile 소프트웨어 개발시 사용 가능한 Unit Test Framework를 열심히 뒤지고 다녔다.

최종적으로 당첨이 된 것은 UnitTest++이라는 Framework이다.

CppUnit의 경우 유명하지만 사용 방법이 복잡하고 무거운 반면
UnitTest++의 경우 사용 방법도 쉽고 비교적 가벼운 편이다.

사실 CppUnitLite도 강력한 후보였지만 너무나 기본적인 기능만 갖추고 있어서 나름대로 기능추가를 해서 사용해야 되서 일단 제외가 되었다.

사실 UnitTest++을 만든사람도 처음에 CppUnitLite를 기반으로 기능을 추가해 나가다 CppUnitLite2를 만들고 다시 새로 UnitTest++로 옮겨갔다. 그래서 그런데 CppUnitLite의 간결한 느낌이 그대로 이어지고 있다.


아래는 관련 링크 몇가지 이다.


- UnitTest++
http://www.gamesfromwithin.com/articles/0603/000108.html
http://sourceforge.net/projects/unittest-cpp/ 
http://www.winwonk.com/temp/unittest++.html

- CppUnitLite

http://c2.com/cgi/wiki?CppUnitLite
http://www.objectmentor.com/resources/downloads/bin/CppUnitLite.zip
http://www.gamesfromwithin.com/articles/0412/000061.html#cppunitlite
신고



 RSS Feed

방명록

Recent Posts

  1. Xcode4 프로젝트에 프레임..
  2. 특허침해에 휘말리는 iOS..
  3. 최근에 변경된 애플 앱스토..
  4. 아이폰 사용팁 20가지
  5. 나의 관심사 재정리하기

Recent Comments

  1. 영회님 좀 더 자세히 설명해주.. coderiff 2010
  2. 완전 멋진데.. 한가지 아쉬운.. 영회 2010
  3. 그렇군요. 지금까지 Gmail의.. 하인도 2010
  4. 저도 예전에 이것때문에 한동.. coderiff 2010
  5. 어이쿠~ 이런 비밀이 있었네요.. 로드맵 2010

Recent Trackbacks

  1. イベント m lサイズ でスタイ.. イベント m lサイズ でスタイ.. 2014
  2. refurbished laptops refurbished laptops 2014
  3. Personal Security Personal Security 2014
  4. 갤럭시 시리즈의 두번째 버전.. 2011
  5. 하인도의 생각 neohind's me2DAY 2010

Calendar

«   2017/09   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Bookmarks

  1. The Old New Thing
  2. Windows Mobile Team Blog
  3. Windows CE Base Team Blog
  4. MobileDeveloper wiki
  5. 류한석의 피플웨어
  6. 애자일 이야기

Site Stats

TOTAL 2,633,059 HIT
TODAY 14 HIT
YESTERDAY 13 HIT

티스토리 툴바