페어 프로그래밍
Pair programming페어 프로그래밍은 두 명의 프로그래머가 하나의 워크스테이션에서 함께 작업하는 신속한 변화를 위한 소프트웨어 개발 기술입니다.하나는 드라이버가 코드를 쓰는 반면, 다른 하나는 옵서버 또는 [1]내비게이터가 입력된 각 코드 행을 검토합니다.두 프로그래머는 역할을 자주 바꾼다.
검토하는 동안 관찰자는 작업의 "전략적" 방향을 고려하여 개선사항과 향후 대처해야 할 문제에 대한 아이디어를 제시합니다.이는 관찰자를 안전망과 지침으로 사용하여 운전자가 현재 과제를 완료하는 "전술적" 측면에 모든 주의를 집중할 수 있도록 하기 위한 것이다.
경제학
페어 프로그래밍은 개별적으로 [2]작업하는 프로그래머에 비해 코드 전달에 필요한 인원을 늘립니다.그러나 결과적으로 발생하는 코드에는 [3]결함이 적습니다.코드 개발 시간과 함께 현장 지원 비용 및 품질 보증과 같은 다른 요소도 투자 수익률에 반영됩니다.페어 프로그래밍은 [3]이론적으로 프로그램의 결함을 줄임으로써 이러한 비용을 상쇄할 수 있습니다.
실수를 방지할 뿐만 아니라, 그 밖의 무형적 편익도 존재할 수 있다.예를 들어, 함께 일하는 동안 전화나 다른 주의를 끄는 것을 거부하거나, 합의된 간격으로 휴식 시간을 줄이거나, 전화를 돌려주기 위해 휴식 시간을 공유하는 것(단, 누군가가 대기하고 있기 때문에 신속하게 업무에 복귀하는 것) 등이 있습니다.팀원 중 한 명은 집중력이 높아져 집중력을 잃었을 때 다른 한 명을 움직이거나 깨우는데 도움을 줄 수 있으며, 이 역할은 주기적으로 변경될 수 있습니다.한 구성원은 다른 구성원은 갖지 못한 주제나 기술에 대한 지식을 가지고 있을 수 있으며, 이로 인해 솔루션을 찾거나 테스트하는 지연이 없어지거나 더 나은 솔루션을 제공할 수 있으며, 따라서 혼자 작업하는 것보다 프로그래머의 기술, 지식 및 경험을 효과적으로 확장할 수 있습니다.이러한 무형의 이익과 그 외 많은 혜택은 정확하게 측정하기가 어려울 수 있지만,[citation needed] 보다 효율적인 근로 시간에 기여할 수 있습니다.
설계 품질
두 명의 프로그래머가 있는 시스템은 다음과 같은 세 가지 이유로 문제에 대한 보다 다양한 솔루션을 생성할 수 있는 가능성이 더 높습니다.
- 프로그래머는 작업에 대해 다른 이전 경험을 가져옵니다.
- 업무와 관련된 정보를 다양한 방법으로 평가할 수 있다.
- 그들은 그들의 기능적 역할로 인해 문제와 다른 관계에 있다.
목표와 계획을 공유하기 위해 프로그래머는 서로 간에 충돌이 발생했을 때 공유된 행동 방침을 명시적으로 협상해야 합니다.그렇게 함으로써, 그들은 한 명의 프로그래머가 혼자 할 수 있는 것보다 더 많은 문제를 해결할 수 있는 방법을 고려합니다.이렇게 하면 불량한 [4]방법을 선택할 가능성이 줄어들기 때문에 프로그램의 설계 품질이 크게 향상됩니다.
만족
2000년 페어 프로그래머를 대상으로 한 온라인 조사에서 96%의 프로그래머가 혼자 프로그래밍하는 것보다 페어 프로그래밍하는 동안 작업을 더 즐긴다고 응답했습니다.게다가 95%는 프로그램을 조합할 때 일에 더 자신이 있다고 답했다.그러나 설문조사는 스스로 선택한 페어 프로그래머에 의한 것이었기 때문에 프로그램 [5]페어링을 강요당한 프로그래머에 대해서는 설명하지 않았다.
학습
업계에서도 교실에서도 2인 1조의 프로그래머 간에 지식은 끊임없이 공유됩니다.많은 자료들은 학생들이 [5]짝을 지어 프로그래밍할 때 더 높은 자신감을 보인다고 제안하고 있으며, 많은 자료들이 언어 규칙 프로그래밍에 대한 팁에서부터 전반적인 디자인 [6]기술까지 배우고 있다.「무차별 페어링」에서는, 각 프로그래머는, 1개의 파트너와 페어링 하는 것이 아니고, 팀의 다른 모든 프로그래머와 통신해 작업합니다.이것에 의해, 시스템에 관한 지식이 [3]팀 전체에 퍼집니다.페어 프로그래밍을 통해 프로그래머는 파트너의 코드를 검토하고 피드백을 제공할 수 있으며, 이는 자신의 학습 [6]활동을 위한 모니터링 메커니즘을 개발하는 데 필요한 자체 능력의 향상에 필요합니다.
팀 구성 및 커뮤니케이션
페어 프로그래밍을 사용하면 팀원들이 신속하게 공유할 수 있기 때문에 서로 숨겨진 의제를 가질 가능성이 낮아집니다.이것에 의해, 2인 1조의 프로그래머가 보다 간단하게 커뮤니케이션을 할 수 있게 됩니다.이로 인해 프로젝트 내 통신 대역폭과 빈도가 증가하여 팀 내 전반적인 정보 흐름이 증가합니다."[3]
스터디
쌍 프로그래밍에는 경험적 연구와 메타 분석이 모두 있다.경험적 연구는 생산성의 수준과 코드의 품질을 검사하는 경향이 있는 반면 메타 분석은 테스트와 출판 과정에 의해 도입된 편견에 초점을 맞출 수 있다.
메타 분석 결과, 쌍은 일반적으로 혼자 작업하는 프로그래머보다 더 많은 설계 대안을 고려하고, 보다 단순하고 유지보수가 용이한 설계에 도달하며, 설계 결함을 조기에 발견합니다.그러나 이 연구결과는 "쌍 프로그래밍에 관한 발표된 연구들 사이의 출판 편중 징후"에 의해 영향을 받았을 수 있다는 우려를 제기했다.그것은 "쌍 프로그래밍이 균일하게 유익하거나 [7]효과적이지 않다"고 결론지었다.
페어 프로그래머는 솔로 프로그래머보다 작업을 더 빨리 완료할 수 있지만, 총 인원은 증가합니다.[2]관리자는 작업 완료 시간을 단축하고 테스트 및 디버깅 시간을 단축하는 동시에 코딩 비용을 높여야 합니다.이러한 요소의 상대적 가중치는 프로젝트 및 태스크에 따라 다를 수 있습니다.
페어링의 이점은 프로그래머가 시작하기 전에 완전히 이해하지 못하는 작업, 즉 창의성과 정교함을 요구하는 도전적인 작업, [2]전문가에 비해 초보자에게 가장 큰 이점이 있습니다.페어 프로그래밍은 복잡한 프로그래밍 작업에서 높은 품질과 정확성을 달성하는 데 도움이 될 수 있지만 개발 노력(비용)도 [7]크게 증가할 것입니다.
쌍이 이미 충분히 이해하고 있는 심플한 태스크에서는 페어링을 실시하면 [2][8]생산성이 순감합니다.코드 개발 시간을 단축할 수 있을 [7]뿐만 아니라 프로그램의 품질을 떨어뜨릴 위험도 있습니다.초보-초보 짝짓기를 지도할 [9]멘토가 충분히 없는 상태에서 사용해도 생산성이 떨어질 수 있습니다.
실적불량 지표
페어가 정상적으로 [opinion]동작하고 있지 않은 것을 나타내는 인디케이터가 있습니다.
- 멤버 중 한 명이 물리적으로 키보드에서 떨어져 있거나 이메일에 접속하거나 심지어 잠든 경우 해제될 수 있습니다.
- "마스터 보기" 현상은 한 멤버가 다른 멤버보다 경험이 많을 때 발생할 수 있습니다.이 상황에서 하위 구성원은 코딩 활동의 대부분을 상위 구성원에 맡기는 옵서버 역할을 맡을 수 있습니다.이는 쉽게 분리로 이어질 수 있습니다.
페어링의 종류
- 전문가 – 전문가
- 전문가와 전문가의 조합은 생산성을 극대화하기 위한 확실한 선택으로 보일 수 있으며, 뛰어난 결과를 얻을 수 있지만, 양측 모두 확립된 [2]관행에 의문을 제기할 가능성이 낮기 때문에 문제를 해결하기 위한 새로운 방법에 대한 통찰력을 얻을 수 없는 경우가 많습니다.
- 엑스퍼트 –
- 전문가와 혁신의 조합은 전문가가 초보자에게 조언할 수 있는 많은 기회를 창출합니다.초보자가 기존 관행에 의문을 제기할 가능성이 높기 때문에 이 조합은 새로운 아이디어를 도입할 수도 있습니다.이제 확립된 관행을 설명해야 하는 전문가는 또한 이에 의문을 제기할 가능성이 더 높습니다.그러나 이 짝짓기에서는 겁에 질린 초보자가 수동적으로 마스터를 지켜보며 의미 있는 참여를 주저할 수 있다.또한, 일부 전문가들은 건설적인 초보자들의 [10]참여를 허용하는 데 필요한 인내심을 가지고 있지 않을 수도 있다.
- 초보자-초보
- 초보자-초보 짝짓기는 초보자 두 명이 독립적으로 일하는 것보다 훨씬 더 나은 결과를 낼 수 있지만, 초보자에게는 적절한 역할 [3]모델 없이 좋은 습관을 기르기 어렵기 때문에 일반적으로 이 관행이 권장되지 않는다.
원격 쌍 프로그래밍
가상 쌍 프로그래밍 또는 분산 쌍 프로그래밍이라고도 하는 원격 쌍 프로그래밍은 두 프로그래머가 서로 다른 [11]위치에 있는 쌍 프로그래밍으로, 공동 실시간 편집기, 공유 데스크톱 또는 원격 쌍 프로그래밍 IDE 플러그인을 통해 작동합니다.원격 페어링은 대면 페어링에서는 발생하지 않는 어려움으로 이어집니다.예를 들어 조정에 시간이 더 많이 걸리고 인덱스 카드와 같은 "경량" 태스크 추적 툴에 의존하며, 언어 통신이 두절되어 [12]"키보드를 누가 가지고 있는지에 대한 혼란과 충돌이 발생합니다.
도구 지원은 다음과 같이 제공됩니다.
- 전체 화면 공유 소프트웨어[13][14][self-published source?]
- 터미널 멀티플렉서
- 전용 분산 편집 도구
- 음성 채팅 프로그램 또는 VoIP 소프트웨어는 화면 공유 소프트웨어가 양방향 오디오 기능을 제공하지 않을 때 유용합니다.헤드셋을 사용하면 프로그래머의 손이 자유로워집니다.
- 클라우드 개발 환경
- 협업 쌍 프로그래밍 서비스
「 」를 참조해 주세요.
레퍼런스
- ^ Williams, Laurie (February 19–20, 2001). Integrating pair programming into a software development process. 14th Conference on Software Engineering Education and Training. Charlotte. pp. 27–36. doi:10.1109/CSEE.2001.913816. ISBN 0-7695-1059-0.
One of the programmers, the driver, has control of the keyboard/mouse and actively implements the program. The other programmer, the observer, continuously observes the work of the driver to identify tactical (syntactic, spelling, etc.) defects, and also thinks strategically about the direction of the work.
- ^ a b c d e Lui, Kim Man (September 2006). "Pair programming productivity: Novice–novice vs. expert–expert" (PDF). International Journal of Human–Computer Studies. 64 (9): 915–925. CiteSeerX 10.1.1.364.2159. doi:10.1016/j.ijhcs.2006.04.010. Archived from the original (PDF) on 2011-07-20. Retrieved 2012-11-18.
- ^ a b c d e Cockburn, Alistair; Williams, Laurie (2000). "The Costs and Benefits of Pair Programming" (PDF). Proceedings of the First International Conference on Extreme Programming and Flexible Processes in Software Engineering (XP2000).
- ^ Flor, Nick V.; Hutchins, Edwin L. (1991). "Analyzing Distributed Cognition in Software Teams: A Case Study of Team Programming During Perfective Software Maintenance". In Koenemann-Belliveau, Jürgen; Moher, Thomas G.; Robertson, Scott P. (eds.). Empirical Studies of Programmers: Fourth Workshop. Ablex. pp. 36–64. ISBN 978-0-89391-856-9.
- ^ a b Williams, Laurie; Kessler, Robert R.; Cunningham, Ward; Jeffries, Ron (2000). "Strengthening the case for pair programming" (PDF). IEEE Software. 17 (4): 19–25. CiteSeerX 10.1.1.33.5248. doi:10.1109/52.854064.
- ^ a b Williams, Laurie; Upchurch, Richard L. (2001). "In support of student pair programming". ACM SIGCSE Bulletin. 33 (1): 327–31. doi:10.1145/366413.364614.
- ^ a b c Hannay, Jo E.; Tore Dybå; Erik Arisholm; Dag I.K. Sjøberg (July 2009). "The Effectiveness of Pair Programming: A Meta-Analysis". Information and Software Technology. 51 (7): 1110–1122. doi:10.1016/j.infsof.2009.02.001.
- ^ Arisholm, Erik; Hans Gallis; Tore Dybå; Dag I.K. Sjøberg (February 2007). "Evaluating Pair Programming with Respect to System Complexity and Programmer Expertise". IEEE Transactions on Software Engineering. 33 (2): 65–86. doi:10.1109/TSE.2007.17. Archived from the original on 2010-10-29. Retrieved 2008-07-21.
- ^ Stephens, Matt; Doug Rosenberg. "Will Pair Programming Really Improve Your Project?". Retrieved 28 May 2011.
- ^ Williams, L. & Kessler, R. (2003). Pair Programming Illuminated. Boston: Addison-Wesley Professional. ISBN 9780201745764.
- ^ Flor, Nick V. (2006). "Globally distributed software development and pair programming". Communications of the ACM. 49 (10): 57–8. doi:10.1145/1164394.1164421.
- ^ Schümmer, Till; Stephan Lukosch (September 2009). "Understanding Tools and Practices for Distributed Pair Programming" (PDF). Journal of Universal Computer Science. 15 (16): 3101–3125. Retrieved 2010-04-30.
- ^ Agile Ajax: Wayback[self-published source] Machine에서 VNC와의 페어 프로그래밍 2008-04-02 아카이브
- ^ 페어 프로그래밍– Ultimate Setup 및 기타 옵션.– Jonathan Cogley의 블로그
외부 링크
- Wiki How: 프로그램 페어링 방법 가이드.페어 프로그래밍을 유효하게 하는 방법에 대한 일반적인 지식이 포함되어 있습니다.
- 튜플:페어 프로그래밍 가이드 쌍 프로그래밍 가이드로 패어링 스타일, 안티패터 등을 다룹니다.비디오의 페어링의 예를 포함합니다.
- c2: 페어 프로그래밍
- c2: Pair Programming Pattern
- c2: 페어 회전 주파수