E D R , A S I H C RSS

Pair Programming


ν•˜λ‚˜μ˜ μ»΄ν“¨ν„°μ—μ„œ λ‘˜μ΄μ„œ μ„œλ‘œ μƒμ˜ν•˜λ©΄μ„œ λ²ˆκ°ˆμ•„κ°€λ©° ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λŠ” 방법.


1. Pair Programming Approach

PairProgramming 을 μ μš©ν•΄λ³΄λŠ” 방법, μŠ€νƒ€μΌ λ“±λ“±
  • Pair Refactoring - κΌ­ μ†ŒμŠ€ μ½”λ“œκ°€ μ•„λ‹ˆλ”λΌλ„ μœ„ν‚€ νŽ˜μ΄μ§€μ— λŒ€ν•œ λ¬Έμ„œκ΅¬μ‘°μ‘°μ • 을 ν•˜λŠ” κ²½μš°μ—λ„ μ μš©ν•  수 μžˆλ‹€. 특히, ν•΄λ‹Ή 토둠이 λ²Œμ–΄μ§„λ’€ μ–‘λ‘ μœΌλ‘œ λ‚˜λˆ„μ–΄μ‘Œμ„ 경우, 각 의견 μ§€μ§€μžλ“€μ΄ Pair 둜 λ¬Έμ„œκ΅¬μ‘°μ‘°μ •μ„ ν• λ•Œ μ΄μš©ν•  수 μžˆλ‹€.
  • 5λΆ„ Pair-Change - μž₯κ³Ό 단이 μ‘΄μž¬ν•˜κΈ΄ ν•˜λŠ”λ°. μž₯점으둜 λ³Έλ‹€λ©΄, μžμ‹ μ˜ ν”„λ‘œκ·Έλž˜λ° μ°¨λ€κ°€ 빨리 λŒμ•„μ˜€λ©΄μ„œ Pair 끼리의 Feedback 이 λΉ λ₯΄λ‹€λŠ” μ μ—μ„œ 집쀑도가 λ†’λ‹€λŠ” 점이 μžˆλ‹€. 단, Junior 의 경우 μžμ‹ μ˜ 사고가 μ„±μˆ™ν•΄μ§ˆ μ‹œκ°„μ„ λ°©ν•΄ν•  수 μžˆλ‹€. 이 경우 5λΆ„μœΌλ‘œ μ‹œμž‘, 점차적으둜 Change 의 기간을 λŠ˜λ €μ£ΌλŠ” 방법이 μžˆλ‹€.

2. 효과

  • μ½”λ“œ μ—λŸ¬μœ¨μ˜ κ°μ†Œ - λ‚΄κ°€ κ°„κ³Όν•˜κ³  λ„˜μ–΄κ°€κΈ° μ‰¬μš΄ μ—λŸ¬λ“€μ— λŒ€ν•΄μ„œ 지적이 λΉ λ₯΄λ‹€.
  • Protocol Analysis, μ§€μ‹μ˜ 전달 - Seminar:CognitivePsychologyμ°Έμ‘°. λ‹€λ₯Έ μ‚¬λžŒμ˜ 사고과정을 κ΄€μ°°ν•˜κ³ , λ˜ν•œ μžμ‹ μ˜ 사고과정을 λ‹€λ₯Έ μ‚¬λžŒμœΌλ‘œ ν•˜μ—¬κΈˆ κ΄€μ°°ν•  수 있게 ν•΄μ€λ‹€. μ΄λŠ” μžμ‹ μ˜ ν”„λ‘œκ·Έλž˜λ° 과정쀑 잘λͺ»λœ 뢀뢄을 κ³ μΉ˜λŠ”λ° 도움을 μ€λ‹€.
  • Communication
  • ν•΄λ‹Ή μ‹œκ°„ λ‚΄ μ§‘μ€‘λ„μ˜ μƒμŠΉ, Pair Pressure - ν‰μ†Œ ν”„λ‘œκ·Έλž˜λ° μ™Έμ˜ 것(ν”„λ‘œκ·Έλž˜λ° 쀑 μŒμ•…λ“£κΈ°, μ“Έλ°μ—†λŠ” μ›Ήμ„œν•‘, 메일 읽기)에 λŒ€ν•œ μž‘μŒμ„ μ—†μ•€λ‹€. μž‘μ—… μžμ²΄μ—λ§Œ λͺ°λ‘ν•˜κ²Œ ν•΄μ€λ‹€. TestDrivenDevelopment 와 μƒν˜Έμž‘μš©μ΄ λΉ λ₯Έ μ–Έμ–΄(Python λ“±..)λΌ μ΄μš©ν•˜λ©΄ Feedback 이 λΉ λ₯΄λ€λ‘œ 집쀑도가 더 높아진닀.

3. Pair Programming 에 λŒ€ν•œ μ˜€ν•΄?

  • Pair 쀑 ExpertλŠ” Juniorμ—κ²Œ λ§Žμ€ μ„λͺ…을 ν•΄μ€˜μ•Ό ν•œλ‹€? - μ΄λŠ” Junior 의 Feedback 을 보고 κ²°μ •ν•˜λŠ” 것이 μ’‹λ‹€. μ²˜μŒλΆ€ν„° Expert κ°€ κΌ­ 'μ„ μƒλ‹˜'이 될 ν•„μš”λŠ” μ—†λ‹€.
  • Junior : Expert κ°„ 격차에 λ”°λ₯Έ νš¨μœ¨μ„±μ˜ 문제 - PairProgramming
  • Junior : Junior Pair λŠ” 의λΈκ°€ μ—†λ‹€? - 결과물에 μƒκ΄€ν•˜μ§€ μ•ŠλŠ” ν•™μŠ΅μ˜ 경우 κ·Έ 의λΈκ°€ μžˆλ‹€. Junior 의 μ‹€λ ₯ ν•œκ³„ λ‚΄μ—μ„œμ˜ Output μœΌλ‘œλ„ 의λΈκ°€ μžˆλ‹€. 처음 ν”„λ‘œκ·Έλž˜λ°μ„ μ΅νžˆλŠ” μ‚¬λžŒμ—κ²Œ Pair λΌ ν•˜λŠ” 것 μžμ²΄κ°€ μƒˆλ‘œμš΄ ν•™μŠ΅κ²½ν—˜μ΄ λœλ‹€.


PairProgramming 의 λ‹€λ₯Έ 적용 μ˜ˆλ‘œμ„œ PairSynchronization 이 μžˆλ‹€.


4. PairProgramming κ²½ν—˜κΈ°

4.1. λ™λ¬Έμ„œλ²„ ν”„λ‘œκ·Έλž¨ κ°œλ°œμ€‘

μ§„ν–‰ν•œ μ‚¬λžŒ : κ°•μ„μ²œ, μœ€μƒν˜

λ™λ¬Έμ„œλ²„ ν”„λ‘œκ·Έλž˜λ° νŒ€μ˜ μΈμˆ˜μΈκ³„μš©μœΌλ‘œ μ΄μš©λ˜μ—ˆμ—ˆλ‹€. PPλΌ μ£Όλ‘œ ν•˜κ³  ν•œλ‘λ²ˆμ˜ VPPλΌ ν–ˆλ‹€. ν•΄λ‹Ή μ†ŒμŠ€λΌ κ°™μ΄ λ§Œλ“€μ–΄κ°€λ©΄μ„œ 기쑴의 ν”„λ‘œκ·Έλž¨μ„ μ„λͺ…ν–ˆλ‹€.

4.1.1. 제기된 문제점 & 해결법

Expert : Junior . 즉, ν•΄λ‹Ή 뢄야에 λŒ€ν•œ μ „λ¬Έκ°€ : μ΄ˆμ‹¬μž 의 λ¬Έμ œμ΄λ‹€. 이 경우 κ·Έ 진행이 λŠ¦μ–΄μ§ˆ 수 μžˆλ‹€. (Expert : ExpertλŠ” 졜고의 νš¨μœ¨μ„±μ„ 가진닀. λ¬Όλ‘  이것도 μ—΄λ¦° λ§ˆμŒμ„ λ°”νƒ•μœΌλ‘œ ν•œλ‹€. Junior : Junior 도 λ‚˜λ¦„λŒ€λ‘œ(?) 빨리 움직인닀. (μ œλŒ€λ‘œ μ›€μ§μΈλ‹€λŠ” 보μž₯은 λͺ»ν•œλ‹€. -_-;)) 그리고 Expertκ°€ ν•΄λ‹Ή ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•œ λ‹΅ (μ½”λ“œ)을 μ΄λΈ μ•Œκ³  μžˆλŠ” 경우 Expert의 집쀑도와 κΈ΄μž₯감을 ν•΄μΉ˜κ²Œ λœλ‹€.
이 λ•Œμ—λŠ” ExpertλŠ” 놀지말고 (-_-;) Observer의 역할에 μΆ©μ‹€ν•œλ‹€. Junior 의 ν”Œλ°ν•˜λŠ” 뢀뢄을 λ³΄λ©΄μ„œ 전체 ν”„λ‘œκ·Έλž¨ λ‚΄μ˜ 관계와 λΉ„κ΅ν•΄λ³΄κ±°λ‚˜, 'μžμ‹ μ΄λΌλ©΄ μ–΄λ–»κ²Œ ν•΄κ²°ν• κΉŒ?' λ“± λ¬Έμ œλΌ μ œκΈ°ν•΄λ³΄κ±°λ‚˜, reference, κ΄€λ ¨ μ†ŒμŠ€λΌ μ€λΉ„ν•΄μ£ΌλŠ” 방법이 μžˆλ‹€.

또 ν•˜λ‚˜μ˜ 문제점으둜 제기된 것은, Junior κ°€ Expert의 κΆŒμœ„μ— 눌릴 수 μžˆλ‹€λŠ” 것이닀. Junior λŠ” μ§ˆλ¬Έμ— μš©κ°ν•΄μ•Ό ν•œλ‹€. ExpertλŠ” 닡변에 μΈμƒ‰ν•΄μ„œλŠ” μ•ˆλœλ‹€. μ—΄λ¦° 마음이 ν•„μš”ν•œ 일이닀. (Communication κ³Ό Courge λŠ” XP 의 덕λͺ©μ΄λ‹€. ^^)

4.1.2. 발견된 μž₯점

전문가라 ν•˜λ”λΌλ„ ν”„λ‘œκ·Έλž˜λ°μ˜ μ‹€λ ₯κ³Ό λ‹€λ₯Έμ‚¬λžŒμ—κ²Œ λ‹΅λ³€ν•΄μ£ΌλŠ” λŠ₯λ ₯은 λ‹€λ₯΄λ‹€. 컀λλ‹ˆμΌ€μ΄μ…˜ λŠ₯λ ₯은 μ‹€μ œ 도메인에 λŒ€ν•œ μ§€μ‹κ³ΌλŠ” λ‹€λΌ μˆ˜ μžˆλ‹€. Expert λŠ” Junior μ—κ²Œ μ„λͺ…을 ν•΄μ€ŒμœΌλ‘œμ„œ 기쑴의 지식에 λŒ€ν•œ μ •λ¦¬λΌ ν•΄ λ‚˜κ°ˆ 수 μžˆλ‹€. Junior λŠ” ν˜Όμžμ„œ μ‚½μ§ˆν•˜λŠ” 것보닀 더 빨리 ν•„μš”ν•œ 지식에 λŒ€ν•΄ μ ‘κ·Όν•  수 μžˆλ‹€.

4.2. TFP μ—°μŠ΅μ€‘

μ§„ν–‰ν•œ μ‚¬λžŒ : κ°•μ„μ²œ, λ°•μ§€ν™˜

κ°„λ‹¨ν•œ μ•„λ‚ λ‘œκ·Έ μ‹œκ³„λΌ λ§Œλ“œλŠ” ν”„λ‘œκ·Έλž¨μ΄μ˜€λ‹€. MFC + CppUnit 둜 μž‘μ—…ν–ˆλ‹€.

4.2.1. 제기된 문제점 & 해결법

  • Pair 의 진행을 μ΄λŒμ–΄κ°€λŠ” 것 - ν”„λ‘œκ·Έλž˜λ°μ˜ 흐름이라고 ν•΄μ•Ό ν• κΉŒ. λ””μžμΈμ„ μ–΄λŠμ •λ„ μ„ μ •λ„λ‘œ λ§žμΆ”κ³  μ–΄λ– ν•œ λ¬Έμ œλΌ ν’€ 것인가에 λŒ€ν•œ μ•½κ°„μ˜ 선이 ν•„μš”ν•  것 κ°™λ‹€. 이 κ²½μš°μ—λŠ” 초반 λ””μžμΈμ΄ ν—ˆμˆ ν–ˆμ—ˆλ‹€λŠ” 약점이 μžˆμ—ˆλ‹€. '전체적인 κ΄€μ μ—μ„œ 무엇무엇을 ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ΄ 완성될 것이닀' λΌλŠ” 것. UserStory 만 μƒκ°ν•˜κ³  EnginneringTask λΌ κ°„κ³Όν•œ 것이 큰 λ¬Έμ œμ˜€λ‹€. (κ·Έλ•Œ EnginneringTask 에 λŒ€ν•œ κ°œλ…μ΄ μ—†μ—ˆμ—ˆλ‹€λŠ”. μ–΄λ””μ„œ ν•¨λΆ€λ‘œ μ£Όμ›Œλ§Œ 지식. --; μ‚¬κ³ λΌ ν•˜μž 사고λΌ. -_-)
    • ExtremeProgrammingPlanning μ΄λΌλŠ” 책을 보면 해결책을 ꡬ할 수 μžˆμ„ 것 κ°™λ‹€. (Xp μ±…λ“€μ˜ μž₯점이자 단점이라면 얇은 λ‘κ»˜μ˜ λΆ„μ±…μ΄λ €λ‚˜.. --a)
  • Pair 의 λΆ„λ°° - TFPλΌ κ³΅λΆ€ν•˜λŠλƒκ³  μ‹œμž‘ν•œ κ²ƒμ΄μ˜€λ˜μ§€λΌ, μƒλŒ€μ μœΌλ‘œ CppUnit 에 μ΅μˆ™ν•˜μ§€ μ•Šμ€ μ‚¬λžŒμ—κ²Œ 코딩을 μ£Όλ„ν•˜κ²Œ ν–ˆλ‹€. ν•œ 1주일정도 λ˜λŠ” ν”„λ‘œμ νŠΈλΌλ©΄ Junior둜 ν•˜μ—¬κΈˆ κ²½ν—˜μ„ μŒ“κ²Œ ν•¨μœΌλ‘œμ¨ 였히렀 μž₯점으둜 μž‘μš©ν•  μˆ˜λ„ μžˆμ„ 것 κ°™λ‹€. ν•˜μ§€λ§Œ, μ—­μ‹œ μ μ ˆν•˜κ²Œ λΆ„λ°°λΌ ν–ˆμ—ˆμ–΄μ•Ό ν•  것 κ°™λ‹€.
  • 집단 μ‚½μ§ˆ. --; - 이것은 헀프닝이라고 λ³΄λŠ” 것이. -_-;; Test Code μ—μ„œ λ‘˜μ΄ λΌλ””μ•ˆ κ΅¬ν•˜λŠ” 곡식을 거꾸둜 μ“°κ³  'μ™œ 값이 틀리닀고 ν•˜λŠ”κ±°μ•Ό!' ν•˜λ©° 1μ‹œκ°„μ„ μ‚½μ§ˆν–ˆλ‹€λŠ” 후문이 μžˆλ‹€λŠ”. --;
    • ν•˜μ§€λ§Œ UnitTest도 κ·Έλ ‡λ“이, λ§Žμ€ μž₯점을 가진 방법을 μ™„λ²½ν•˜μ§€ μ•Šλ‹€λŠ” 이유둜 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것은 μ•„μ‰¬μš΄ 일일 것이닀.
  • 아직은 νš¨μœ¨μ„±μ΄.. - μΌμ’…μ˜ Learning Time 이라고 ν•΄μ•Ό ν• κΉŒ? λŒ€λΆ€λΆ„ μ‹€ν—˜μ—μ„œ λλ‚œλ‹€λŠ” 점. 퍽 ν•˜κ³  μ²˜μŒλΆ€ν„° νš¨μœ¨μ„±μ„ κ·ΉλŒ€ν™” ν•  순 없을 것이닀. 참고둜 μ΄λ•ŒλŠ” μ•„λ‚ λ‘œκ·Έ μ‹œκ³„ λ§Œλ“œλŠ”λ° 거의 3μ‹œκ°„μ΄ κ±Έλ Έλ‹€. Man-Hour 둜 치면 6μ‹œκ°„μ΄ λœλ‹€.

4.2.2. 발견된 μž₯점

μ§‘μ€‘λ„λŠ” 거의 μ΅œκ³ λΌλŠ” 점! (이 μ μ—μ„œ λ‘˜μ΄ μ„œλ‘œ λ™μ˜λΌ ν–ˆλ‹€.) ν‰μ†Œ 혼자 ν”„λ‘œκ·Έλž˜λ°ν• λ•ŒλŠ” 쀑간에 μ›Ήμ„œν•‘μ„ ν•˜λŠ” λ“± μ£Όμœ„κ°€ μ‚°λ§Œν•΄μ§€λŠ” κ²½μš°κ°€ λ§Žμ•˜λ‹€. ν•˜μ§€λ§Œ 이 Pair μ€‘μ—λŠ” μ‚¬λžŒλ“€μ΄ ν”„λ‘œκ·Έλž˜λ°κ³Ό ν† λ‘ μ—λ§Œ 전념할 수 μžˆμ—ˆλ‹€. (였히렀 쀑간쀑간 μΌλΆ€λŸ¬ 10λΆ„ νœ΄μ‹μ„ 두어야 ν–ˆλ‹€.)

TestFirstProgramming κ³Ό PairProgramming 은 집쀑도에 κ΄€ν•΄μ„œλŠ” κ°€μž₯ ν›Œλ₯­ν•œ 선택인 것 κ°™λ‹€. (단, Pairμ™€μ˜ λ‹΄ν•©ν–‰μœ„κ°€ 이루어지면 κ³€λž€ν•˜κ² λ‹€. -_-;)

4.3. bioinfomatix ν”„λ‘œμ νŠΈμ€‘

μ§„ν–‰ν•œ μ‚¬λžŒ : κ°•μ„μ²œ, bioinfomatix μ—μ„œ μΌν•˜μ‹œλŠ” λΆ„λ“€

ν•™μŠ΅λͺ©μ μ΄ μ•„λ‹Œ μ‹€μ§ˆμ μΈ κ°œλ°œμ„ μœ„ν•œ PairProgramming μœΌλ‘œλŠ” μ²˜μŒμΈλ“ ν•˜λ‹€. 2μ£Όκ°„ 격일둜 일을 ν–ˆμ—ˆλŠ”λ°, XP μŠ€νƒ€μΌλ‘œ ν”„λ‘œμ νŠΈλΌ μ§„ν–‰ν•˜μ˜€λ‹€.

4.3.1. 제기된 문제점 & 해결법

* Junior λ‘œμ„œμ˜ μ‹€μˆ˜ - κΈ°μ‘΄ μ•žμ—μ„œμ˜ κ²½ν—˜μ—μ„œλŠ” μƒλŒ€μ μœΌλ‘œ λ‚΄κ°€ Expert 의 μœ„μΉ˜μ—μ„œ μž‘μ—…μ„ ν•˜μ˜€λ‹€. μ΄λ²ˆμ—λŠ” Junior 의 μž…μž₯에 μ„œκ²Œ λ˜μ—ˆλŠ”λ°, 기쑴에 Junior 의 μœ„μΉ˜μ— μžˆμ—ˆλ˜ μ‚¬λžŒλ“€μ˜ μ‹€μˆ˜λΌ λ‚΄κ°€ ν•˜κ²Œ λ˜μ—ˆλ‹€. μ–΄λ €μš΄ 뢀뢄에 λŒ€ν•΄μ„œλŠ” μ΄ν•΄λΌ μ œλŒ€λ‘œ ν•˜μ§€ λͺ»ν–ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  Expert의 μ†λ„λΌ μ €ν•΄ν• μ§€λ„ λͺ¨λ₯Έλ‹€λŠ” 생각을 ν•˜λ©° λŒ€κ°• λ„˜μ–΄κ°”μ—ˆλ‹€. (λ‹€λ₯Έ Junior 의 κ²½μš°λ„ PPμ—μ„œ 어렀움을 κ²ͺλŠ” 뢀뢄쀑 ν•˜λ‚˜κ°€ 이것일지도 λͺ¨λ₯Έλ‹€. 특히 μ„ ν›„λ°° κ΄€κ³„μ˜ 경우) ν•˜μ§€λ§Œ, μ΄λŠ” 였히렀 μ‚¬νƒœλΌ μ•…ν™”μ‹œν‚¬ 수 μžˆλ‹€. ν”„λ‘œκ·Έλž˜λ° μž‘μ—…μ„ 계속 Expertμ—κ²Œλ§Œ μ˜μ‘΄ν•˜κ²Œ 되기 λ•Œλ¬Έμ΄λ‹€. ν™•μ‹€ν•˜κ²Œ κ°œλ…μ„ κ³΅μœ ν•΄μ•Ό Observer 의 μ—­ν• κ³Ό Driver 의 μ—­ν•  λ‘˜ λ‹€ μž˜ν•  수 μžˆλ‹€. (μ‰¬μš΄ 일은 μ•„λ‹ˆλ‹€. ν™•μ‹€νžˆ)
  • 보톡 코딩을 μ£Όλ„ν•˜λŠ”μͺ½μ΄ 빨리 μ§€μΉ˜λ©° 집쀑λ ₯도 λ–¨μ–΄μ§€κ²Œ λœλ‹€. 특히 PairProgramming 의 κ²½μš°λŠ” μƒλŒ€νŽΈ Pair에 λŒ€ν•œ 배렀상 ν•΄λ‹Ή μ‹œκ°„μ— μž‘μ—… μ΄μ™Έμ˜ λ‹€λ₯Έ 일을 거의 ν•˜μ§€ μ•ŠλŠ”λ‹€. (ν™”μž₯싀도 자주 μ•ˆκ°„λ‹€;;)
  • 상황에 따라 λ‹€λ₯΄κ² μ§€λ§Œ, Driver / Observer 의 κ΅μ²΄μ‹œκ°„μ„ λ‘λŠ” 것이 쒋은 것 κ°™λ‹€. μœ„μ˜ μ΄μœ μ—μ„œ.
  • 상황에 λ”°λΌμ„œλŠ” 말둜 ν•˜λŠ” 것 보닀 μ½”λ“œλ‘œμ„œ μ΄μ•ΌκΈ°ν•˜λŠ” 것이 더 직관적일 λ•Œκ°€ λ§Žλ‹€. μ½”λ“œλ‘œ 이야기 ν•˜κ³ , λ‹€μ‹œ μ˜κ²¬μ„ λ“£κ³  μˆ˜μ •ν•˜κ±°λ‚˜ ν‚€λ³΄λ“œλΌ λ„˜κ²¨μ„œ λ¦¬νŽ™ν† λ§ ν•˜λŠ” μ‹μœΌλ‘œ λŒ€ν™”ν•  수 μžˆκ² λ‹€.
  • μžμ‘΄μ‹¬λ¬Έμ œ? - PairλΌ μ˜μ‹ν•΄μ„œμ—¬μ„œμΈμ§€ μƒλŒ€μ μœΌλ‘œ Library Referenceλ‚˜ Tutorial Source λΌ μž˜ μ•ˆλ³΄λ €κ³  ν•˜λŠ” κ²½ν–₯이 μžˆκΈ°λ„ ν•˜λ‹€. ν•΄λ‹Ή 뢀뢄에 λŒ€ν•΄μ„œ λΈλ¦¬ 개인적 λ˜λŠ” Pair둜 SpikeSolution λ‹¨κ³„λΌ λ¨Όμ € 작고 κ°€λ²Όμš΄ 마음으둜 μ‹œμž‘ν•΄λ³΄λŠ” 것은 μ–΄λ–¨κΉŒ ν•œλ‹€.

4.3.2. 발견된 μž₯점

  • On-Side Customer μ™€μ˜ PairProgramming - ν”„λ‘œμ νŠΈ 쀑간에 μ°Έμ—¬ν•΄μ„œ κ±±μ •ν–ˆμ—ˆλŠ”λ°, ν•΄λ‹Ή μΌν•˜μ‹œλŠ” λΆ„κ³Ό 직접 PairλΌ ν•˜κ³  μ§ˆλ¬Έμ„ ν•΄ λ‚˜κ°€λ©΄μ„œ 전체 ν”„λ‘œκ·Έλž¨μ„ 이해할 수 μžˆμ—ˆλ‹€. 특히 λ‚΄κ°€ BioInfomatics 에 λŒ€ν•œ 지식이 μ—†μ—ˆλŠ”λ°, ν•΄λ‹Ή 도메인 μ „λ¬Έκ°€μ™€μ˜ Pairλ‘œμ„œ μ„œλ‘œ μƒν˜Έλ³΄μ™„κ΄€κ³„λΌ κ°€μ§ˆ 수 μžˆμ—ˆλ‹€.
  • Junior 의 μœ„μΉ˜μ—μ„œ 바라본 ν•™μŠ΅ 효과 - 이전에 μƒκ²½μ΄ν˜•μ΄ μ±„νŒ… ν”„λ‘œκ·Έλž¨ λ§Œλ“œλŠ” 법을 직접 λ³΄μ—¬μ€¬μ„λ•Œκ°€ 생각이 λ‚œλ‹€. (κ·Έλ•Œ '자. 15λΆ„λ™μ•ˆ ν•˜λ‚˜ λ§Œλ“€μ–΄μ„κ»˜~' ν•˜λ©΄μ„œ ν›„λ‹€λ‹€λ‹₯ MFC둜 μ„œλ²„/ν΄λΌμ΄μ–ΈνŠΈ μ˜ˆμ œλΌ λ°”λ‘œ λ³΄μ—¬μ£Όλ˜ λͺ¨μŠ΅μ€ μžŠν˜€μ§€μ§€ μ•ŠλŠ”λ‹€;) Junior 의 μž…μž₯μ—μ„œ Expert 행동 ν•˜λ‚˜ν•˜λ‚˜λŠ” Check Point 이닀. 쒋은 μŠ΅κ΄€κ³Ό ν”„λ‘œκ·Έλž˜λ° μŠ€νƒ€μΌ, λ””λ²„κΉ…ν•˜λŠ” λͺ¨μŠ΅μ„ 직접 눈으둜 확인할 수 μžˆμ—ˆλ‹€.

4.4. IPSC 쀑

μ§„ν–‰ν•œ μ‚¬λžŒ : κ°•μ„μ²œ, λ₯˜μƒλΌ

ProgrammingContest 에 μžˆλŠ” K-In-A-Row λ¬Έμ œλΌ ν‘ΈλŠ” 일을 ν–ˆλ‹€.

4.4.1. 제기된 문제점

  • 아쉽닀면.. νŽ˜λ„ν‹°; 흑;;; 닡이 μ•ˆλ‚˜μ™”λ‹€. --;
  • λŒ€ν™” - μƒλŒ€λ°©μ΄ 'μ•Œκ³  μžˆμ„ 것이닀' λΌλŠ” 점도 μ‹€μ œλŠ” λͺ¨λ₯΄κ³  μžˆλŠ” κ²½μš°κ°€ λ§Žλ‹€λΌλŠ” 생각을 ν•΄λ³Έλ‹€. μΉœν•œμΉœκ΅¬ 이더라도, μƒλŒ€λ°©μ„ 잘 μ•ˆλ‹€λΌκ³  μƒκ°ν•˜λ”λΌλ„, μƒλŒ€λ‘œλΆ€ν„° 읽지 λͺ»ν•œ μ •λ³΄λŠ” λ„ˆλ¬΄λ‚˜ λ§ŽκΈ°μ—.
    • λ³΄κ°„λ²•μ˜ μ˜€μ°¨λΌ μ„이렀면 Control Point λΌ λŠ˜λ¦¬κ³ , 간격을 μ’ν˜€μ•Ό 할것이닀. μž¦μ€ λŒ€ν™”λŠ” κ·Έ μžμ²΄κ°€ λΆ€ν•˜μΌμ§€ λͺ¨λ₯΄κ² μ§€λ§Œ, λ˜ν•œ μ˜€ν•΄λΌ μ„일것이닀.

4.4.2. 발견된 μž₯점

  • ν˜‘λ™ - μ΄λ²ˆκ²½μš°λŠ” 비ꡐ적 ν˜‘λ™μ΄ 잘 된 경우라고 μƒκ°ν•œλ‹€. Python 으둜 λ¬Έμ œλΌ ν’€κΈ° μœ„ν•œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λŠ”λ°λŠ” μ„μ²œμ΄, Idea 와 쀑간에 데이터 νŽΈμ§‘μ„ ν•˜λŠ”λ°μ—λŠ” μ •κ·œν‘œν˜„μ‹μ„ 잘 μ΄μš©ν•˜λŠ” 상λΌμ΄κ°€ 큰 도움을 μ£Όμ—ˆλ‹€. μ μ ˆν•œ λ•Œμ— μ μ ˆν•˜κ²Œ μ£Όλ„ν•˜λŠ” μ‚¬λžŒμ΄ μ „ν™˜λ˜μ—ˆλ˜ κ²ƒμœΌλ‘œ κΈ°μ–΅.
  • 집쀑 - 이번 κ²½μš°μ—λŠ” 'μ‹œκ°„μ œν•œ' μ΄λΌλŠ” κ²ƒκΉŒμ§€ μžˆμ–΄μ„œμΈμ§€; μ„μ²œμ€ λ”λ”μš± ν”„λ‘œκ·Έλž˜λ° μžμ²΄μ— μ§‘μ€‘ν–ˆλ‹€. (슀크립트 μ–Έμ–΄ μŠ€νƒ€μΌμ˜ 접근방법과 μ΄μ „μ˜ TDD μ—°μŠ΅λ„ ν•œλͺ« κ±°λ“ λ“. μ‘°κΈˆμ”© λ§Œλ“€κ³  κ²°κ³Ό 확인해보고 쑰금 또 λ§Œλ“€μ–΄λ³΄κ³  κ²°κ³Ό 확인을 ν–ˆλ‹€. 단, μ΄λ²ˆμ—” Test Code λΌ μ•ˆλ§Œλ“€μ–΄μ„œ, λ’€μ—κ°€μ„œ 버그가 λ‚¬μ„λ•Œ λŒ€μ²΄λΌ λͺ»ν–ˆλ‹€λŠ”.-_-; μž˜λ λ•ŒλŠ” λ¬Έμ œκ°€ μ•„λ‹ˆλ‹€. 잘 μ•ˆλ λ•Œ, λ¬Έμ œμƒν™©μ— λŒ€ν•œ λŒ€μ²˜κ°€ μ€‘μš”ν•˜λ‹€κ³  생각.)

5. VPP : Virtual Pair Programming

μž₯μ†Œμ™€ μ‹œκ°„ λ“±μ˜ 문제둜 PairProgrammingλΌ μ§„ν–‰ν•˜μ§€ λͺ»ν• λ•Œμ—λŠ” Virtual PairProgramming 을 μ‹œλ„ ν•  수 μžˆλ‹€.
λ„·λΈνŒ…, VNC λ“±μ˜ 개발 ν”„λ‘œκ·Έλž¨μ„ κ³΅μœ ν•  수 μžˆλŠ” ν”„λ‘œκ·Έλž¨κ³Ό μŒμ„±μ±„νŒ… λ“±μœΌλ‘œ Virtual PairProgramming을 ν•  수 μžˆλ‹€. (였.. 쒋아진 세상~) 단,PairProgramming 에 λΉ„ν•΄ μ•„μ‰¬μš΄μ λ“€μ΄ μžˆλ‹€. (κ΄€λ ¨ 책듀을 μ°Ύμ•„μ„œ 보여주지 λͺ»ν•œλ‹€λŠ” 것 λ“±λ“±) λ‚˜μ€‘μ—λŠ” PC카메라와 μŠ€μΊλ„ˆ λ“±λ“± μ΄μš©ν•  수 μžˆμ§€ μ•Šμ„κΉŒ. ^^

1002λŠ” VNC와 λ„·λΈνŒ… (κ·Έλ•Œ λ„·λΈνŒ… ν™”λ©΄κ³΅μœ μ‹œ XPκ°€ λ»—μ—ˆλ˜ κ΄€κ³„λ‘œ. -_-;) 을 이용, Python을 κ³΅μœ ν•΄μ„œ λ‹€λ₯Έ 곳에 μžˆλŠ” μ‚¬λžŒκ³Ό SpikeSolution 을 VPP둜 μ‹œλ„ν•œ 적이 μžˆλ‹€. VNCκ°€ ν™”λ©΄ refreshκ°€ λŠλ¦¬λ‹€λŠ” 단점 λΉΌκ³ λŠ” 별닀λ₯Έ 지μž₯이 μ—†μ—ˆλ‹€. λͺ¨λ₯΄λŠ” λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ„ Pair ν•˜λŠ” μ‚¬λžŒμ΄ λ‹€μš΄λ°›μ•„μ£Όκ³ , λΌμ΄λΈŒλŸ¬λ¦¬λΌ μ„μΉ˜ν•˜κ³ . λͺ¨λ₯΄λŠ” 것은 Pair μ—κ²Œ 물어보고, μ–΄λ–»κ²Œ λ§Œλ“€κΉŒ ν† λ‘ ν–ˆλ˜ κ²½ν—˜μ΄ μ’‹μ•˜λ‹€.

λŒ€μΈκ΄€κ³„μ— λŒ€ν•΄ μ†Œκ·Ήμ μΈ(?) μ‚¬λžŒλ“€μ€ 였히렀 말이 λ§Žμ•„μ§ˆ μˆ˜λ„ μžˆλŠ” λ°©λ²•μΌλ“ ν•˜λ‹€λŠ”. -_-a (ν•˜μ§€λ§Œ, μ–Όκ΅΄ μ•ˆλ³΄μ΄λŠ” μ‚¬λžŒμ΄λΌ ν•˜λ”λΌλ„ 지킬 것은 μ§€ν‚€μž.!)

6. PP κ²½ν—˜ν›„κΈ°

  • μ–Έμ–΄ : PHP
  • νŒŒνŠΈλ„ˆ : 직μž₯λ™λ£Œ
  • λ“œλΌμ΄λ²„ : Benghun
  • κ΅¬ν˜„κ³Όμ œ : λ°μ΄νƒ€λ² μ΄μŠ€ 클래슀(Database.inc)
참고사항 : λͺ‡λͺ‡ ν•¨μˆ˜μ— λŒ€ν•΄μ„œλ§Œ TDDλΌ μ μš©μ‹œμΌ°λ‹€.
λ‚˜λŠ” .NET의 System.Data의 κ΅¬μ‘°λΌ λ³΄κ³  μ¦‰μ‹œ PHP에 μ μš©μ‹œν‚€κ³  μ‹Άμ–΄μ‘Œλ‹€. ASP.NETμ—λŠ” SqlConnection , OdbcConnection , OleDbConnection을 μ œκ³΅ν•΄ μ€λ‹€. 이 ν΄λž˜μŠ€λ“€μ„ 잘 μ‚¬μš©ν•˜λ©΄ DataTier의 μ’…λ₯˜κ°€ λ°”λ€Œμ–΄λ„ μ½”λ“œμ˜ μˆ˜μ •μ„ μ΅œμ†Œν™” μ‹œν‚¬ 수 μžˆλ‹€. PHPλŠ” μ—¬λŸ¬κ°€μ§€ μ’…λ₯˜μ˜ λ°μ΄νƒ€λ² μ΄μŠ€ κ΄€λ ¨ν•¨μˆ˜λΌ μ œκ³΅ν•΄μ€λ‹€. μ–΄λ– ν•œ λ°μ΄νƒ€λ² μ΄μŠ€λΌ μ‚¬μš©ν•˜λŠλƒμ— 따라 λ™μΌν•œ κΈ°λŠ₯을 ν•˜λŠ” λ‹€λ₯Έ μ΄λ¦„μ˜ ν•¨μˆ˜λΌ ν˜ΈμΆœν•΄μ•Όλ§Œ ν•œλ‹€.

IConnection을 μ΄μš©ν•΄ 각각의 Connection에 λŒ€ν•΄ λ‹¨μΌμ˜ μΈν„°νŽ˜μ΄μŠ€λΌ μ œκ³΅ν•˜κ³  IConnection을 κ΅¬ν˜„ν•˜λŠ” MySqlConnection , SqlConnection , OciConnection을 λ§Œλ“€μžλŠ” 것이 λ‚˜μ˜ μƒκ°μ΄μ—ˆλ‹€. νŒŒνŠΈλ„ˆλŠ” switchꡬ문을 μ΄μš©ν•΄ 클래슀의 상속 κ΅¬μ‘°λΌ μ—†μ• λŠ” 것과 λΉ„κ΅ν•΄μ„œ μ–΄λ– ν•œ 이점이 μžˆλŠ”κ°€μ— λŒ€ν•΄ μ§ˆλ¬Έν–ˆλ‹€. 이것은 μž₯μ‹œκ°„μ˜ ν† λ‘ μœΌλ‘œ μ΄μ–΄μ‘Œλ‹€.

λ‚˜μ˜ 생각은 λ‹€μŒκ³Ό κ°™μ•˜λ‹€.
~cpp 
class IConnection
{
    function Connect(){}
    function Execute(){}
    function Close(){}
    ...
}
 
class OdbcConnection : IConnection
{
    function Connect(){ odbc_connect(); }
    function Execute(){ odbc_do(); }
    function Close(){ odbc_close(); }
}
 
class MySqlConnection : IConnection
{
    function Connect(){ mysql_connect(); }
    function Execute(){ mysql_query(); }
    function Close(){ mysql_close(); }
 
}

νŒŒνŠΈλ„ˆμ˜ 생각은 λ‹€μŒκ³Ό κ°™μ•˜λ‹€.
ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λΌ κ΅¬ν˜„ν•˜κ³  κ΅¬ν˜„λœ ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ—μ„œ switch둜 ν˜ΈμΆœλ˜μ–΄μ•Ό ν•˜λŠ” ν•¨μˆ˜λΌ κ²°μ •ν•˜λ©΄ λœλ‹€λŠ” κ²ƒμ΄μ—ˆλ‹€.
~cpp 
class Connection
{
    function Connect()
    {
        switch(UsingDatabase){
            case Odbc: odbc_connect();
            case MySql: mysql_connect();
            ...
        }
    }
 
    function Execute()
    {
        swtich(UsingDatabase){
            case Odbc: odbc_do();
            case MySql: mysql_query();
            ...
        }
    }
}
λ‚˜λŠ” 일차적으둜 switchμ½”λ“œλΌ μ—†μ•¨ 수 μžˆλ‹€λŠ” 점을 μ„λͺ…ν–ˆλ‹€. μš°λ¦¬λŠ” Connectionν΄λž˜μŠ€κ°€ 그닀지 크게 λ°”λ€Œμ§€ μ•Šμ„ κ²ƒμ΄λΌλŠ” 것에 λŒ€ν•΄ λ™μ˜ν–ˆμ—ˆκ³  이 점을 근거둜 switchλΌ μ‚¬μš©ν•˜λŠ” 것이 μœ μ§€λ³΄μˆ˜λΌ νž˜λ“€κ²Œ ν•˜λŠ”κ°€μ— λŒ€ν•΄ μ§ˆλ¬Έν–ˆλ‹€. μ†”μ§νžˆ 이정도 μ½”λ“œλΌλ©΄ λˆ„κ΅¬λ‚˜ μˆ˜μ •ν•  수 μžˆμ„ 것이라고 μƒκ°ν•œλ‹€. 그리고 κ·Έλ ‡κ²Œ λ§Žμ€ μ‹œκ°„μ„ ν•„μš”λ‘œ ν•˜λŠ” μž‘μ—…λ„ μ•„λ‹ˆλΌκ³  μƒκ°ν•œλ‹€. νŒŒνŠΈλ„ˆλŠ” Connection을 μƒμ„±ν•˜λŠ” 뢀뢄을 include ν™”μΌλ‘œ κ΄€λ¦¬ν•˜κ³  그곳에 ν•œλ²ˆλ§Œ define문을 μž‘μ„±ν•˜λ©΄ λ¬Έμ œκ°€ μ—†λ‹€κ³  μ£Όμž₯ν–ˆλ‹€.
~cpp 
// in GetConnectionObject.inc file
 
define("UsingDatabase", Odbc);
 
function GetConnectionObject()
{
    return new Connection(); 
}

λ‚˜λŠ” 이에 λŒ€ν•΄ ν•˜λ‚˜μ˜ ν”„λ‘œμ νŠΈμ—μ„œ μ—¬λŸ¬κ°œμ˜ λ°μ΄νƒ€λ² μ΄μŠ€λΌ μ‚¬μš©ν•˜κ²Œ 될 경우 μ—¬λŸ¬κ°œμ˜ 좔가적인 νŒŒμΌλ“€μ„ 관리해야 될지도 λͺ¨λ₯Έλ‹€κ³  ν–ˆλ‹€. 그리고 new SqlConnection(); , new MySqlConnection()κ³Ό 같은 λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것이 더 직관적인 것 κ°™λ‹€κ³  μ„λͺ…ν–ˆλ‹€.

μΆ”κ°€μ μœΌλ‘œ ν† λ‘ ν–ˆλ˜ 사항 : Connection 클래슀의 μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜λ‘œ λ°μ΄νƒ€λ² μ΄μŠ€ νƒ€μž…μ„ λ„˜κ²¨μ£Όλ©΄ λœλ‹€λŠ” 것과 νŒŒμƒλœ ν΄λž˜μŠ€λΌ μƒμ„±ν•˜λŠ” 것

κΈ΄ ν† λ‘  끝에 νŒŒνŠΈλ„ˆλŠ” λ‚˜μ˜ μ˜κ²¬μ— λ™μ˜ν–ˆμ§€λ§Œ λ§Œμ•½ 계속 이런 μ†λ„λ‘œ μž‘μ—…μ΄ μ§„ν–‰λœλ‹€λ©΄ νšŒμ‚¬μ—μ„œ κ°€λ§Œμžˆμ§€ μ•Šμ„ 것이닀. (μ–΄μ œλ„ TDDλΌ μ‚¬μš©ν–ˆμ—ˆλŠ”λ° 기쑴의 μ½”λ”©μ‹œκ°„μ— λΉ„ν•΄ 3배정도 더 λŠ¦μ–΄μ‘Œλ‹€. 그리고 λ‹€ 끝내지도 λͺ»ν–ˆκ³  무엇을 λ¨Όμ € ν…ŒμŠ€νŠΈ 해야할지 κ°ˆνŒ‘μ§ˆνŒ‘ν–ˆμ—ˆλ‹€. μ²˜μŒλΆ€ν„° ν•¨μˆ˜λ‹¨μœ„ ν…ŒμŠ€νŠΈλ§Œ μ‹œλ„ν•΄μ•Όκ² λ‹€λŠ” 생각이 원인같닀.)

PP의 μž₯점은 토둠을 λ§Žμ΄ν•  수 μžˆλ‹€λŠ” 것(μ˜μ‚¬μ†Œν†΅ + μ§€μ‹κ³΅μœ ?)κ³Ό 집쀑λ ₯이 λ†’μ•„μ§„λ‹€λŠ” κ²ƒμ΄μ—ˆλ‹€. 처음이라 κ·ΈλŸ°μ§€ μ½”λ”©μ‹œκ°„λ³΄λ‹€ ν† λ‘ μ‹œκ°„μ΄ 더 κΈΈμ—ˆλ‹€. 기쑴의 λ°©μ‹λŒ€λ‘œ 혼자 μ½”λ”©ν•˜λ©΄ PPλΌ ν•˜λŠ” 것 보닀 더 λ§Žμ€ μ½”λ“œλΌ μƒμ‚°ν•  수 μžˆμ—ˆλ‹€. PP에 μ΅μˆ™ν•΄μ§€κ³  μ„œλ‘œμ˜ μ˜κ²¬μ°¨μ΄λΌ μ„이면 점점 생산속도가 λ‚˜μ•„μ§€λ¦¬λΌ μ˜ˆμƒν•΄ λ³Έλ‹€.

See Also


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:59
Processing time 0.0956 sec