Bu soru gerçekten ayrı ayrı ele alınması gereken iki soru içermektedir:
Bazı ekiplerin neden katı bir gelişim süreci var?
Basit cevap, eğer yapmazlarsa hatalar olur. Pahalı hatalar. Bu gelişme için geçerlidir ve BT alanının geri kalanı için de geçerlidir (sistem yöneticileri, DBA'lar, vs.).
Bu, pek çok geliştirici ve BT çalışanının anlaması için çok zordur, çünkü çoğumuz "uç noktalarda" sadece birinde - en azından bir düzine geliştiriciye sahip büyük Fortune tarzı şirketler ve takip edecek sıkı süreçler için çalıştık. Küçük, mikro-ISV'ler ve hatta serbest çalışan, insanların kötü bir şekilde batırmadığı ya da vidalamanın maliyeti düşük olduğu yerlerde çalışır.
Ancak, bu aşamalar arasında bir şirket - parlak, yetenekli BT personeline sahip bir şirket bile - hiç işlem yapmadıysanız, herhangi bir işlem yapmamanın veya yarı-aşamalı bir sürecin tehlikelerini anlayacaksınız. Görüyorsunuz, personel arasındaki iletişim bir Kombinatoryal Patlama probleminden muzdariptir ; Tek bir ekipte yaklaşık 6-10 geliştirici seviyesine ulaştığınızda, ana veya kritik hataların ana nedeni yetenek veya teknik bilgi değil, iletişim eksikliğidir.
Alice pazartesi sabahı etrafta sorar ve bagajda rekonstrüktif cerrahi yapılması uygun olduğuna karar verir, çünkü o kısımda başka kimse çalışmaz. Bob, bir saat sonra, tatilinden ve enerji dolu bir zamanda geri dönüyor ve aynı alanda yeni bir ana özellik uygulayacağına karar veriyor ve neden hiç kimse bu koda değmediği için bir dalla uğraşıyor? Böylece Alice, bu "teknik borcu" öder, Bob 6 ay boyunca arka brülörde olan katil özelliğini uygular ve nihayet her ikisi de kodunu kontrol ettiklerinde (tabii ki cuma günü kapanmadan hemen önce!) Takımın geride kalması ve önümüzdeki birkaç hafta boyunca böcek ve gerileme olarak yaşamaya devam eden kabus cehennemi cehennemi üzerinde çalışmaya çalışması gerekiyor.
Alice ve Bob Her ikisi de kodlama görevlerinde harika bir iş çıkardılar, ancak ikisi de kötü bir kararla başladı ("olabilecek en kötü şey ne?"). Takım lideri veya proje yöneticisi onları bir ölüm sonrası alır ve tekrar olmasını önlemek için bir kontrol listesi çıkarır:
- Çatışmaların etkisini en aza indirmek için girişler günlük olmalıdır;
- Dallarda 1 günden fazla sürecek değişiklikler yapılması gerekir;
- Tüm önemli görevler (yeniden düzenleme gibi özellik dışı çalışmalar dahil), hata izleyicide uygun şekilde izlenmeli ve atanmalıdır.
Bahse girerim, çoğumuz için, bu "süreç" sağduyulu gibi gözüküyor. Bu eski bir şapka. Fakat birçok küçük takımın bunu yapmadığını biliyor muydunuz? İki kişilik bir ekip, kaynak kontrolü ile hiç uğraşmıyor bile. Kimin umrunda? Gerçekten gerekli değil. Sorunlar sadece takım büyüdüğü zaman başlıyor, fakat süreç yok.
Tabii ki, süreç optimizasyonu performans optimizasyonu gibidir; ters üstel bir eğri izler. Kontrol listesi yukarıdaki kusurların% 80'ini ortadan kaldırabilir, ama bunu uygulamak sonra, bazı başka şey için hesaplar bulmak kalan kusurların% 80. Hayali ama tanıdık bir örneğimizde, farklı donanım ortamları nedeniyle oluşan hatalar olabilir, bu da standart bir donanım olmadığı ve geliştiricilerin her 2 haftada bir güncellenen açık kaynaklı kitaplıklar kullandıkları gerçeğinden kaynaklanmaktadır.
Bu nedenle, üç seçeneğiniz vardır: (a) donanımı standart hale getirin ve maliyeti yüksek olan ve verimliliği önemli derecede azaltabilecek olan 3. taraf kitaplık kullanımını ciddi şekilde kısıtlayın ya da (b) sysadmin grubundan ve korumak için tam zamanlı geliştirici, veya (c) standart bir sanal makine dağıtarak ve geliştiricilere bu konuda geliştirme yapmalarını söyleyerek geliştiricilere bunu yapmalarını sağlayın. Açıkça (b) en iyi uzun vadeli çözümdür, ancak (c) daha iyi bir kısa vadeli güvenilirlik ve uygunluk dengesine sahiptir.
Döngü uzayıp gidiyor. Gördüğünüz her "politika" genel olarak gerçek bir sorunu çözmek için kurulmuştur. Joel Spolsky'nin 2000 yılında tüm yolunu yazdığı gibi (tamamen farklı bir konuda, ama yine de alakalı):
Bir restorana girdiğinizde ve "Köpeklere İzin Yok" yazan bir işaret gördüğünüzde, bu işaretin tamamen gizleyici olduğunu düşünebilirsiniz: Bay Restaurant, köpekleri sevmez, bu yüzden restoranı inşa ettiğinde o işareti koydu.
Olanların hepsi bu olsaydı, "Yılan Yok" işareti de olurdu; sonuçta, kimse yılanları sevmez. Ve "Fil Yok" işareti, çünkü oturdukları zaman sandalyeleri kırarlar.
Bu işaretin asıl nedeni tarihseldir: insanların köpeklerini restorana getirmeye çalıştıklarını gösteren tarihi bir işarettir.
Çoğu (aynısını söylemeyeceğim) yazılım ekiplerinde aynıdır: “Her hata düzeltmesi için bir test vakası eklemeniz gerekir” gibi politikalar neredeyse her zaman ekibin tarihsel olarak gerilemeyle ilgili sorunları olduğunu gösterir . Regresyonlar, yetersizlikten ziyade iletişimin bozulmasından dolayı ortaya çıkan sorunlardan bir diğeridir. Politikayı anladığınız sürece, meşru kısayollar alabilirsiniz (örneğin, 6 küçük hatayı düzeltmek zorunda kaldım ama hepsi aynı özellikteydi, bu yüzden aslında 9 tanesi için bir test davası yazabilirim).
Bu, süreçlerin neden orada olduğunu açıklar, ancak bütün hikaye bu değildir. Diğer yarısı:
Süreci takip etmek neden bu kadar zor?
Aslında cevaplanması gereken en basit soru şudur: Çünkü takım (veya yönetimi) tekrarlanabilir sonuçlara odaklanır ve hataları en aza indirir (yukarıdaki gibi) ancak bu sürecin optimizasyonuna ve otomasyonuna yeterince önem vermedi .
Örneğin, asıl soruda, birkaç sorun görüyorum:
Revizyon kontrol sistemi (CVS) bugünün standartlarına göre eski. İçin yeni projeler hızla böyle Mercurial (Hg) olarak dağıtılmış sistemler gölgesinde hale gelmektedir kendisi yıkılma (SVN), neredeyse tamamen almıştır. Hg'ye geçmek, dallanmayı ve birleşmeyi çok daha basit hale getirecek ve yukarıdaki varsayım örneğime rağmen, günlük taahhüt gereksinimi çok daha az acı verici hale gelecekti. Kodun derlenmesi gerekmez, çünkü havuz yereldir; - aslında, lazier geliştiricileri, isterlerse otomatik olarak yerel depoda değişiklikler yapmak için bir oturum açma komut dosyası ayarlayarak bu adımı otomatikleştirebilirler.
Sanal Makine işlemini otomatikleştirmek için zaman harcanmadı. Bir sanal makineye kaynak / kitaplık edinme, yapılandırma ve indirme işlemi% 100 otomatikleştirilebilir. Yerel makinenizdeki hata düzeltmeleri üzerinde çalışırken merkezi bir sunucuda çalıştırdığınız katılımsız bir işlem olabilir (ve temiz bir yapı oluşturmak için VM'yi kullanın).
Öte yandan, belirli bir ölçekte geliştirici başına VM çözümü aptallaşmaya başlar ve yalnızca Sürekli Entegrasyon sunucusuna sahip olmanız gerekir. Gerçek verimlilik avantajlarının geldiği yer burasıdır, çünkü (çoğunlukla) bireysel geliştiricileri binalar hakkında endişelenmek zorunda kalmaz. Derleme sunucusu her zaman temiz olduğu için temiz sanal makineler kurma konusunda endişelenmenize gerek yok .
Sorunun ifadesi ("tüm adımlarla test davası"), bazı manuel testlerin yapıldığına işaret eder . Bu, yine nispeten düşük bir iş yüküne sahip küçük takımlar için çalışabilir, ancak daha büyük ölçekte hiçbir anlam ifade etmiyor. Regresyon testleri otomatikleştirilebilir ve yapılmalıdır; "basamak" yoktur, sadece ünite / entegrasyon test odasına eklenmiş bir sınıf veya yöntem vardır.
Söylemeye gerek yok, Bugzilla'dan daha yeni (daha iyi) bir hata izleme sistemine geçmek, deneyimin bu kısmını daha az acı verici hale getirecektir.
Şirketler sadece bu sorunları çözmedikleri için ucuz ya da aptal değildirler. Tek bildikleri şu anki sürecin işe yaradığı ve bazı durumlarda bu konuda bir şeyleri değiştirmeye riskli ve isteksiz oldukları. Fakat gerçekten de faydalarından ikna olmaları gerekiyor .
Geliştiriciler kodlama yapmayan tüm görevlerde zamanlarını izleyerek bir hafta geçirdilerse, kolayca ekleyebilir, mesela yönetime Mercurial’a geçişte sıfır sermayeli, 100 kişilik bir yatırım olacağını (örneğin) birleştirme çatışmalarını çözmek için haftada 10 adam-saati ortadan kaldırır, o zaman bu 10 haftalık bir ödemedir ve neredeyse kesinlikle buna katılırlar. Yapı sunucuları (CI) veya daha iyi hata izleme ile aynı fikir.
Özetlemek için: Takımlar henüz böyle bir şey yapmadı, çünkü kimse yönetimi bugün yapmanın yeterince önemli olduğuna ikna etmedi . Öyleyse inisiyatif al ve bir fayda-maliyet denklemine dönüştür; Asgari riskle basitleştirilebilecek / otomatik hale getirilebilecek görevlere ne kadar zaman harcandığını öğrenin ve yeni bir araç veya tekniğin başlangıç noktası ve nihayetinde getirisini hesaplayın. Onlar ise hâlâ dinlemiyorsun, o zaman zaten kalan seçenekler ne olduğunu biliyoruz.
Eğer geliştiriciler bir hafta boyunca kodlama yapmayan tüm görevlerde zamanlarını takip ederek geçirdilerse, kolayca ekleyebilir, yönetimi gösterebilir ve maliyet-fayda denklemine çevirebilirdiniz ...
Yukarıdaki bölüm daha da genişlemeye değer.
İşe yaradığını onaylayabilirim. Programcılar, üzerinde çalıştığım projelerden birinde birkaç kez kullandılar ve her seferinde istenen değişikliklere yol açtı.
Genel izlenim, doğru yapıldığında, bu numara oldukça ağır miktarda yönetim cehaletini ve ataleti geçersiz kılabilir .
Kendimizi (geliştiricilerin) bu türden bir yaklaşımla ele almak zorunda kaldıklarını söyleyen bu DIY yaklaşımının çok olgunlaşmamış olduğunu belirtmek isterim . Daha fazla deneyimli yazılım satıcısında bunun gibi şeylerin çoğunlukla yöneticiler tarafından yapıldığını gördüm. Kural olarak, bizde programcılardan daha üretkenlerdi. Çok daha üretken.