هذه المقالة يتيمة. ساعد بإضافة وصلة إليها في مقالة متعلقة بها

برمجة زوجية

من ويكيبيديا، الموسوعة الحرة
اذهب إلى: تصفح، ‏ ابحث
البرمجة الزوجية

البرمجة الزوجية هي أحد تقنيات أجيل لتطوير البرمجيات حيث يعمل اثنين من المبرمجين معا في محطة عمل واحدة. يكتب أحدهم الكود المصدري في حين يستعرض الأخر كل سطر من الأكواد كما تمت كتابتها. والشخص الذي يقوم بالكتابة يُسمى المحرك. ويطلق على الشخص الذي يستعرض الكود المراقب (أو الملاح[1]). ويتبادل المبرمجان الأدوار بشكل متكرر. أثناء الاستعراض، يضع المراقب في اعتباره التوجه الاستراتيجي للعمل، والخروج بأفكار من أجل إدخال تحسينات والمشاكل المحتملة في المستقبل لمعالجتها. وهذا يتيح الفرصة للمحرك في تركيز كل اهتمامه على الجوانب "التكتيكية" لاستكمال المهمة الحالية، وذلك باستخدام المراقب كشبكة أمان ودليل.

مع انخفاض أسعار أجهزة الكمبيوتر هذه الأيام، أصبح من الشائع إعداد جديد بشاشتين يتشاركان في مكان العمل في الصناعة

التكاليف والفوائد[عدل]

وجدت بعض الدراسات أن المبرمجين الذين يعملون بشكل زوجي ينتجون برامج أقصر، مع تصميمات أفضل وعدد أخطاء برمجية أقل، من المبرمجين الذين يعملون وحدهم.[2] وقد وجدت الدراسات انخفاض معدلات الخطأ من 15 ٪ إلى 50 ٪، وتتفاوت اعتمادا على خبرة المبرمج وتعقيد المهمة.[3][4] وعادة ما ينظر الأزواج في بدائل تصميمية أكثر من المبرمجين المنفردين، ويستطيعوا التوصل إلى تصاميم أكثر بساطة وأكثر ثباتا؛ كما يستطيعون اصطياد عيوب التصميم في وقت مبكر.[5] وعادة ما يعمل الأزواج بشكل أسرع من مبرمج واحد مخصص لنفس المهمة. وغالبا ما يجد الأزواج المشاكل التي تبدو "مستحيلة" سهلة أو حتى سريعة الحل، أو على الأقل من الممكن حلها عندما يعملون معا.[2][6]

ومع ذلك، وفي 2007، استنتج تحليل الميتا أن "البرمجة الزوجية ليست مفيدة بشكل موحد أو فعالة" بسبب أن العديد من العوامل الأخرى بجانب اختيار استخدام البرمجة الزوجية لها آثار كبيرة على نتائج مهمة البرمجة.[7] ووجدت دراسة الميتا أن البرمجة الزوجية تميل إلى تقليل الوقت اللازم للتطوير، وتنتج آثارا إيجابية هامشية على نوعية الكود، ولكن هذه البرمجة الزوجية تتطلب جهد أكبر من المطور، وهذا يعني، أن تكلفتها أكثر بكثير من تكلفة البرمجة المنفردة. ويقترح المؤلفان أن دراسة البرمجة الزوجية تعاني من التحيز في النشر حيث ان الدراسات التي لا تظهر أن البرمجة الزوجية مفيدة، لا تقدم للنشر، أو لا يقبل نشرها. وبالتالي يتم الاستنتاج أنه "لا يمكنك ان تتوقع أسرع وأفضل وأرخص". على الرغم من اكتمال الترميز بشكل أسرع مما يكون عليه عندما يعمل مبرمج واحد وحده، فإن مجموع وقت المبرمج (عدد المبرمجين × الوقت الممضى) يزداد. ويجب على المدير أن يوازن بين انتهاء العمل بشكل أسرع وتقليل الاختبار ووقت التصحيح ضد ارتفاع تكلفة الترميز. ويمكن للوزن النسبي لهذه العوامل أن تختلف من مشروع إلى آخر ومهمة لأخرى. ان الاستفادة من الاقتران هو أعظم بالنسبة للمهام التي لا يستعبها المبرمجين تماما قبل أن البدء: وهذا يعني، المهام الصعبة التي تدعو إلى الإبداع والتطور.إغلاق </ref> مفقود لوسم <ref>

تمر المعرفة بين المبرمجان وهم يعملون. فهما يتبادلان المعرفة بخصوصيات النظام، ويلتقطان تقنيات البرمجة من بعضهما البعض.[2][8] يلتقط بسرعة الموظفون الجدد ممارسات الفريق ومعرفة تفاصيل هذا النظام.[9] تنتشر مع " الاقتران المختلط "—كل مبرمج يدور خلال سائر مبرمجين الفريق بدلا من الاقتران بشريك واحد فقط—معرفة النظام في الفريق بأكمله، وبالتالي الحد من مخاطر الإدارة في حالة ترك أحد المبرمجين الفريق.[2]

عادة ما يحسن الاقتران الانضباط وإدارة الوقت. فالمبرمجين أقل عرضة لتخطي اختبارات الوحدة، وقضاء بعض الوقت في تصفح شبكة الإنترنت أو على البريد الإلكتروني الشخصي,[10] أو الالتواء عند العمل مع شريك مقترن. فالشريك المقترن "يبقيهم صادقين".[11][12] وان الناس يكونوا أكثر ترددا في مقاطعة زوجا مما هو عليه الحال بالنسبة لشخص يعمل وحده.[13]

وبعض الفوائد الإضافية المذكورة تشمل زيادة الروح المعنوية،[14] وزيادة الثقة في صحة الكود.[2]

الدراسات العلمية[عدل]

حسب الاقتصاديون

"وقد أظهرت لوري وليامز من جامعة يوتا في مدينة سولت ليك أن المبرمجين الزوجيين ليسوا سوى 15 ٪ أبطأ من اثنين من المبرمجين الفرديين المستقلين، ولكن ينتجوا 15 ٪ أخطاء برمجية أقل. (ملحوظة: أظهرت الدراسة الأصلية أن كود 'خالي من الأخطاء’ ذهبت من 70 ٪ إلى 85 ٪، بل قد تكون أكثر سهولة للقول بأن هذا هو انخفاض 50 ٪ من الأخطاء، من 30 ٪ إلى 15 ٪). ولأن الاختبار والتصحيح في كثير من الأحيان أكثر تكلفة من العديد من البرامج الأولية، فهذه نتيجة مثيرة للإعجاب."[4]

وقد أظهرت وليامز في دراسة 2000 تحسنا في صحة الأخطاء بنحو 15 ٪ وانخفاض 20 ٪ -40 ٪ في الوقت، ولكن بين زيادة 15 ٪ و60 ٪ في الجهد، وهو، مجموع ساعات المبرمج. ودراية وليامز2000 تستشهد بدراسة سابقة (Nosek 1998) والتي اظهرت أيضا انخفاضا بنسبة 40 ٪ في الوقت وزيادة 60 ٪ في الجهد. وتعرض دراسة (لوي 2006) تجربة علمية صارمة والتي عند اختبار زوجين مبتدئين ضد منفردين مبتدئين يتم تحقيق مكاسب إنتاجية أكبر بكثير من اختبار أزواج ذو خبرة ضد منفردين خبرة.[15]

وفي دراسة حديثة أكبر (Arisholm 2007) يوجد زيادة 48 ٪ في صحة الأنظمة المعقدة، ولكن لا يوجد فرق كبير في الوقت، في حين كان النقص في الوقت في النظم البسيطة 20 ٪، ولكن لم يوجد اختلاف كبير في الصحة. وبشكل عمومي لم يكن هناك انخفاض عام في الوقت أو زيادة في الصحة، ولكن زيادة عامة 84 ٪ في الجهد.[16][17]

ويظهر لوي، وتشان، ونوزك (2008) أن البرمجة الزوجية تتفوق في المهام التصميمية.

وفي تحليل ميتا كامل النطاق من الدراسات التجريبية على البرمجة الزوجية، من قبل أو خلال عام 2007، يؤكد (هناي. 2009) "أنه لا يمكنك توقع أسرع وأفضل وأرخص". وتكلف الجودة الأعلى للقيام بمهام معقدة جهد مرتفع، وتخفيض المدة للمهام الأبسط يأتي مع جودة أقل بشكل ملحوظ—تحليل الميتا "تشير إلى أن البرمجة الزوجية ليست مفيدة بشكل موحد أو فعالة".[7]

مؤشرات التعثر[عدل]

وهناك مؤشرات قليلة على أن هذا الزوج لا يعمل بشكل جيد:

  • فك الارتباط—واحد من أعضاء يحرك فعليا كرسيه بعيدا عن لوحة المفاتيح، أو يبدأ العمل على بريده الإلكتروني، وما إلى ذلك. وفي بعض الأحيان يمكن أن يصل هذا إلى أقصى قدر عند نوم أحد الأعضاء.
  • مشاهدة المحترف—في بعض الأحيان يكون أحد الأعضاء أكثر خبرة من الآخر. فيوجد إغراء بالإذعان إلى العضو الأكثر بروزا، وسيتم انزال الأقل خبرة إلى صفة مراقب. وهذا غالبا ما يؤدي إلى فك الارتباط.
  • الصمت—لا يمكن أن يعمل الأزواج معا إذا لم يتحدثوا مع بعضهم البعض.[18]

المتغيرات[عدل]

البرمجة الزوجية عن بعد[عدل]

البرمجة الزوجية عن بعد، والمعروفة أيضا باسم البرمجة الزوجية الافتراضية أو البرمجة الزوجية الموزعة، هي برمجة زوجية يكون فيها المبرمجين في مواقع مختلفة،[19] يعملون عبر محرر الوقت الحقيقي التعاوني، أو سطح مكتب مشترك، أو برنامج مساعد في بيئة تطوير متكاملة للبرمجة الزوجية عن بعد. تُدخل البرمجة الزوجية عن بعد صعوبات لم تكن موجودة في اقتران الوجه لوجه، مثل تأخير اضافي للتنسيق، وهذا يتوقف على أدوات تتبع المهمة ذات "الوزن الثقيل" بدلا من تلك "الخفيفة" مثل فهرس البطاقات، وفقدان التواصل الغير لفظي مما أدى إلى الارتباك والصراعات على أشياء مثل من "لديه لوحة المفاتيح".[20]

العديد من الأدوات الإضافية مثل مساعدات برنامج إيكليبس متوفرة لدعم الاقتران عن بعد. ولقد جربت بعض الفرق Virtual Network Computing وRealVNC مع كل مبرمج باستخدام الحاسوب الخاص بهم.[21][22][23] واستخدام آخرون وضع العرض المتعدد (-x) من خلال شاشة جنو المستندة إلى نص. ولدى شركةأبل ماك أو إس عشرة تطبيق تقاسم الشاشة مدمج.

برمجة بينغ بونغ الزوجية[عدل]

في برمجة بينغ بونغ الزوجية، يكتب المراقب اختبار وحدة فاشل، يعدل المحرك كود لاجتياز الاختبار. عند هذه النقطة، يقوموا بتبادل الأدوار ويكتب المحرك الأصلي (بصفته المراقب) اختبار فاشل. يُعدل المراقب الأصلي (المحرك الآن) كود لاجتياز الاختبار الجديد، وهلم جرا. وتستمر هذه الحلقة ما دام أحد العضوين قادرا على كتابة اختبار وحدة فاشل للعضو الأخر لتنفيذه. وفي العموم، قد يستغرق هذا النهج مزيدا من الوقت عن الخطة المقدرة.[24]

أنظر أيضا[عدل]

وصلات خارجية[عدل]

برامج ووصلات تدعم البرمجة الزوجية[عدل]

المراجع[عدل]

  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. ^ أ ب ت ث ج 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). 
  3. ^ Canfora، Gerardo؛ Aniello Cimitile, Felix Garcia, Mario Piattini, Corrado Aaron Visaggio (2007). "Evaluating performances of pair designing in industry" (PDF). The Journal of Systems and Software 80 (80): 1317–1327. doi:10.1016/j.jss.2006.11.004. اطلع عليه بتاريخ 2010-06-14. 
  4. ^ أ ب "Agility counts". The Economist. September 20, 2001. .
  5. ^ Williams، Laurie؛ Kessler، Robert (2003). Pair Programming Illuminated. Addison-Wesley. صفحات 27–28. ISBN 0-201-74576-3. 
  6. ^ Williams، Laurie؛ Kessler، Robert (2003). Pair Programming Illuminated. Addison-Wesley. صفحة 26. ISBN 0-201-74576-3.  "Collaborative teams consistently report that together they can evolve solutions to unruly or seemingly impossible problems. … The driver might actually be working out a design or implementing a part of the problem, realizing that he or she may ultimately come to a dead end in the problem resolution. The navigator, while watching the driver's partial design or implementation, begins thinking about the next step. When the driver hits the dead end, the navigator is often prepared to take over and lead the way. Often, the cycle continues until the problem is solved."
  7. ^ أ ب 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. 
  8. ^ Williams، Laurie؛ Kessler، Robert (2003). Pair Programming Illuminated. Addison-Wesley. صفحة 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."
  9. ^ Williams، Laurie؛ Kessler، Robert (2003). Pair Programming Illuminated. Addison-Wesley. صفحة 112. ISBN 0-201-74576-3.  "[Expert-novice pairing] can even be valuable for novices who are novices only in the sense that they haven't been with their team for very long. … Watching and then doing with an expert by your side can greatly reduce the time it would require to learn 'the right way' of working with the team. It really helps when the newbie works with many of the experts (or with any team member) so he or she can learn about many different aspects of the system."
  10. ^ Williams، Laurie؛ Kessler، Robert (2003). Pair Programming Illuminated. Addison-Wesley. صفحة 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).
  11. ^ Beck، Kent (2000). Extreme Programming Explained. Addison-Wesley. صفحة 102. ISBN 201-61641-6 تأكد من صحة |isbn= (help). "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."
  12. ^ Williams، Laurie؛ Kessler، Robert (2003). Pair Programming Illuminated. Addison-Wesley. صفحة 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."
  13. ^ Williams، Laurie؛ Kessler، Robert (2003). Pair Programming Illuminated. Addison-Wesley. صفحة 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."
  14. ^ Williams، Laurie؛ Kessler، Robert (2003). Pair Programming Illuminated. Addison-Wesley. صفحة 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!'"
  15. ^ اكتب عنوان المرجع بين علامتي الفتح <ref> والإغلاق </ref> للمرجع ijhcs
  16. ^ اكتب عنوان المرجع بين علامتي الفتح <ref> والإغلاق </ref> للمرجع Arisholm_2007_65.E2.80.9386
  17. ^ Aranda، Jorge (2007-03-12). "Pair programming evaluated". اطلع عليه بتاريخ February 7, 2008. 
  18. ^ http://www.agilesherpa.org/agile_coach/engineering_practices/pair_programming/
  19. ^ Flor, Nick (2006). Globally distributed software development and pair programming. Communication of the ACM, 49, 57-58.
  20. ^ 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. 
  21. ^ Agile Ajax: Pair Programming with VNC
  22. ^ Pair Programming - The Ultimate Setup and the other options we tried. - Jonathan Cogley's Blog
  23. ^ Ola Lindberg › Computer ergonomics and pair programming
  24. ^ "PairProgrammingPingPongPattern". c2.com.