Daha önce sahip olmayan kod tabanlarına birim testleri tanıttım. Katıldığım son büyük proje, takıma geldiğimde, ürün sıfır birim testlerle zaten üretiliyordu. Ben ayrıldığımda - 2 yıl sonra - 230 000 + üretim LOC (gerçek zamanlı finansal Win-Formlar uygulaması) ile bir kod tabanında yaklaşık% 33 kod kapsamı sağlayan 4500+ veya daha fazla test yaptık. Bu kulağa düşük gelebilir, ancak sonuç kod kalitesi ve hata hızında önemli bir iyileşme ile birlikte moral ve karlılıkta iyileşme olmuştur.
İlgili taraflardan hem doğru bir anlayışa hem de bağlılığa sahip olduğunuzda yapılabilir.
Her şeyden önce, birim testinin kendi başına bir beceri olduğunu anlamak önemlidir. "Geleneksel" standartlara göre çok üretken bir programcı olabilirsiniz ve yine de daha büyük bir projede ölçeklenecek şekilde birim testleri yazmakta zorlanabilirsiniz.
Ayrıca, ve özellikle sizin durumunuz için, mevcut bir kod tabanına testi olmayan birim testleri eklemek de kendi başına uzman bir beceridir. Siz veya ekibinizdeki bir kişi mevcut bir kod tabanına birim testleri uygulama konusunda başarılı bir deneyime sahip olmadıkça, Feather'ın kitabını okumak bir gerekliliktir (isteğe bağlı veya şiddetle tavsiye edilmez) diyebilirim .
Kodunuzu birim testine geçirmek, kod tabanının kalitesi kadar insanlara ve becerilere yapılan bir yatırımdır. Bunu anlamak zihniyet ve beklentileri yönetmek açısından çok önemlidir.
Şimdi, yorumlarınız ve sorularınız için:
Bununla birlikte, TDD'yi en başından itibaren kullansaydım, büyük resmi kaçırmam ve nihai temel testleri kaçırmamdan endişeliyim.
Kısa cevap: Evet, testleri kaçırırsınız ve evet başlangıçta yeşil alan durumunda ne gibi görünmeyebilirler.
Daha derin seviyedeki cevap şudur: Önemli değil. Test olmadan başlarsınız. Testler eklemeye başlayın ve ilerledikçe yeniden düzenleme yapın. Beceri seviyeleri iyileştikçe, projenize eklenen tüm yeni kodlar için çıtayı yükseltmeye başlayın. Geliştirmeye devam et vb ...
Şimdi, buradaki satırlar arasında okurken, bunun "hareket etmemek için bir bahane olarak mükemmellik" zihniyetinden geldiği izlenimini edindim. Daha iyi bir zihniyet, kendine güvene odaklanmaktır. Bu yüzden henüz nasıl yapılacağını bilmediğiniz için, gittiğinizde ve boşlukları nasıl doldurduğunuzu anlayacaksınız. Bu nedenle endişelenmenize gerek yok.
Yine, bu bir yetenek. Lineer bir şekilde tek bir "süreç" veya "adım adım" yemek kitabı yaklaşımı ile sıfır testlerden TDD mükemmeliyetine geçemezsiniz. Bu bir süreç olacak. Beklentileriniz kademeli ve artımlı ilerleme ve iyileştirme yapmak olmalıdır. Sihirli hap yok.
İyi haber şu ki, aylar (ve hatta yıllar) geçtikçe, kodunuz yavaş yavaş "uygun" iyi faktörlü ve iyi test edilmiş kod olmaya başlayacaktır.
Yan not olarak. Eski bir kod tabanına birim testleri yerleştirmenin önündeki engelin, uyum eksikliği ve aşırı bağımlılıklar olduğunu göreceksiniz. Bu nedenle, muhtemelen en önemli becerinin, gerçek birim testlerini kendileri yazmak yerine mevcut bağımlılıkları ve kod çözmeyi nasıl kıracağını göreceksiniz.
Mevcut çözümlerin düzgün bir şekilde birim test edildiğinden ve yalnızca bir araya getirilmediğinden emin olmak için uyulması gereken herhangi bir işlem / adım var mı?
Zaten sahip değilseniz, bir yapı sunucusu kurun ve kod kapsamındaki tüm birim testleri de dahil olmak üzere her check-in'de çalışan sürekli bir entegrasyon yapısı kurun.
Çalışanlarınızı eğitin.
Bir yerden başlayın ve müşterinin bakış açısından ilerleme kaydederken testler eklemeye başlayın (aşağıya bakın).
Kod kapsamını, üretim kodu tabanınızın ne kadarının test edildiğini gösteren bir kılavuz olarak kullanın.
Yapım süresi her zaman HIZLI olmalıdır. Yapım süreniz yavaşsa, birim test becerileriniz gecikmektedir. Yavaş testleri bulun ve geliştirin (üretim kodunu ayırın ve ayrı ayrı test edin). İyi yazılmış, kolayca binlerce ünite testine sahip olmanız ve hala 10 dakikadan kısa bir sürede bir yapıyı tamamlayabilmeniz gerekir (~ 1-birkaç ms / test iyi ama çok kaba bir kılavuzdur, yansıma kullanarak kod gibi bazı istisnalar uygulanabilir. ).
Kontrol edin ve uyarlayın.
Testlerin iyi kalitede olmasını ve sadece herhangi bir test vakasının test olmamasından daha iyi olmadığından nasıl emin olabilirim.
Kendi yargınız birincil gerçeklik kaynağınız olmalıdır. Becerinin yerini tutabilecek bir metrik yoktur.
Bu deneyim veya yargıya sahip değilseniz, bunu yapan biriyle sözleşme yapmayı düşünün.
İki kaba ikincil gösterge, toplam kod kapsamı ve oluşturma hızıdır.
Üretimde olan mevcut bir çözüm için çabaya değer mi?
Evet. Özel yapım bir sistem veya çözüme harcanan paranın büyük çoğunluğu üretime alındıktan sonra harcanır. Ve kaliteye yatırım yapmak, insanlar ve beceriler asla modası geçmiş olmamalıdır.
Bu proje için yapılan testleri göz ardı etmek ve gelecekteki olası bir yeniden yazmaya eklemek daha iyi olur mu?
Sadece insanlara ve becerilere yapılan yatırımı değil, en önemlisi toplam sahip olma maliyetini ve sistemin beklenen yaşam süresini dikkate almanız gerekir.
Davaların çoğunda kişisel cevabım "evet" olurdu, çünkü bunun çok daha iyi olduğunu biliyorum, ama istisnalar olabileceğini kabul ediyorum.
Daha faydalı ne olacak; birkaç hafta test ekleyerek veya birkaç hafta işlevsellik ekleyerek mi geçiriyorsunuz?
Ne. Yaklaşımınız işlevsellik açısından ilerleme kaydederken kod tabanınıza testler eklemek olmalıdır.
Yine, insanlara, becerilere ve kod tabanının kalitesine yapılan bir yatırımdır ve bu nedenle zaman gerektirecektir. Ekip üyelerinin bağımlılıkları nasıl kıracaklarını, birim testlerini nasıl yazacaklarını, yeni alışkanlıkları öğreneceklerini, disiplini ve kalite bilincini nasıl geliştireceklerini, yazılımı nasıl daha iyi tasarlayacaklarını vb. Öğrenmeleri gerekir. Testleri eklemeye başladığınızda, ekip üyelerinizin muhtemelen Bu becerilerin henüz bu yaklaşımın başarılı olması için olması gereken düzeyde olması, bu nedenle çok fazla test eklemek için tüm zaman harcamak için ilerlemeyi durdurmak işe yaramaz.
Ayrıca, mevcut herhangi bir büyüklükteki proje boyutunda mevcut bir kod tabanına birim testleri eklemek, taahhüt ve kararlılık gerektiren BÜYÜK bir girişimdir. Temel bir şeyi değiştiremezsiniz, yolda çok fazla öğrenmeyi bekleyemezsiniz ve iş değerinin akışını durdurarak sponsorunuzdan herhangi bir YG beklemesini isteyemezsiniz. Bu uçmayacak ve açıkçası olmamalı.
Üçüncüsü, ekibinize sağlam iş odak değerleri aşılamak istiyorsunuz. Kalite asla müşteri pahasına olmaz ve kalite olmadan hızlı gidemezsiniz. Ayrıca, müşteri değişen bir dünyada yaşıyor ve işiniz onun uyum sağlamasını kolaylaştırmak. Müşteri uyumu hem kalite hem de iş değeri akışını gerektirir.
Yaptığınız şey teknik borcu ödemek. Siz de müşterilerinize sürekli değişen ihtiyaçlarınızı karşılarken bunu yapıyorsunuz. Kademeli olarak borç ödendikçe durum iyileşir ve müşteriye daha iyi hizmet vermek ve daha fazla değer sunmak daha kolaydır. Vb Bu olumlu momentum, hedeflemeniz gereken şeydir çünkü sürdürülebilir ilerleme ilkelerinin altını çizer ve hem geliştirme ekibiniz, müşteriniz, hem de paydaşlarınız için ahlaki değeri koruyacak ve geliştirecektir.
umarım yardımcı olur