νλμ μ»΄ν¨ν°μμ λμ΄μ μλ‘ μμνλ©΄μ λ²κ°μκ°λ©° νλ‘κ·Έλλ°μ νλ λ°©λ².
Contents
1. Pair Programming Approach ¶
PairProgramming μ μ μ©ν΄λ³΄λ λ°©λ², μ€νμΌ λ±λ±
- Pair Refactoring - κΌ μμ€ μ½λκ° μλλλΌλ μν€ νμ΄μ§μ λν λ¬Έμꡬ쑰쑰μ μ νλ κ²½μ°μλ μ μ©ν μ μλ€. νΉν, ν΄λΉ ν λ‘ μ΄ λ²μ΄μ§λ€ μλ‘ μΌλ‘ λλμ΄μ‘μ κ²½μ°, κ° μ견 μ§μ§μλ€μ΄ Pair λ‘ λ¬Έμꡬ쑰쑰μ μ ν λ μ΄μ©ν μ μλ€.
- 5λΆ Pair-Change - μ₯κ³Ό λ¨μ΄ μ‘΄μ¬νκΈ΄ νλλ°. μ₯μ μΌλ‘ λ³Έλ€λ©΄, μμ μ νλ‘κ·Έλλ° μ°¨λ‘κ° λΉ¨λ¦¬ λμμ€λ©΄μ Pair λΌλ¦¬μ Feedback μ΄ λΉ λ₯΄λ€λ μ μμ μ§μ€λκ° λλ€λ μ μ΄ μλ€. λ¨, Junior μ κ²½μ° μμ μ μ¬κ³ κ° μ±μν΄μ§ μκ°μ λ°©ν΄ν μ μλ€. μ΄ κ²½μ° 5λΆμΌλ‘ μμ, μ μ°¨μ μΌλ‘ Change μ κΈ°κ°μ λλ €μ£Όλ λ°©λ²μ΄ μλ€.
2. ν¨κ³Ό ¶
- μ½λ μλ¬μ¨μ κ°μ - λ΄κ° κ°κ³Όνκ³ λμ΄κ°κΈ° μ¬μ΄ μλ¬λ€μ λν΄μ μ§μ μ΄ λΉ λ₯΄λ€.
- Protocol Analysis, μ§μμ μ λ¬ -
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 λ₯Ό νλ κ² μμ²΄κ° μλ‘μ΄ νμ΅κ²½νμ΄ λλ€.
4. PairProgramming κ²½νκΈ° ¶
4.1. λλ¬Έμλ² νλ‘κ·Έλ¨ κ°λ°μ€ ¶
μ§νν μ¬λ : κ°μμ², μ€μν
λλ¬Έμλ² νλ‘κ·Έλλ° νμ μΈμμΈκ³μ©μΌλ‘ μ΄μ©λμμλ€. PPλ₯Ό μ£Όλ‘ νκ³ νλλ²μ VPPλ₯Ό νλ€. ν΄λΉ μμ€λ₯Ό κ°μ΄ λ§λ€μ΄κ°λ©΄μ κΈ°μ‘΄μ νλ‘κ·Έλ¨μ μ€λͺ νλ€.
λλ¬Έμλ² νλ‘κ·Έλλ° νμ μΈμμΈκ³μ©μΌλ‘ μ΄μ©λμμλ€. PPλ₯Ό μ£Όλ‘ νκ³ νλλ²μ VPPλ₯Ό νλ€. ν΄λΉ μμ€λ₯Ό κ°μ΄ λ§λ€μ΄κ°λ©΄μ κΈ°μ‘΄μ νλ‘κ·Έλ¨μ μ€λͺ νλ€.
4.1.1. μ κΈ°λ λ¬Έμ μ & ν΄κ²°λ² ¶
Expert : Junior . μ¦, ν΄λΉ λΆμΌμ λν μ λ¬Έκ° : μ΄μ¬μ μ λ¬Έμ μ΄λ€. μ΄ κ²½μ° κ·Έ μ§νμ΄ λ¦μ΄μ§ μ μλ€. (Expert : Expertλ μ΅κ³ μ ν¨μ¨μ±μ κ°μ§λ€. λ¬Όλ‘ μ΄κ²λ μ΄λ¦° λ§μμ λ°νμΌλ‘ νλ€. Junior : Junior λ λλ¦λλ‘(?) 빨리 μμ§μΈλ€. (μ λλ‘ μμ§μΈλ€λ 보μ₯μ λͺ»νλ€. -_-;)) κ·Έλ¦¬κ³ Expertκ° ν΄λΉ νλ‘κ·Έλλ°μ λν λ΅ (μ½λ)μ μ΄λ―Έ μκ³ μλ κ²½μ° Expertμ μ§μ€λμ κΈ΄μ₯κ°μ ν΄μΉκ² λλ€.
μ΄ λμλ Expertλ λμ§λ§κ³ (-_-;) Observerμ μν μ μΆ©μ€νλ€. Junior μ νλ°νλ λΆλΆμ 보면μ μ 체 νλ‘κ·Έλ¨ λ΄μ κ΄κ³μ λΉκ΅ν΄λ³΄κ±°λ, 'μμ μ΄λΌλ©΄ μ΄λ»κ² ν΄κ²°ν κΉ?' λ± λ¬Έμ λ₯Ό μ κΈ°ν΄λ³΄κ±°λ, reference, κ΄λ ¨ μμ€λ₯Ό μ€λΉν΄μ£Όλ λ°©λ²μ΄ μλ€.
μ΄ λμλ Expertλ λμ§λ§κ³ (-_-;) Observerμ μν μ μΆ©μ€νλ€. Junior μ νλ°νλ λΆλΆμ 보면μ μ 체 νλ‘κ·Έλ¨ λ΄μ κ΄κ³μ λΉκ΅ν΄λ³΄κ±°λ, 'μμ μ΄λΌλ©΄ μ΄λ»κ² ν΄κ²°ν κΉ?' λ± λ¬Έμ λ₯Ό μ κΈ°ν΄λ³΄κ±°λ, reference, κ΄λ ¨ μμ€λ₯Ό μ€λΉν΄μ£Όλ λ°©λ²μ΄ μλ€.
λ νλμ λ¬Έμ μ μΌλ‘ μ κΈ°λ κ²μ, Junior κ° Expertμ κΆμμ λ릴 μ μλ€λ κ²μ΄λ€. Junior λ μ§λ¬Έμ μ©κ°ν΄μΌ νλ€. Expertλ λ΅λ³μ μΈμν΄μλ μλλ€. μ΄λ¦° λ§μμ΄ νμν μΌμ΄λ€. (Communication κ³Ό Courge λ XP μ λλͺ©μ΄λ€. ^^)
4.1.2. λ°κ²¬λ μ₯μ ¶
μ λ¬Έκ°λΌ νλλΌλ νλ‘κ·Έλλ°μ μ€λ ₯κ³Ό λ€λ₯Έμ¬λμκ² λ΅λ³ν΄μ£Όλ λ₯λ ₯μ λ€λ₯΄λ€. 컀λ€λμΌμ΄μ
λ₯λ ₯μ μ€μ λλ©μΈμ λν μ§μκ³Όλ λ€λ₯Ό μ μλ€. Expert λ Junior μκ² μ€λͺ
μ ν΄μ€μΌλ‘μ κΈ°μ‘΄μ μ§μμ λν μ 리λ₯Ό ν΄ λκ° μ μλ€. Junior λ νΌμμ μ½μ§νλ κ²λ³΄λ€ λ 빨리 νμν μ§μμ λν΄ μ κ·Όν μ μλ€.
4.2. TFP μ°μ΅μ€ ¶
μ§νν μ¬λ : κ°μμ², λ°μ§ν
κ°λ¨ν μλ λ‘κ·Έ μκ³λ₯Ό λ§λλ νλ‘κ·Έλ¨μ΄μλ€. MFC + CppUnit λ‘ μμ νλ€.
κ°λ¨ν μλ λ‘κ·Έ μκ³λ₯Ό λ§λλ νλ‘κ·Έλ¨μ΄μλ€. MFC + CppUnit λ‘ μμ νλ€.
4.2.1. μ κΈ°λ λ¬Έμ μ & ν΄κ²°λ² ¶
- Pair μ μ§νμ μ΄λμ΄κ°λ κ² - νλ‘κ·Έλλ°μ νλ¦μ΄λΌκ³ ν΄μΌ ν κΉ. λμμΈμ μ΄λμ λ μ μ λλ‘ λ§μΆκ³ μ΄λ ν λ¬Έμ λ₯Ό ν κ²μΈκ°μ λν μ½κ°μ μ μ΄ νμν κ² κ°λ€. μ΄ κ²½μ°μλ μ΄λ° λμμΈμ΄ νμ νμλ€λ μ½μ μ΄ μμλ€. 'μ 체μ μΈ κ΄μ μμ 무μ무μμ νλ©΄ νλ‘κ·Έλ¨μ΄ μμ±λ κ²μ΄λ€' λΌλ κ². UserStory λ§ μκ°νκ³ EnginneringTask λ₯Ό κ°κ³Όν κ²μ΄ ν° λ¬Έμ μλ€. (κ·Έλ EnginneringTask μ λν κ°λ
μ΄ μμμλ€λ. μ΄λμ ν¨λΆλ‘ μ£Όμλ§ μ§μ. --; μ¬κ³ λ₯Ό νμ μ¬κ³ λ₯Ό. -_-)
- ExtremeProgrammingPlanning μ΄λΌλ μ±
μ 보면 ν΄κ²°μ±
μ ꡬν μ μμ κ² κ°λ€. (Xp μ±
λ€μ μ₯μ μ΄μ λ¨μ μ΄λΌλ©΄ μμ λκ»μ λΆμ±
μ΄λ €λ.. --a)
- ExtremeProgrammingPlanning μ΄λΌλ μ±
μ 보면 ν΄κ²°μ±
μ ꡬν μ μμ κ² κ°λ€. (Xp μ±
λ€μ μ₯μ μ΄μ λ¨μ μ΄λΌλ©΄ μμ λκ»μ λΆμ±
μ΄λ €λ.. --a)
- Pair μ λΆλ°° - TFPλ₯Ό 곡λΆνλλκ³ μμν κ²μ΄μλμ§λΌ, μλμ μΌλ‘ CppUnit μ μ΅μνμ§ μμ μ¬λμκ² μ½λ©μ μ£Όλνκ² νλ€. ν 1μ£ΌμΌμ λ λλ νλ‘μ νΈλΌλ©΄ Juniorλ‘ νμ¬κΈ κ²½νμ μκ² ν¨μΌλ‘μ¨ μ€νλ € μ₯μ μΌλ‘ μμ©ν μλ μμ κ² κ°λ€. νμ§λ§, μμ μ μ νκ² λΆλ°°λ₯Ό νμμ΄μΌ ν κ² κ°λ€.
- μ§λ¨ μ½μ§. --; - μ΄κ²μ ν€νλμ΄λΌκ³ 보λ κ²μ΄. -_-;; Test Code μμ λμ΄ λΌλμ ꡬνλ 곡μμ κ±°κΎΈλ‘ μ°κ³ 'μ κ°μ΄ ν리λ€κ³ νλκ±°μΌ!' νλ©° 1μκ°μ μ½μ§νλ€λ νλ¬Έμ΄ μλ€λ. --;
- νμ§λ§ UnitTestλ κ·Έλ λ―μ΄, λ§μ μ₯μ μ κ°μ§ λ°©λ²μ μλ²½νμ§ μλ€λ μ΄μ λ‘ μ¬μ©νμ§ μλλ€λ κ²μ μμ¬μ΄ μΌμΌ κ²μ΄λ€.
- νμ§λ§ UnitTestλ κ·Έλ λ―μ΄, λ§μ μ₯μ μ κ°μ§ λ°©λ²μ μλ²½νμ§ μλ€λ μ΄μ λ‘ μ¬μ©νμ§ μλλ€λ κ²μ μμ¬μ΄ μΌμΌ κ²μ΄λ€.
- μμ§μ ν¨μ¨μ±μ΄.. - μΌμ’
μ Learning Time μ΄λΌκ³ ν΄μΌ ν κΉ? λλΆλΆ μ€νμμ λλλ€λ μ . ν½ νκ³ μ²μλΆν° ν¨μ¨μ±μ κ·Ήλν ν μ μμ κ²μ΄λ€. μ°Έκ³ λ‘ μ΄λλ μλ λ‘κ·Έ μκ³ λ§λλλ° κ±°μ 3μκ°μ΄ κ±Έλ Έλ€. Man-Hour λ‘ μΉλ©΄ 6μκ°μ΄ λλ€.
4.2.2. λ°κ²¬λ μ₯μ ¶
μ§μ€λλ κ±°μ μ΅κ³ λΌλ μ ! (μ΄ μ μμ λμ΄ μλ‘ λμλ₯Ό νλ€.) νμ νΌμ νλ‘κ·Έλλ°ν λλ μ€κ°μ μΉμνμ νλ λ± μ£Όμκ° μ°λ§ν΄μ§λ κ²½μ°κ° λ§μλ€. νμ§λ§ μ΄ Pair μ€μλ μ¬λλ€μ΄ νλ‘κ·Έλλ°κ³Ό ν λ‘ μλ§ μ λ
ν μ μμλ€. (μ€νλ € μ€κ°μ€κ° μΌλΆλ¬ 10λΆ ν΄μμ λμ΄μΌ νλ€.)
TestFirstProgramming κ³Ό PairProgramming μ μ§μ€λμ κ΄ν΄μλ κ°μ₯ νλ₯ν μ νμΈ κ² κ°λ€. (λ¨, Pairμμ λ΄ν©νμκ° μ΄λ£¨μ΄μ§λ©΄ κ³€λνκ² λ€. -_-;)
4.3. bioinfomatix νλ‘μ νΈμ€ ¶
μ§νν μ¬λ : κ°μμ², bioinfomatix μμ μΌνμλ λΆλ€
νμ΅λͺ©μ μ΄ μλ μ€μ§μ μΈ κ°λ°μ μν PairProgramming μΌλ‘λ μ²μμΈλ― νλ€. 2μ£Όκ° κ²©μΌλ‘ μΌμ νμλλ°, XP μ€νμΌλ‘ νλ‘μ νΈλ₯Ό μ§ννμλ€.
νμ΅λͺ©μ μ΄ μλ μ€μ§μ μΈ κ°λ°μ μν 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 λ¬Έμ λ₯Ό νΈλ μΌμ νλ€.
ProgrammingContest μ μλ K-In-A-Row λ¬Έμ λ₯Ό νΈλ μΌμ νλ€.
4.4.1. μ κΈ°λ λ¬Έμ μ ¶
- μμ½λ€λ©΄.. νλν°; ν;;; λ΅μ΄ μλμλ€. --;
- λν - μλλ°©μ΄ 'μκ³ μμ κ²μ΄λ€' λΌλ μ λ μ€μ λ λͺ¨λ₯΄κ³ μλ κ²½μ°κ° λ§λ€λΌλ μκ°μ ν΄λ³Έλ€. μΉνμΉκ΅¬ μ΄λλΌλ, μλλ°©μ μ μλ€λΌκ³ μκ°νλλΌλ, μλλ‘λΆν° μ½μ§ λͺ»ν μ 보λ λ무λ λ§κΈ°μ.
- 보κ°λ²μ μ€μ°¨λ₯Ό μ€μ΄λ €λ©΄ Control Point λ₯Ό λλ¦¬κ³ , κ°κ²©μ μ’νμΌ ν κ²μ΄λ€. μ¦μ λνλ κ·Έ μμ²΄κ° λΆνμΌμ§ λͺ¨λ₯΄κ² μ§λ§, λν μ€ν΄λ₯Ό μ€μΌκ²μ΄λ€.
- 보κ°λ²μ μ€μ°¨λ₯Ό μ€μ΄λ €λ©΄ 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 (νμ§λ§, μΌκ΅΄ μ보μ΄λ μ¬λμ΄λΌ νλλΌλ μ§ν¬ κ²μ μ§ν€μ.!)
λ·λ―Έν , VNC λ±μ κ°λ° νλ‘κ·Έλ¨μ 곡μ ν μ μλ νλ‘κ·Έλ¨κ³Ό μμ±μ±ν λ±μΌλ‘ Virtual PairProgrammingμ ν μ μλ€. (μ€.. μ’μμ§ μΈμ~) λ¨,PairProgramming μ λΉν΄ μμ¬μ΄μ λ€μ΄ μλ€. (κ΄λ ¨ μ± λ€μ μ°Ύμμ 보μ¬μ£Όμ§ λͺ»νλ€λ κ² λ±λ±) λμ€μλ PCμΉ΄λ©λΌμ μ€μΊλ λ±λ± μ΄μ©ν μ μμ§ μμκΉ.

6. PP κ²½ννκΈ° ¶
- μΈμ΄ : PHP
- ννΈλ : μ§μ₯λλ£
- λλΌμ΄λ² : Benghun
- ꡬνκ³Όμ : λ°μ΄νλ² μ΄μ€ ν΄λμ€(Database.inc)
λλ .NETμ System.Dataμ ꡬ쑰λ₯Ό λ³΄κ³ μ¦μ PHPμ μ μ©μν€κ³ μΆμ΄μ‘λ€. ASP.NETμλ SqlConnection , OdbcConnection , OleDbConnectionμ μ κ³΅ν΄ μ€λ€. μ΄ ν΄λμ€λ€μ μ μ¬μ©νλ©΄ DataTierμ μ’ λ₯κ° λ°λμ΄λ μ½λμ μμ μ μ΅μν μν¬ μ μλ€. PHPλ μ¬λ¬κ°μ§ μ’ λ₯μ λ°μ΄νλ² μ΄μ€ κ΄λ ¨ν¨μλ₯Ό μ 곡ν΄μ€λ€. μ΄λ ν λ°μ΄νλ² μ΄μ€λ₯Ό μ¬μ©νλλμ λ°λΌ λμΌν κΈ°λ₯μ νλ λ€λ₯Έ μ΄λ¦μ ν¨μλ₯Ό νΈμΆν΄μΌλ§ νλ€.
~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(); }
See Also
- http://pairprogramming.com - κ΄λ ¨ μ¬μ΄νΈ
- http://www.objectmentor.com/publications/xpepisode.htm - Robert C.Martin κ³Ό Robert S Koss μ΄ λννλ©΄μ Pairλ₯Ό νλ μμ .
- http://c2.com/cgi/wiki?PairProgramming - 'PairProgramming Pattern' μ΄λΌκ³ μ¨λμ κ²μ΄ μ¬λ―Έμλ€. μ΄λμ 'ν¨ν΄ν' ^^;
- PairProgrammingν λ‘ , PairProgrammingForGroupStudy
PairProgramming,
PairProgramming,
PairProgramming
- http://no-smok.net/nsmk/PairProgramming