תכנות בזוגות

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

תכנות בזוגות הינה טכניקה בפיתוח תוכנה זריז בה זוג מתכנתים עובדים יחדיו מול תחנת עבודה אחת. האחד מקליד את הקוד בזמן שהשני סוקר כל שורת קוד בזמן שהיא מוקלדת‏[1]. האדם שמקליד מכונה "הנהג", הוא מחזיק במקלדת ובעכבר ומבצע בפועל את עבודת התכנות.
האדם שסוקר את הקוד מכונה "הצופה" או "הנווט". הוא אחראי על איתור תקלות (תחביריות, לוגיות וכו') בקוד, שקילת הכיוון האסטרטגי של העבודה, הוגה רעיונות לשיפור וצופה בעיות עתידיות שתדרושנה מענה. הדבר מאפשר ל"נהג" לרכז את כל תשומת לבו להיבט הטקטי של השלמת המשימה הנוכחית, תוך כדי שימוש ב"נווט" כרשת ביטחון וכמדריך. שני המתכנתים מחליפים תפקידים ביניהם באופן תכוף.
את הזוגות מחליפים מדי פעם (תכנות מעורב - Promiscuous Pariing), על מנת שכל המתכנתים יכירו כמה שיותר קוד, ואילו במבט על קוד חדש יהיה מי שיחנוך את התוכניתן שאינו מכיר את הקוד.

יתרונות[עריכת קוד מקור | עריכה]

מחקרים מסוימים מצאו שמתכנתים העובדים בזוגות מייצרים תוכניות קצרות יותר, עם תכנון טוב יותר ופחות באגים מאשר ממתכנתים שעובדים לבד‏[2].
ידע עובר בין זוג המתכנתים, ככל שהם עובדים יחדיו, הם חולקים ידע על מאפייני המערכת ולומדים טכניקות תכנות אחד מהשני‏[2][3] עם תכנות מעורב, שבו כל מתכנת עובר בין כל שאר המתכנתים בצוות, ידע על המערכת מתפשט בין כל חברי הצוות וכך מוקטן הסיכון הניהולי כאשר מתכנת עוזב את הצוות‏[2].
ציוות בדרך כלל גורר רמת משמעת גבוהה יותר וניהול זמן טוב יותר. הסיכוי נמוך יותר לכך שהמתכנתים יוותרו על כתיבת בדיקות יחידה, יבזבזו זמן בגלישה באינטרנט, יבדקו דואר אלקטרוני[4] או יעגלו פינות כאשר הם עובדים עם בן זוג. בן הזוג שומר על השותף שלו "ישר"‏[5][6]. אנשים מסתייגים יותר מלהפריע לזוג מאשר להפריע למישהו שעובד לבד‏[7]. יתרונות נוספים כוללים מורל גבוה יותר‏[8] וביטחון גדול יותר בנכונות הקוד‏[2].

חסרונות[עריכת קוד מקור | עריכה]

למרות שכתיבת הקוד נשלמת מהר יותר מאשר כשאר מתכנת עובד לבד, סך זמן המתכנת (מספר המתכנתים X זמן עבודה) עולה. מנהל צריך לאזן בין השלמה מהירה יותר של העבודה וירידת זמן בדיקות וחיפוש באגים לעומת עלות גבוהה יותר של ייצור קוד. המשקל היחסי של גורמים אלו יכול להשתנות מפרויקט לפרויקט וממשימה למשימה.
התועלת גדולה ביותר במשימות שעדיין אינן מובנות למתכנתים, הדורשות יותר יצירתיות, אתגר ותחכום‏[9]. במשימות פשוטות, בהן הזוג מבין לגמרי את המשימה, ציוות גורר ירידה בתפוקה. בנוסף, תכנות בזוגות יקר משמעותית מתכנות יחידי.

גרסאות שונות[עריכת קוד מקור | עריכה]

תכנות בזוגות מרוחק[עריכת קוד מקור | עריכה]

ידוע גם כתכנות בזוגות מדומה או תכנות בזוגות מחולק. בתכנות בזוגות מרוחק שני המתכנתים נמצאים במיקומים שונים‏[10] ועובדים באמצעות עורך זמן-אמת משותף, שולחן עבודה משותף או פלאג אין.
ציוות מרוחק מציג קשיים שאינם קיימים בציוות פנים אל פנים, כמו עיכובים נוספים עבור תיאום, תלות גדולה יותר בכלים "כבדי משקל" למעקב אחר משימות במקום כלים "קלי משקל" כמו כרטיסיות אינדקס, ואובדן תקשורת בלתי מילולית הגורם לבלבול ועימותים בשל דברים כמו "אצל מי המקלדת"‏[11].

תכנות בזוגות פינג פונג[עריכת קוד מקור | עריכה]

בתכנות בזוגות מסוג זה, ה"צופה" כותב בדיקת יחידה שנכשלת, ה"נהג" משנה את הקוד כך שיעבור את הבדיקה, ה"צופה" כותב בדיקת יחידה חדשה שנכשלת וכן הלאה. המעגל נמשך כל עוד ה"צופה" מסוגל לכתוב בדיקות יחידה שנכשלות. תכנות זה לוקח יותר זמן מאשר שהוערך בתוכנית‏[12]

ראו גם[עריכת קוד מקור | עריכה]

קישורים חיצוניים[עריכת קוד מקור | עריכה]

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ 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."
  2. ^ 2.0 2.1 2.2 2.3 Cockburn, Alistair (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). 
  3. ^ Laurie Williams. Pair Programming Illuminated. Addison-Wesley, 2003, 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."
  4. ^ Laurie Williams. Pair Programming Illuminated. Addison-Wesley, 2003, 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).
  5. ^ Kent Beck. Extreme Programming Explained. Addison-Wesley, 2000, 102. ISBN 201-61641-6. "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."
  6. ^ Laurie Williams. Pair Programming Illuminated. Addison-Wesley, 2003, 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."
  7. ^ Laurie Williams. Pair Programming Illuminated. Addison-Wesley, 2003, 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."
  8. ^ Laurie Williams. Pair Programming Illuminated. Addison-Wesley, 2003, 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!'"
  9. ^ Lui, Kim Man; Keith C. C. Chan (September 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. 
  10. ^ Flor, Nick (2006). Globally distributed software development and pair programming. Communication of the ACM, 49, 57-58.
  11. ^ 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. אוחזר ב־2010-04-30. 
  12. ^ PairProgrammingPingPongPattern. c2.com.