תכנות בזוגות

תכנות בזוגות היא טכניקה בפיתוח תוכנה זריז שבה זוג מתכנתים עובדים יחדיו מול תחנת עבודה אחת. האחד מקליד את הקוד בזמן שהשני סוקר כל שורת קוד בזמן שהיא מוקלדת. האדם שמקליד מכונה "הנהג", הוא מחזיק במקלדת ובעכבר ומבצע בפועל את עבודת התכנות. האדם שסוקר את הקוד מכונה "הצופה" או "הנווט". הוא אחראי על איתור תקלות (תחביריות, לוגיות וכו') בקוד, שקילת הכיוון האסטרטגי של העבודה, הוגה רעיונות לשיפור וצופה בעיות עתידיות שתדרושנה מענה. הדבר מאפשר ל"נהג" לרכז את כל תשומת לבו בהיבט הטקטי של השלמת המשימה הנוכחית, תוך כדי שימוש ב"נווט" כרשת ביטחון וכמדריך. שני המתכנתים מחליפים תפקידים ביניהם באופן תכוף. את הזוגות מחליפים מדי פעם (תכנות מעורב – Promiscuous Pairing), כדי שכל המתכנתים יכירו כמה שיותר קוד, ואילו במבט על קוד חדש יהיה מי שיחנוך את התוכניתן שאינו מכיר את הקוד. מחקרים מסוימים מצאו שמתכנתים העובדים בזוגות מייצרים תוכניות קצרות יותר, עם תכנון טוב יותר ופחות באגים מאשר מתכנתים שעובדים לבד. ידע עובר בין זוג המתכנתים, ככל שהם עובדים יחדיו, הם חולקים ידע על מאפייני המערכת ולומדים טכניקות תכנות אחד מהשני. עם תכנות מעורב שבו כל מתכנת עובר בין כל שאר המתכנתים בצוות, ידע על המערכת מתפשט בין כל חברי הצוות וכך מוקטן הסיכון הניהולי כאשר מתכנת עוזב את הצוות. ציוות בדרך כלל גורר רמת משמעת גבוהה יותר וניהול זמן טוב יותר. הסיכוי נמוך יותר לכך שהמתכנתים יוותרו על כתיבת בדיקות יחידה, יבזבזו זמן בגלישה באינטרנט, יבדקו דואר אלקטרוני או ״יעגלו פינות״ כאשר הם עובדים עם בן זוג. בן הזוג שומר על השותף שלו "ישר". אנשים מסתייגים יותר מלהפריע לזוג מאשר להפריע לאדם שעובד לבד. יתרונות נוספים כוללים מורל גבוה יותר וביטחון גדול יותר בנכונות הקוד. אף על פי שבתכנות בזוגות כתיבת הקוד מסתיימת מהר יותר מאשר אצל מתכנת העובד לבד, סך זמן המתכנת (מספר המתכנתים X זמן עבודה) עולה. מנהל צריך לאזן בין השלמה מהירה יותר של העבודה וירידת זמן בדיקות וחיפוש באגים לעומת עלות גבוהה יותר של ייצור קוד. המשקל היחסי של גורמים אלו יכול להשתנות מפרויקט לפרויקט וממשימה למשימה. התועלת גדולה יותר במשימות שעדיין אינן מובנות למתכנתים, הדורשות יותר יצירתיות, אתגר ותחכום. במשימות פשוטות, שבהן הזוג מבין לגמרי את המשימה, ציוות גורר ירידה בתפוקה. בנוסף, תכנות שנעשה באמצעות שניים יכול לגרום להסבת תשומת לב בשל חוסר ריכוז, בעבור עובדים שמתקשים להתרכז כשהם מצויים עם אדם נוסף. ידוע גם כתכנות בזוגות מדומה או תכנות בזוגות מחולק. בתכנות בזוגות מרוחק שני המתכנתים נמצאים במיקומים שונים ועובדים באמצעות עורך זמן-אמת משותף, שולחן עבודה משותף או פלאג אין. ציוות מרוחק מציג קשיים שאינם קיימים בציוות פנים אל פנים, כמו עיכובים נוספים בתיאום, תלות גדולה יותר בכלים "כבדי משקל" למעקב אחר משימות במקום כלים "קלי משקל" כמו כרטיסיות אינדקס, ואובדן תקשורת בלתי מילולית הגורם לבלבול ועימותים בשל דברים כמו "אצל מי המקלדת". בתכנות בזוגות מסוג זה, ה"צופה" כותב בדיקת יחידה שנכשלת, ה"נהג" משנה את הקוד כך שיעבור את הבדיקה, ה"צופה" כותב בדיקת יחידה חדשה שנכשלת וכן הלאה. המעגל נמשך כל עוד ה"צופה" מסוגל לכתוב בדיקות יחידה שנכשלות. תכנות זה לוקח יותר זמן מאשר שהוערך בתוכנית Extreme Programming הנדסת תוכנה מדיה וקבצים בנושא תכנות בזוגות בוויקישיתוף איך לתכנת בזוגות, מאתר wikiHow Williams, Laurie (2001). "Integrating Pair Programming into a Software Development Process" (PDF). 14th Conference on Software Engineering Education and Training: abstract."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." 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). Williams, Laurie; Kessler, Robert (2003). Pair Programming Illuminated. Addison-Wesley. p. 29. ISBN 0-201-74576-3. "Knowledge is constantly being passed between partners, from tool usage tips to design and programming idioms. The partners take turns being the teacher and the student. Even unspoken skills and habits cross partners." Williams, Laurie; Kessler, Robert (2003). Pair Programming Illuminated. Addison-Wesley. p. 23. ISBN 0-201-74576-3. "Two people working in a pair treat their shared time as more valuable. They tend to cut phone calls short; they don't check e-mail messages or favorite Web pages; they don't waste each other's time." (Ward's Wiki 1999, contributed by Paul Chisholm). Beck, Kent (2000). Extreme Programming Explained. Addison-Wesley. pp. 102."Under stress, people revert. They will skip writing tests. They will put off refactoring. They will avoid integrating. With your partner watching, though, chances are that even if you feel like blowing off one of these practices, your partner won't." Williams, Laurie; Kessler, Robert (2003). Pair Programming Illuminated. Addison-Wesley. p. 24. ISBN 0-201-74576-3."With any software development process there is a constant struggle to get the software engineers to follow the prescribed process. A benefit of pair programming is improved adherence to procedures and standards." Williams, Laurie; Kessler, Robert (2003). Pair Programming Illuminated. Addison-Wesley. p. 24. ISBN 0-201-74576-3."Others see us already working with someone else, and they leave us alone. The net effect is that we have bigger blocks of uninterrupted time, which is good for our mental state and our progress. It also reduces task-switching, which for some people generates a huge overhead." Williams, Laurie; Kessler, Robert (2003). Pair Programming Illuminated. Addison-Wesley. p. 21. ISBN 0-201-74576-3. "In our recent Web survey, we asked, 'What have you found beneficial about pair programming?' The single most common response was, 'It's a lot more fun!'" Lui, Kim Man; Keith C. C. Chan (בספטמבר 2006). "Pair programming productivity: Novice-novice vs. expert-expert" (PDF). International Journal of Human-Computer Studies. 64 (9): 915–925. doi:10.1016/j.ijhcs.2006.04.010. נבדק ב-2008-07-21. {{cite journal}}: (עזרה) Flor, Nick (2006). Globally distributed software development and pair programming. Communication of the ACM, 49, 57–58. Schümmer, Till; Stephan Lukosch (בספטמבר 2009). "Understanding Tools and Practices for Distributed Pair Programming" (PDF). Journal of Universal Computer Science. 15 (16): 3101–3125. נבדק ב-2010-04-30. {{cite journal}}: (עזרה) "PairProgrammingPingPongPattern". c2.com.