Günlük, pratik terimlerle konuşmak gerekirse, tamamen bağlama bağlı olduğunu düşünüyorum .
Med-büyük bir ekipte, yüksek / çok yüksek standartlarda (bankacılık, askeri, büyük ölçekli, yüksek bütçeli veya iş açısından kritik sistemleri düşünün) çalışmak, o zaman açıkça "hata ayıklama" nın "testin bir sonucu" olması gerektiğini düşünüyorum ve bunlar açıkça çok farklı şeyler . İdeal olarak test, hata ayıklamaya (bir hazırlama ortamında) yol açar ve üretimde ikisinden birine sıfır gerekir.
Test kapsamı geniştir, düzenli ve çok resmidir - hata ayıklama, belirli bir arızayı düzeltmeye ihtiyaç duyulduğunda zaman zaman meydana gelen belirli bir süreçtir - bu açık değildir ve bir sistemin işleyişi ve sonuç çıktılarının daha derin bir incelemesini gerektirir.
Burada aklımda test yapmak önemli bir şeyken, hata ayıklama sadece bir başarısızlığın çözümü opak olduğunda gerekli olan özel bir araçtır.
Büyük ekipler ve / veya sistemler için TDD'deki bariz faydayı "buggy" olarak karşılayamayacağından tamamen anlıyorum . Ayrıca, karmaşık (genellikle "arka uç") sistemler için veya kodda çıktıya kıyasla yüksek oranda karmaşıklık olması durumunda çok mantıklıdır. Daha sonra "test etme" işleminin, hataların ne zaman ve neden oluştuğunu bildirme konusunda gerçekçi bir şansı vardır. Çok karmaşık işler yapan veya açıkça ölçülebilir çıktılarla sonuçlanan sistemler genellikle kolaylıkla test edilebilir ve bu nedenle testler hata ayıklamadan farklıdır. Bu gibi durumlarda testler, beklentilerle fiili çıktıların eşleşmesini doğrulamak veya onaylamamak için prosedüre dayalı, resmileştirilmiş bir yöntemi kuvvetle ima eder. Test her zaman gerçekleşir ve zaman zaman hata ayıklama ihtiyacını bize bildirir.
Bu her yerde bulunan bir gerçek olsaydı çok güzel olurdu, dev döngülerim açıkça tanımlanmış ikili çıktı (kırmızı, yeşil) ile sınırlandırılmış olsaydı çok isterdim ama ...
Benim durumumda (kuşkusuz - küçük-orta ölçekli, yetersiz finanse edilmiş web tabanlı, veri odaklı kurumsal yönetim sistemlerinde% 98 yalnız çalışan) TDD'nin bana nasıl yardımcı olabileceğini gerçekten göremiyorum. Daha doğrusu, "hata ayıklama" ve "test etme" hemen hemen aynıdır.
Esas olarak, "test" teriminin kullanımı TDD metodolojisi ile ilgilidir / yakından ilişkilidir.
Bunun tamamen, tamamen Zeitgeist olmayan bir "inanmayanlardan uzak dur, shun, shun" olduğunu söyleyebilirim. Ama bağlamımı düşünerek, pratik bir şapka ile belirsiz bir şekilde bile değilim, en vahşi hayal gücümde TDD'nin müşterilerime para için daha fazla değer sunmama nasıl yardımcı olabileceğini görün.
Ya da daha doğrusu, "test etmenin" resmi kod tabanlı bir süreç olduğu ortak varsayımına kesinlikle katılmıyorum.
Temel itirazım (benim özel * bağlamımda geçerlidir ) ...
Eğer güvenilir çalışan kod yazamıyorsanız - o zaman nasıl cehennem am güvenilir muhtemelen alt standart kod test etmek için çalışır kod yazmak gerekiyordu .
Bana göre ben bile rahatsız yeterince beni enthused (benim özel bağlamda) Herhangi bir örnek ne de bir argüman olduğunu görmedim düşünme konusunda tek testi yazma , şu anda, belki "Kullanıcı benim depo dönüşü yapan bazı gülünç temelsiz test kod yazmadan olabilir Adı == X olan bir varlık, tam olarak - ve sadece - bunu istediğimde? ", ancak muhtemelen bu akışı yazarken daha fazla yardımcı program var, belki de internet-gerçekten-sadece-saf-aptal-spouting- kendi kendine sevindirici-çılgınca bilgili-kan-kaynar-imha edici-savurgan-saçma çöp, ama burada sadece şeytanın avukatı oynama ihtiyacını hissediyorum. (Birisinin bana ışığı göstermesini ve beni dönüştürmesini umuyorsunuz, belki de bu müşterilerime para için daha iyi değer verir mi?).
Tartışmalı olarak "hata ayıklama" bazen "test" ile aynıdır. Bununla, günlük çalışma hayatımda, zamanımın en az üçte birini farklı tarayıcılarda sistemimin yerel sürümü ile oynayarak, işimi kırmak ve sonra araştırmak için çaresizce çeşitli farklı tuhaf şeyler denemek için harcadığımı gerçekten kastediyorum. başarısız olmasının nedenleri ve düzeltilmesi.
Ben% 100 TDD mantra "kırmızı / yeşil / refactor" bariz yarar katılıyorum, ama benim için (düşük med bütçe, solo dev RIA arazi çalışma) Gerçekten bana nasıl olabileceğini göstermek için gerçekten isterim Muhtemelen , mantıksal ve hayati olarak gerçekçi bir şekilde, gerçek insan etkileşimlerine bağlı olan çabalarımın tam (ve esasen sadece) çıktısıyla etkileşime girmekten daha fazla ( potansiyel olarak kusurlu test kodu gibi) yazmaktan herhangi bir ek değer elde edin .
Benim için geliştiriciler "test" hakkında konuştuğunda, bu genellikle TDD anlamına gelir.
Testler varmış gibi kodlamaya çalışıyorum, tüm bu test odaklı geliştirmenin teşvik ettiği tüm desen / uygulamalar ve trendlerin harika ve güzel olduğunu düşünüyorum, ancak benim için küçük dünyamda "test" daha fazla kod yazmıyor, aslında gerçek dünyayı test etmek, onu gerçekçi bir şekilde ortaya çıkarır ve bu, hata ayıklama ile hemen hemen aynıdır veya buradaki aktif değişiklik, insan, çıktı merkezli otomatik olmayan "testlerin" doğrudan bir sonucu olan "hata ayıklama" dır. Bu, otomatik ve biçimsel bir şey olarak "test etme" ve insani ve geçici veya yapılandırılmamış bir şey olarak "hata ayıklama" görüşünün aksine.
Hedef gerçekten para / çaba için değerse ve web tabanlı etkileşimli uygulamalar yapıyorsanız, çabanın çıktısı web sayfalarıdır ve en temelde insan girdisine nasıl tepki verdiğidir - bu nedenle "test" en iyi şekilde test edilerek elde edilir bu web sayfalarını, gerçek insan etkileşimi yoluyla. Bu etkileşim beklenmedik veya istenmeyen çıktılara yol açtığında "hata ayıklama" meydana gelir. Hata ayıklama, program durumunun gerçek zamanlı denetimi fikriyle de yakından ilgilidir. Testler genellikle talihsiz bir ilişki olduğunu düşündüğüm otomasyonla ilişkilidir.
Hedef gerçekten çaba için değerse ve otomatik test etkili ve son derece faydalıysa, hata ayıklama sadece bu testin bir çıktısı veya otomatik testin zayıf bir alternatifi ise, neden dünyanın en çok ziyaret edilen ikinci web sitesi (Facebook) ) sık sık körü körüne belirgin (kullanıcılara, ancak test ekibi ve test kodu açıkça değil) hatalar ile bilmece?
Belki de güven verici yeşil ışıklara odaklandıkları ve işlerinin çıktılarını gerçekten kullanmayı unuttukları için mi?
Çok fazla geliştirici, testin kodla yaptığınız bir şey olduğunu düşünüyor mu ve hata ayıklama, bir simge kırmızıya döndüğü ve nedenini çözemediğiniz için IDE ile ara sıra yaptığınız bir şey mi? Bu kelimelerin kendileriyle ilişkili talihsiz değer yargıları olduğunu düşünüyorum, bu da genellikle beklentiler ve çıktılar arasındaki boşlukları kapatmak için odaklanmamız gereken şeylerin pratik gerçekliğini gizliyor.