Çiftler programı - Pair programming

İki iş arkadaşı eşli programlama, 2007

Çiftler programı bir Çevik Yazılım Geliştirme teknikte iki programcılar tek bir iş istasyonunda birlikte çalışın. Bir, sürücü, yazar kodu diğeri gözlemci veya gezgin,[1] yorumlar her kod satırı yazıldığı gibi. İki programcı sık sık rol değiştirir.

Gözlemci gözden geçirirken, işin "stratejik" yönünü de dikkate alır, iyileştirmeler için fikirler ve ele alınacak muhtemel gelecekteki problemler üretir. Bu, sürücüyü, gözlemciyi bir güvenlik ağı ve kılavuz olarak kullanarak mevcut görevi tamamlamanın "taktiksel" yönlerine tüm dikkatini vermesi için serbest bırakmayı amaçlamaktadır.

Ekonomi

Eş programlama, kişi-saatler ayrı ayrı çalışan programcılara kıyasla kod sağlamak için gereklidir.[2] Ancak, ortaya çıkan kodda daha az kusur vardır.[3] Kod geliştirme süresinin yanı sıra, saha destek maliyetleri ve kalite güvencesi gibi diğer faktörler de yatırımın geri dönüşünü etkiler. Çift programlama, programlardaki kusurları azaltarak bu masrafları teorik olarak telafi edebilir.[3]

Hataları yapılırken önlemeye ek olarak, başka maddi olmayan faydalar da olabilir. Örneğin, birlikte çalışırken telefon görüşmelerini veya diğer dikkat dağıtıcı unsurları reddetme, kararlaştırılan aralıklarla daha az ara verme veya telefon görüşmelerine geri dönmek için ortak molalar (ancak birisi beklediği için hızlı bir şekilde işe dönme) nezaketi. Ekibin bir üyesi daha fazla odağa sahip olabilir ve odağını kaybederse diğerini yönlendirmeye veya uyandırmaya yardımcı olabilir ve bu rol periyodik olarak değişebilir. Bir üye, diğerinin bilmediği bir konu veya teknik hakkında bilgiye sahip olabilir, bu da bir çözümü bulma veya test etme gecikmelerini ortadan kaldırabilir veya daha iyi bir çözüme izin verebilir, böylece bir programcının beceri setini, bilgisini ve deneyimini karşılaştırıldığı şekilde etkili bir şekilde genişletebilir yalnız çalışmaya. Bu somut olmayan faydaların her birini ve daha fazlasını doğru bir şekilde ölçmek zor olabilir, ancak daha verimli çalışma saatlerine katkıda bulunabilir.

Tasarım kalitesi

İki programcının bulunduğu bir sistem, üç nedenden ötürü sorunlara daha çeşitli çözümler üretme potansiyeline sahiptir:

  1. programcılar göreve farklı önceki deneyimler getiriyor;
  2. görevle ilgili bilgileri farklı şekillerde değerlendirebilirler;
  3. işlevsel rolleri nedeniyle problemle farklı ilişkiler içindedirler.

Amaçları ve planları paylaşma girişiminde, programcılar, aralarında bir çatışma çıktığında, açıkça paylaşılan bir eylem tarzını müzakere etmelidir. Bunu yaparken, sorunu çözmek için tek bir programcının tek başına yapabileceğinden çok daha fazla sayıda yol düşünürler. Bu, kötü bir yöntem seçme şansını azalttığı için programın tasarım kalitesini önemli ölçüde artırır.[4]

Memnuniyet

2000 yılındaki çift programcılarla yapılan çevrimiçi bir ankette,% 96'sı işlerini tek başlarına programladıklarından daha fazla sevdiklerini ve% 95'i eş programladıklarında işlerine daha fazla güvendiklerini söyledi.[5]

Öğrenme

Bilgi, ister endüstride ister sınıfta olsun, çift programcılar arasında sürekli olarak paylaşılır. Birçok kaynak, öğrencilerin çiftler halinde programlama yaparken daha yüksek güven gösterdiğini,[5] ve çoğu, programlama dili kurallarına ilişkin ipuçlarından genel tasarım becerisine kadar her şeyin olup olmadığını öğreniyor.[6] "Karışık eşleştirmede", her programcı yalnızca tek bir ortakla eşleşmek yerine takımdaki diğer tüm programcılarla iletişim kurar ve çalışır, bu da sistem bilgisinin tüm takıma yayılmasına neden olur.[3] Eşli programlama, programcıların ortaklarının kodunu incelemelerine ve kendi öğrenme etkinlikleri için izleme mekanizmaları geliştirme becerilerini artırmak için gerekli olan geri bildirim sağlamalarına olanak tanır.[6]

Takım oluşturma ve iletişim

Eşli programlama, ekip üyelerinin hızlı bir şekilde paylaşımda bulunmalarına olanak tanıyarak, gündemleri birbirinden gizleme olasılığını azaltır. Bu, eş programcıların daha kolay iletişim kurmayı öğrenmelerine yardımcı olur. "Bu, proje içindeki iletişim bant genişliğini ve sıklığını artırarak ekip içindeki genel bilgi akışını artırır."[3]

Çalışmalar

İkili programlamanın hem ampirik çalışmaları hem de meta-analizleri vardır. Ampirik çalışmalar, üretkenlik düzeyini ve kodun kalitesini inceleme eğilimindeyken, meta-analizler test etme ve yayınlama sürecinin getirdiği önyargılara odaklanabilir.

Bir meta-analiz Bulunan çiftler, genellikle tek başına çalışan programcılardan daha fazla tasarım alternatifini düşünür, daha basit, daha bakımı yapılabilir tasarımlara ulaşır ve tasarım kusurlarını daha erken yakalar. Ancak, bulgularının "aşağıdakilerin" işaretlerinden etkilenmiş olabileceğine dair endişelerini dile getirdi. yayın yanlılığı çift ​​programlama üzerine yayınlanmış çalışmalar arasında. "İkili programlamanın tekdüze yararlı veya etkili olmadığı" sonucuna varmıştır.[7]

Çift programcılar bir görevi tek bir programcıdan daha hızlı tamamlasalar da, toplam kişi-saatler artışlar.[2] Bir yöneticinin, işin daha hızlı tamamlanmasını ve daha kısa test ve hata ayıklama süresini daha yüksek kodlama maliyetiyle dengelemesi gerekir. Bu faktörlerin göreceli ağırlığı projeye ve göreve göre değişebilir.

Eşleştirmenin yararı, programcıların başlamadan önce tam olarak anlamadıkları görevlerde en büyüktür: yani, yaratıcılık ve karmaşıklık gerektiren zorlu görevler ve uzmanlara kıyasla acemiler için.[2] Çift programlama, karmaşık programlama görevlerinde yüksek kalite ve doğruluk elde etmek için yardımcı olabilir, ancak aynı zamanda geliştirme çabasını (maliyeti) önemli ölçüde artıracaktır.[7]

Çiftin zaten tam olarak anladığı basit görevlerde, eşleştirme, üretkenlikte net bir düşüşe neden olur.[2][8] Kod geliştirme süresini azaltabilir, ancak aynı zamanda programın kalitesini düşürme riski de vardır.[7] Acemi-acemi eşleştirme, onlara koçluk yapacak yeterli bir mentor olmadan kullanıldığında da üretkenlik düşebilir.[9]

Başarısızlık göstergeleri

Bir çiftin iyi performans göstermediğine dair göstergeler var:

  • Ayrılma üyelerden biri klavyeden fiziksel olarak uzaklaşırken, e-postaya erişirken ve hatta uykuya dalarken ortaya çıkabilir.
  • "Ustayı İzle" Bir üye diğerinden daha tecrübeli ise fenomen ortaya çıkabilir. Bu durumda, küçük üye, kodlama etkinliğinin çoğunluğunu çiftin kıdemli üyesine erteleyerek gözlemci rolünü üstlenebilir. Bu kolayca bağlantının kesilmesine neden olabilir.

Eşleştirme varyasyonları

Uzman-uzman
Uzman-uzman eşleşmesi, en yüksek üretkenlik için bariz bir seçim gibi görünebilir ve harika sonuçlar üretebilir, ancak her iki tarafın da yerleşik uygulamaları sorgulama olasılığı düşük olduğundan, sorunları çözmenin yeni yollarına dair çok az fikir verir.[2]
Uzman-acemi
Uzman-acemi eşleşmesi, uzmanın acemiye rehberlik etmesi için birçok fırsat yaratır. Aceminin yerleşik uygulamaları sorgulama olasılığı daha yüksek olduğundan, bu eşleştirme yeni fikirleri de ortaya çıkarabilir. Artık yerleşik uygulamaları açıklaması gereken uzmanın bunları sorgulaması daha olasıdır. Bununla birlikte, bu eşleşmede, korkmuş bir acemi pasif bir şekilde "ustayı izleyebilir" ve anlamlı bir şekilde katılmaktan çekinebilir. Ayrıca, bazı uzmanlar yapıcı acemi katılımına izin vermek için gereken sabra sahip olmayabilir.[10]
Acemi-acemi
Acemi-acemi eşleştirme, bağımsız çalışan iki acemiden önemli ölçüde daha iyi sonuçlar verebilir, ancak bu uygulama genellikle tavsiye edilmemektedir, çünkü acemiler için uygun bir rol modeli olmadan iyi alışkanlıklar geliştirmeleri daha zordur.[3]

Uzaktan çift programlama

Uzaktan çift programlama, Ayrıca şöyle bilinir sanal çift programlama veya dağıtılmış çift programlama, iki programcının farklı yerlerde olduğu çift programlamadır,[11] ile çalışmak işbirliğine dayalı gerçek zamanlı düzenleyici, paylaşılan masaüstü veya uzak çift programlama IDE Eklenti. Uzaktan eşleştirme, koordinasyon için fazladan gecikmeler, dizin kartları gibi "hafif" olanlar yerine "ağır" görev izleme araçlarına daha çok bağımlı olma ve kafa karışıklığına ve sonuç olarak sözlü iletişimin kaybolması gibi yüz yüze eşleştirmede mevcut olmayan zorlukları beraberinde getirir. "Klavyenin kimde olduğu" gibi konularda çelişkiler.[12]

Araç desteği şu şekilde sağlanabilir:

  • Tam ekran paylaşım yazılımı[13][14]
  • Terminal çoklayıcılar
  • Özel dağıtılmış düzenleme araçları
  • Sesli sohbet programları veya VoIP yazılımı, ekran paylaşma yazılımı iki yönlü ses özelliği sağlamadığında yardımcı olabilir. Kulaklık kullanımı programcıların ellerini serbest bırakır
  • Bulut geliştirme ortamları
  • İşbirlikçi çift programlama hizmetleri

Ayrıca bakınız

Referanslar

  1. ^ Williams, Laurie (19–20 Şubat 2001). Eşli programlamayı bir yazılım geliştirme sürecine entegre etme. 14. Yazılım Mühendisliği Eğitim ve Öğretim Konferansı. Charlotte. s. 27–36. doi:10.1109 / CSEE.2001.913816. ISBN  0-7695-1059-0. Programcılardan biri olan sürücü, klavye / fareyi kontrol eder ve programı aktif olarak uygular. Gözlemci olan diğer programcı, taktiksel (sözdizimsel, yazım vb.) Kusurları belirlemek için sürücünün çalışmasını sürekli olarak gözlemler ve ayrıca işin yönü hakkında stratejik olarak düşünür.
  2. ^ a b c d e Lui, Kim Man (Eylül 2006). "Çift programlama üretkenliği: Acemi - acemi - uzman - uzman" (PDF). Uluslararası İnsan-Bilgisayar Araştırmaları Dergisi. 64 (9): 915–925. CiteSeerX  10.1.1.364.2159. doi:10.1016 / j.ijhcs.2006.04.010. Arşivlenen orijinal (PDF) 2011-07-20 tarihinde. Alındı 2012-11-18.
  3. ^ a b c d e Cockburn, Alistair; Williams, Laurie (2000). "Çift Programlamanın Maliyetleri ve Faydaları" (PDF). Birinci Uluslararası Ekstrem Programlama ve Yazılım Mühendisliğinde Esnek Süreçler Konferansı Bildirileri (XP2000).
  4. ^ Flor, Nick V .; Hutchins, Edwin L. (1991). "Yazılım Takımlarında Dağıtılmış Bilişin Analizi: Kusursuz Yazılım Bakımı Sırasında Takım Programlamasına İlişkin Bir Örnek Çalışma". Koenemann-Belliveau, Jürgen'de; Moher, Thomas G .; Robertson, Scott P. (editörler). Programcıların Ampirik Çalışmaları: Dördüncü Atölye. Ablex. sayfa 36–64. ISBN  978-0-89391-856-9.
  5. ^ a b Williams, Laurie; Kessler, Robert R .; Cunningham, Ward; Jeffries, Ron (2000). "İkili programlama vakasının güçlendirilmesi" (PDF). IEEE Yazılımı. 17 (4): 19–25. CiteSeerX  10.1.1.33.5248. doi:10.1109/52.854064.
  6. ^ a b Williams, Laurie; Upchurch Richard L. (2001). "Öğrenci eşli programlamayı desteklemek için". ACM SIGCSE Bülteni. 33 (1): 327–31. doi:10.1145/366413.364614.
  7. ^ a b c Hannay, Jo E .; Tore Dybå; Erik Arisholm; Dağ I.K. Sjøberg (Temmuz 2009). "Çift Programlamanın Etkinliği: Bir Meta-Analiz". Bilgi ve Yazılım Teknolojisi. 51 (7): 1110–1122. doi:10.1016 / j.infsof.2009.02.001.
  8. ^ Arisholm, Erik; Hans Gallis; Tore Dybå; Dağ I.K. Sjøberg (Şubat 2007). "Sistem Karmaşıklığı ve Programcı Uzmanlığı Açısından Çift Programlamanın Değerlendirilmesi". Yazılım Mühendisliğinde IEEE İşlemleri. 33 (2): 65–86. doi:10.1109 / TSE.2007.17. Arşivlenen orijinal 2010-10-29 tarihinde. Alındı 2008-07-21.
  9. ^ Stephens, Matt; Doug Rosenberg. "Eşli Programlama Projenizi Gerçekten İyileştirecek mi?". Alındı 28 Mayıs 2011.
  10. ^ Williams, L. Ve Kessler, R. (2003). Çift Programlama Işıklı. Boston: Addison-Wesley Profesyonel. ISBN  9780201745764.
  11. ^ Flor, Nick V. (2006). "Küresel olarak dağıtılmış yazılım geliştirme ve çift programlama". ACM'nin iletişimi. 49 (10): 57–8. doi:10.1145/1164394.1164421.
  12. ^ Schümmer, Till; Stephan Lukosch (Eylül 2009). "Dağıtılmış Çift Programlama için Araçları ve Uygulamaları Anlama" (PDF). Evrensel Bilgisayar Bilimleri Dergisi. 15 (16): 3101–3125. Alındı 2010-04-30.
  13. ^ Çevik Ajax: Programlamayı VNC ile Eşleştirme Arşivlendi 2008-04-02 de Wayback Makinesi[kendi yayınladığı kaynak ]
  14. ^ Çift Programlama - En Üst Düzey Kurulum ve denediğimiz diğer seçenekler. - Jonathan Cogley'in Blogu[kendi yayınladığı kaynak? ]

Dış bağlantılar