% 100 kod kapsamı boru düşü mü?


28

Ağır jquery / backbonejs web uygulamalarında% 100 kod kapsamı beklemek uygun mudur? Asıl kod kapsamı, javascript / jquery'de% 92 -% 95 arasında değiştiğinde,% 100 kapsamın karşılanmaması nedeniyle bir sprint başarısız olması makul mü?


7
"Bir sprint başarısız" garip bir şekilde uğursuz geliyor…
Donal Fellows

5
Bu bir asimptot.
Robert Harvey,

12
Tam kapsama sahip olsanız bile, bazı hatalar bulunmayacak, bu yüzden her şeyi düzeltmek için bu sayıya güvenmeyin
kilit manyağı

11
Herşey mümkün. Asıl soru,% 100 kod kapsamının değerinin zaman ve kaynaklardaki maliyete değip değmeyeceğidir.
JohnFx

5
Altta yatan varsayım -% 100 (veya başka herhangi bir sayıdaki) otomatik test kapsamının kodunuzu sihirli bir şekilde daha iyi hale getireceği durumlarda neden bu konuda endişeleniyorsunuz?
Mason Wheeler

Yanıtlar:


30

Gerçekçi olmadığı için aynı derecede gerçekçi.

Gerçekçi
Tüm kod tabanını kapsadığı gösterilen otomatik bir test yaptırdıysanız,% 100 kapsamda kalmakta ısrar etmek makul olacaktır.
Aynı zamanda projenin ne kadar kritik olduğuna da bağlı. Ne kadar kritik olursa, kod kapsamının tamamını beklemek / talep etmek daha makul olur.
Küçük ve orta ölçekli projeler için bunu yapmak daha kolaydır.

Gerçekçi
değil% 0 güvencesinde başlıyorsunuz ...
Proje, yeniden yaratılması veya tetiklenmesi zor birçok hata yoluyla canavarca.
Yönetim, kapsamın orada olduğundan emin olmak için taahhüt / yatırım yapmak istemez.

Kapsamadan terbiyeli olana kadar çeşitli projelerle çalıştım. Asla% 100'lük bir proje değil, ancak% 100'lük bir kapsamaya daha yakın olmasını dilediğim zamanlar oldu.
Nihayetinde soru, mevcut kapsamın ekibin ürünün nakliyesinde rahat olması için gereken davaları yeterince karşılayıp karşılamadığıdır.

Başarısızlığın projeniz üzerindeki etkisini bilmiyoruz, bu nedenle% 92 veya% 95'in yeterli olup olmadığını veya% 100'ünün gerçekten gerekli olup olmadığını söyleyemeyiz. Veya bu konuda% 100 tamamen beklediğiniz her şeyi test eder.


30
... Ve sadece% 100 kod kapsamına sahip olmanız,% 100 branş kapsamına sahip olduğunuz anlamına gelmez, bu nedenle% 100 kod kapsamı dahilinde bile çok şey eksik olabilir.
Bryan Oakley

3
Proje büyüklüğü için +1. Daha küçük, tekrar kullanılabilir ve test edilebilir bileşenlere ayrılmak, kendimizi ~% 95 oranında kaplamamıza izin verdi. % 100 kapsama gerekli değildir. Entegrasyon testi, birim test boşluklarını kapsamalıdır.
Apoorv Khurasia

5
@BryanOakley ... ve ayrıca testleriniz anlamsız olabilir, hatta hiçbir şeyi test
edemezsiniz

5
@BryanOakley Ve% 100 branş kapsama alanında bile, belirli bir dal kombinasyonunun bir soruna neden olması mümkündür. (örneğin, iki sıralı IF ifadesi, ayrı testler içinde ve çevresinde
dallanabilir

4
Tüm uygulama yolları dahil olmak üzere% 100 şube kapsamı bile yeterli değildir. Eğer dallarının bazı kombinasyonlarını alırken Belki hata yalnızca olur ve sen yanlış oluşturulmuş bir tarih söylemek, bazı harici girişi var. Tüm davaların çözülme olasılığı yoktur. Aynı zamanda,% 100'den daha az kapsama alanıyla ancak bir girdi olarak uygun şekilde seçilmiş kenar kasaları ile iyi bir güvene sahip olabilir.
Andrea,

32

Testleri kim test ediyor?

Teorik anlamda ve iş açısından pratik olmamakla birlikte en iyi ve gerçekçi olmamak çok saftır .

  • Yüksek döngüsel karmaşıklığa sahip kod ile gerçekçi değildir. Her kombinasyonu kapsayacak kadar çok değişken var.
  • Ağır derecede eşzamanlı olan kod ile gerçekçi değildir. Kod deterministik değildir, bu nedenle olabilecek her koşulu kapsayamazsınız çünkü davranış her test çalışmasında değişecektir.
  • İş anlamında gerçekçi değildir, yalnızca kritik yol kodu, önemli olan kod ve sık sık değişebilecek kod için testler yazmak için temettü öder.

Her kod satırını test etmek iyi bir amaç değildir

Testler yazmak çok pahalı, kendini yazması ve test etmesi gereken kod, gerçekten test etmeye çalıştığı şeyin belgelenmesi gereken kod, iş mantığı değişimleriyle sürdürülmesi gereken kod ve testler başarısız oldu çünkü güncel değiller. Otomatikleştirilmiş testlerin sürdürülmesi ve bunlarla ilgili dokümantasyon, bazen kodu korumaktan daha pahalı olabilir.

Bu, ünite testi ve entegrasyon testlerinin faydalı olmadığını söylemek değildir, ancak yalnızca anlamlı oldukları yerlerde ve insanları öldürebilecek endüstrilerin dışında, bir kod tabanında her kod satırını denemek ve test etmek mantıklı değildir. Bu kritik öldürme grubunun dışında, kod tabanlarını hızlı bir şekilde kodlayın,% 100 kod kapsamının gerektireceği olumlu bir yatırım getirisi hesaplamak mümkün değildir.

Durma problemi:

Hesaplanabilirlik teorisinde durma problemi , keyfi bir bilgisayar programı ve bir girdi tanımından programın çalışmayı bitirip bitirmeyeceğini veya sonsuza kadar çalışmaya devam edip etmeyeceğini belirleme problemidir.

Alan Turing, 1936'da, olası tüm program giriş çiftleri için durma problemini çözmek için genel bir algoritmanın bulunmadığını kanıtladı. İspatın önemli bir kısmı, bir Turing makinesi olarak bilinen bir bilgisayarın ve programın matematiksel bir tanımıydı; Durma problemi Turing makinelerinde kararsız. Karar probleminin ilk örneklerinden biridir.

Bir şeyin% 100 işe yaradığını bile kanıtlayamadığın için neden bunu hedefin haline getirdin?

Sade ve basit, çoğu durumda herhangi bir ticari anlam ifade etmiyor.


7
Bunun gerçekten kabul edilmiş bir cevap olması gerekiyor. % 100 kod kapsamı neredeyse% 0 kadar kötü.
Ryathal

1
“Her kombinasyonu kapsayacak kadar çok değişken var.” Bunun% 100 kod kapsamı almakla ilgisi yok. Bir kod satırı yazılacak kadar önemliyse ve etrafta kalacak kadar önemliyse, bir test tarafından kapsanacak kadar önemlidir. Bir test kapsamında değilse, tek güvenli varsayım işe yaramaz olmasıdır. Bazı kodlar için, test etmek için iş perspektifinden bir anlam ifade etmediği doğrudur. Bu, iş perspektifinden yazmak için mantıklı olmayan aynı koddur.
still_dreaming_1

2
Bu nedenle getXXX()/setXXX(), değer nesneleri için basit ve basit atama yapıcılarını kapsayacak sınama senaryoları yazmanın zaman ve kaynakların iyi bir şekilde kullanıldığını, aslında gerçekte böyle olmadığı için üzgünüm ve bunu destekleyecek gerçek dünya deneyiminden yoksun bir saf görüş olduğunu düşünüyorsunuz. Test kodunun hala bakımı yapılması gereken kod olduğunu unutmayın. Bir sorunu çözmek için ne kadar az kod yazarsanız her durumda o kadar iyi olur .

Uhm "Yüksek döngüsel karmaşıklığa sahip kod ile gerçekçi değil. Her kombinasyonu kapsayacak kadar çok değişken var." - elbette, bu yüzden böyle bir kodu küçük çevrimsel karmaşıklığa sahip ve böylece test etmek daha kolay olan daha küçük parçalara bölmek zorundasınız. Bu şekilde yeniden kaplama yapmak test için çok önemlidir - testi kolaylaştırır.
Predrag Stojadinović

17

Çoğu durumda,% 100 kod kapsamı, biraz "hile yaptığınız" anlamına gelir:

  • Sistemin karmaşık, sıkça değişen parçaları (GUI gibi) bildirimsel şablonlara veya diğer DSL'lere taşınmıştır.
  • Harici sistemlere dokunan tüm kodlar kütüphaneler tarafından izole edilmiş veya işlenmiştir.
  • Aynısı, diğer yan bağımlılıklar için de geçerlidir, özellikle de yan etkileri gerekenler.

Temel olarak, test edilmesi zor kısımlar, mutlaka "kod" olarak sayılmayan alanlara yönlendirildi. Her zaman gerçekçi değildir, ancak test etmenize yardımcı olmaktan bağımsız olarak, tüm bu uygulamaların kod tabanınızı üzerinde çalışmasını kolaylaştırdığını unutmayın.


DSL'lere işleri taşımak nasıl hile yapıyor?
back2dos

2
@ back2dos - Yerleşik python komut dosyalarınızla ünite testi söyleyebilmenize rağmen, muhtemelen html şablonlarınızı veya CSS'nizi test edemez veya kapsam tahminlerine yönelik satırları sayarsınız.
Dan Monego

12

% 100 branş kapsamının etkileyici, gerçek dünya örneği için bkz . SQLite Nasıl Test Edilmiştir .

Sorunuzu özellikle tamamen farklı bir yazılım ürünü olan javascript hakkında sorar, ancak yeterli motivasyonla neler yapılabileceğine dair farkındalık getirmek istiyorum.


9

Belirli bir uygulamanın tüm parçaları için birim testleri için% 100 kod kapsamı, yeni projelerle bile, boru rüyasıdır. Keşke durum böyle olsaydı, ama bazen dış bağımlılıkları özümsemek için ne kadar uğraşırsanız çalışın bir kod parçası yazamazsınız. Örneğin, kodunuzun bir web servisini çağırması gerektiğini varsayalım. Web servisi aramalarını bir arabirimin arkasına gizleyebilirsiniz, böylece o parçayı alay edebilir ve web mantığı öncesi ve sonrası iş mantığını test edebilirsiniz. Ancak web servisini çağırması gereken asıl parça birim test edilemez (yine de çok iyi). Başka bir örnek, bir TCP sunucusuna bağlanmanız gerekirse. Bir TCP sunucusuna bağlanan kodu bir arabirimin arkasına gizleyebilirsiniz. Ancak fiziksel olarak bir TCP sunucusuna bağlanan kod ünite test edilemez, çünkü herhangi bir nedenden dolayı düşerse, bu durum ünite testinin başarısız olmasına neden olur. Ve birim testleri ne zaman başlatıldıklarına bakılmaksızın her zaman geçmelidir.

İyi bir kural, tüm iş mantığınızın% 100 kod kapsamına sahip olması gerektiğidir. Ancak dış bileşenleri çağırması gereken parçaların mümkün olduğunca% 100 kod kapsamına sahip olması gerekir. Eğer ulaşamazsan, fazla terlemem.

Çok daha önemli, testler doğru mu? İşletmenizi ve gereksinimlerinizi doğru bir şekilde yansıtıyor mu? Kod kapsamına sahip olmak, yalnızca kod kapsamasına sahip olmak, yaptığınız tüm yanlış testler veya yanlış kodları test etmek anlamına gelmez. Bu, eğer testleriniz iyi ise,% 92-95 oranında kapsama sahip olması olağanüstüdür.


1
Garip hata durumları ve cevaplanamayan cevaplar aldığınızda ne olduğunu test etmek oldukça zor olabilir.
Donal Fellows,

Bu zor problemlerle karşılaşıldığında sisteminizin ne yapacağını anlama, birim testinin çekiciliğinin bir parçası mı? Ayrıca, burada birim testleri ve entegrasyon testleri arasında biraz karışıklık var.
Peter Smith

Bu arada tutmaya çalışıyor unit testingile integration testing, test kod yazma edilir vermedi integrationtest. TCP yığını işletim sisteminde olup olmadığını test etmemelisiniz, daha önce bunu yazan kişi tarafından test edilmiş olduğunu varsaymalısınız.

4

Kod,% 100 test kapsamına izin vermek için belirli bir amaç için tasarlanmadığı sürece% 100 elde edilemeyebilir. Sebeplerden biri, savunmayı kodlamanız durumunda - ki hangisini yapmalısınız - bazen sistemle ilgili bilginiz verildiğinden emin olmamanız gerektiğine ya da olamayacağınıza emin olmanız gereken kodları kullanmanız gerekir. Bu tür kodları testlerle ele almak tanım olarak çok zor olacaktır. Bu tür bir kodun bulunmaması tehlikeli olabilir - ya yanılıyorsanız ve bu durum 256'dan bir kez meydana gelirse? Ya ilgisiz yerde, imkansız olanı mümkün kılan bir değişiklik olursa? Öyleyse,% 100'e "doğal" yollarla ulaşmak oldukça zor olabilir - örneğin, belleği ayıran bir kodunuz varsa ve bellek yöneticisini alay etmediğiniz sürece (başarısız olabilir) başarısız olup olmadığını kontrol eden bir kodunuz varsa ve bu kodu kapsayan zor olabilir, "bellek yetersiz" döndüren bir test yazın. JS uygulaması için, farklı tarayıcılarda olası DOM tuhaflıkları, harici hizmetlerin olası hataları vb.

Bu yüzden, birinin mümkün olduğunca% 100'e yakın olması için çaba göstermesi gerektiğini ve delta için iyi bir nedeninin olması gerektiğini söyleyebilirim, ancak kesin olarak başarısızlığın% 100'ünü alamayacağımı görmüyorum. % 95'ine bağlı olarak% 95'i büyük bir projede iyi olabilir.


Kodun normal şartlar altında üretimde çalıştırılmaması gerektiği, testlerin çalıştırılacağı şekilde yazılamadığı anlamına gelmez. Olağandışı kodun doğru çalışması için ne kadar önemlidir? Testlerle kapatmak yeterince önemli mi? Testlerle örtülecek kadar önemli değilse, bu olayla ilgilenecek kadar önemli olmadığını savunuyorum. Testlere ihtiyaç duymayan kod, var olması gerekmeyen ve silinmesi gereken koddur.
still_dreaming_1

2

Eğer yeni bir projeyle başlıyorsanız ve kesinlikle bir test-ilk metodolojisi kullanıyorsanız, testlerinizin uygulandığı sırada tüm kodunuzun bir noktada çağrılacağı anlamında% 100 kod kapsamına girmeniz tamamen mantıklı olacaktır. idam edildi. Bununla birlikte, her bir metodu veya algoritmayı, metot görünürlüğü nedeniyle doğrudan test etmemiş olabilirsiniz ve bazı durumlarda bazı metodları dolaylı olarak bile test etmemiş olabilirsiniz.

Kodunuzun% 100'ünün test edilmesi potansiyel olarak pahalı bir egzersizdir, özellikle sisteminizi bu hedefe ulaşmanıza izin verecek şekilde tasarlamadıysanız ve tasarım çalışmalarınızı test edilebilirliğe odaklıyorsanız, muhtemelen yeterince dikkatinizi vermiyorsunuzdur. Uygulamanızı, özellikle projenin büyük olduğu durumlarda, özel gereksinimlerini karşılayacak şekilde tasarlamak. Üzgünüm, ama hiçbir şeyden ödün vermeden iki şekilde de sahip olamazsınız.

Daha önce testlerin sürdürülmediği veya dahil edilmediği mevcut bir projeye testler sunuyorsanız, eforun ağırlığındaki egzersizin masrafları olmadan% 100 kod kapsamı elde etmek mümkün değildir. Önceden umut verebileceğiniz en iyi şey, kod adı verilen en kritik bölümler için test kapsamı sağlamaktır.

Asıl kod kapsamı, javascript / jquery'de% 92 -% 95 arasında değiştiğinde,% 100 kapsamın karşılanmaması nedeniyle bir sprint başarısız olması makul mü?

Çoğu durumda, sprintinizin yalnızca hedeflerinizi gerçekleştirmediyseniz 'başarısız' olduğunu düşünmeniz gerektiğini söyleyebilirim. Aslında, böyle durumlarda sprintlerin başarısız olduğunu düşünmemeyi tercih ederim, çünkü bir sonraki sprint tanımladığınızda planlamanızı doğru yapmak için beklentileri karşılamayan sprintlerden öğrenebilmeniz gerekir. Ne olursa olsun, kod kapsamını bir sprintin göreceli başarısında bir faktör olarak kabul etmenin makul olduğunu sanmıyorum. Amacınız, her şeyin belirtildiği şekilde çalışmasını sağlayacak kadar yapmak ve ilk önce test kodunu kullanıyorsanız, testlerinizin bu amacı destekleyeceğinden emin olmanız gerekir. Eklemeniz gerekebileceğini düşündüğünüz herhangi bir ek test etkili bir şekilde şeker kaplamadır ve böylece sprintlerinizi tatmin edici şekilde tamamlamada sizi tutabilecek ilave bir masraftır.


“Üzgünüm, ama hiçbir şeyden ödün vermeden iki şekilde de sahip olamazsınız.” Bu doğru değil. Her zaman özellikleri geri ölçekleyebilir veya daha yavaş gidebilirsiniz. Bir şey test etmeye değmiyorsa yazmaya değmez. Eğer bir kod satırı etrafta kalacak kadar önemliyse, test etmek için de önemlidir. Test edilecek kadar önemli değilse, etrafta kalacak kadar önemli değildir. Test edilmeyen bir kod satırının tek güvenli varsayımı, çalışmadığıdır.
still_dreaming_1

@ still_dreaming_1, açıklamamı destekliyor ve kendinizle çelişiyor görünüyorsunuz. Özelliklerin yeniden ölçeklendirilmesi veya son tarihlerin değiştirilmesi, her biri proje maliyetini ve paydaş beklentilerini etkileyebilecek olan ödünlerdir. Daha önce tam olarak test edilmemiş olan eski kodu test etmek son derece zordur, çünkü yalnızca çalıştığı gibi kodu değil, orijinal yaratıcının amaçlarını ve mevcut eski kod davranışını yakalayan testleri yazmanın mutlaka gösterilmesi gerekmez. kodun tamamen olması gerektiği gibi çalıştığını.
S.Robins

Sanırım benim açımdan, gelişimden daha hızlı hareket ettiği için henüz yaratılmayan özellikler ya da değişikliklerin tehlikeye düşmüş olduğu, gerçek bir uzlaşma olmadığı, çünkü daha hızlı hareket etmek için kapsamı kaybederseniz, bu özellik ve değişiklikler olabilir. Sadece yine de doğru çalışmadığı varsayılır. Öyleyse, doğru çalışıp çalışmadıkları önemli değilse, bu değişiklikleri yapmanın veya bu özellikleri eklemenin amacı neydi? Doğru çalışıp çalışmamaları önemli değilse, bu değişikliklerin yapılması gerekmedi ve şimdi kodun dışına atılmalıdır.
still_dreaming_1 13

Artık tamamen inanmıyorum ya da en azından konuştuğunuz gerçeğin pratik yönünü, özellikle de eski bir kod tabanında fark ettim, bu yüzden o zaman yapmaya çalıştığım noktanın bir açıklaması. Aslında, şimdi% 100 kapsama almanın yanı sıra, yeni bir kod tabanında TDD'yi her zaman yapmak konusunda bile tamamen çelişiyorum. Bir yandan, her mantık ve akıl biçimi bana her ikisinin de iyi olması gerektiğini söylüyor, ancak pratikte pratik yapamıyorum. Yani programlama dünyasında bir şeyler yanlış, yeni bir paradigmaya ihtiyacımız var.
still_dreaming_1

1

Bunu elbette yapmıyorum ama iki büyük projede yaptım. Zaten ayarlanmış birim testleri için bir çerçeveye sahipseniz, tam olarak zor değildir, ancak çok fazla test ekler.

Karşılaştığınız, bu son birkaç çizgiye çarpmanızı önleyen belirli bir engel var mı? Olmazsa,% 95'ten% 100'e kadar kapsama almak kolay ise, o zaman gitmeye devam edebilirsiniz. Burada sorduğun için , bir şey olduğunu kabul edeceğim . Bu da ne?


Bu, burada en iyi cevaplardan biridir. Neyin bir kod satırının kolayca toplanmasını engellediğini sormak iyi bir sorudur. Bu satırları kapatacak olmanız için kodu geliştirmeye zorlarsınız, bu nedenle bir kazan, kazan olacaktır.
still_dreaming_1

0

% 92 iyi. Gerçek soruların şöyle olduğunu hissediyorum:

  • % 92 şimdi 'yeni' normu mu? Bir sonraki sprint% 88 teste sahipse, sorun olur mu? Bu genellikle terkedilmiş test süitlerinin başlangıcıdır.

  • Yazılımın çalışması ve hata olmaması ne kadar önemlidir. Bu nedenlerden dolayı test yapıyorsun, "test uğruna" değil.

  • Geri dönüp eksik testleri doldurmak için bir plan var mı?

  • Neden test ediyorsun Odaklanılan bölüm% fonksiyonellik değil kapalı


"Yazılımın çalışması ve hata olmaması ne kadar önemlidir"? İyi soru. Bir hatanın tanımı nedir? Amaçlandığı gibi çalışmayan bir şey. Bazı kodların doğru çalışmaması uygunsa, yazmayın. Kodun tamamı onun çalışması için.
still_dreaming_1

0

Martin Fowler blogunda yazıyor :I would be suspicious of anything like 100% - it would smell of someone writing tests to make the coverage numbers happy, but not thinking about what they are doing.

Bununla birlikte, birim seviyesinde% 100 kapsamayı zorunlu kılan standartlar bile vardır. Örneğin, Avrupa uzay uçuşu topluluğunun (ECSS, Avrupa Uzay Standardizasyonu İşbirliği) standartlarındaki şartlardan biridir. Buraya bağlanan makale , daha önce tamamlanmış bir yazılımda% 100 test kapsamına ulaşmayı hedefleyen ilginç bir proje hikayesini anlatıyor. Birim testlerini geliştiren ilgili mühendislerle yapılan görüşmelere dayanmaktadır.

Derslerden bazıları:

  • % 100 teminat olağandışı ancak elde edilebilir
  • % 100 kapsama bazen gereklidir
  • % 100 kapsam yeni riskler getiriyor
  • % 100 metrik için optimize etmeyin
  • Kapsamı en üst düzeye çıkarmak için uygun bir strateji geliştirmek
  • % 100 kapama kalitesi için yeterli bir şart değildir

0

Belki uygulanabilir ve makul olup olmadığını sormak, sorulacak en yararlı sorular değildir. Muhtemelen en pratik cevap kabul edilmiştir. Bunu daha felsefi bir düzeyde analiz edeceğim.

% 100 kapsama alanı ideal olacaktır, ancak ideal olarak, ihtiyaç duyulmayacak veya elde edilmesi çok daha kolay olacaktır. Yapılabilir ya da makul olmaktan ziyade doğal ve insan olup olmadığını düşünmeyi tercih ederim.

Doğru programlama, bugünün araçlarıyla imkansızdır. Tamamen doğru olan ve hataları olmayan kodlar yazmak çok zor. Bu sadece doğal değil. Bu nedenle, bariz bir seçenek olmadan TDD gibi tekniklere ve kod kapsamını izlemeye gidiyoruz. Ancak sonuç hala doğal olmayan bir süreç olduğu sürece, insanları sürekli ve mutlu bir şekilde yapma konusunda zorlanacaksınız.

% 100 kod kapsamı elde etmek doğal olmayan bir işlemdir. Çoğu insan için, onları başarmaya zorlamak, bir tür işkence olacaktır.

Doğal zihinsel modellerimizle eşleşen süreçlere, araçlara, dillere ve koda ihtiyacımız var. Bunu başaramazsak, kaliteyi bir üründe test etmenin bir yolu yoktur.

Bugün oradaki tüm yazılıma bak. Birçoğu oldukça düzenli bir şekilde karışıyor. Buna inanmak istemiyoruz. Teknolojimizin büyülü olduğuna inanmak ve bizi mutlu etmek istiyoruz. Ve böylece teknolojimizin sık sık karıştığı şeyleri görmezden gelmeyi, mazeret etmeyi ve unutmayı seçiyoruz. Ancak olayların dürüst bir şekilde değerlendirilmesini sağlarsak, bugünkü yazılımların çoğu oldukça berbattır.

Kodlamayı daha doğal hale getirmek için birkaç çaba:

https://github.com/jcoplien/trygve

https://github.com/still-dreaming-1/PurposefulPhp

Daha sonra son derece eksik ve deneysel. Aslında bu benim başlattığım bir proje, ancak tamamlama için kendime zaman ayırabilirsem, programlama sanatı için ileriye doğru büyük bir adım olacağına inanıyorum. Temel olarak, eğer sözleşmeler bizim değer verdiğimiz bir sınıf davranışının tek yönlerini ifade ediyorsa ve sözleşmeleri zaten kod olarak ifade ediyorsak, neden yalnızca sözleşmelerle birlikte sınıf ve yöntem tanımlarının olmadığı da bir fikirdir. Bu şekilde sözleşmeler kod olacaktır ve tüm yöntemleri uygulamamız gerekmez. Kütüphanenin bizim için yapılan sözleşmeleri nasıl onurlandıracağını bulmasına izin verin.


-2

Yeni kodda% 100'e ulaşmak çok başarılı olmalı ve TDD'yi uyguluyorsanız, üretim kodunun her satırı için çok fazla test yazarken muhtemelen varsayılan olarak buna çarpacaksınız.

Ünite testi olmadan yazılmış mevcut eski kodda, eski test kodu akılda tutularak yazılmadığından ve çok sayıda yeniden düzenleme gerektirdiğinden, eski kodlar zor olabilir. Bu yeniden yapılanma düzeyi genellikle risk ve zamanlamanın gerçekleri göz önüne alındığında pratik değildir, bu nedenle işlemlerinizi gerçekleştirirsiniz.

Ekibimde% 100 kod kapsamı belirtiyorum ve kod incelemesinde bundan daha azını görürsek, bileşenin teknik sahibinin% 100 geliştiriciye neden erişilmediğini ve geliştiricinin mantığını kabul etmesi gerektiğini tartışın. Genellikle,% 100'e ulaşmada bir sorun varsa, geliştirici kod incelemesinden önce teknik sahiple konuşacaktır. Alışkanlık haline geldikten ve bazı ortak meseleler üzerinde çalışmak için teknikler öğrendikten sonra, eski% 100'e düzenli olarak vurmanın ilk başlarda düşündüğünüz kadar zor olmadığını test ederek kodları test ederek öğrendik.

Michael Feather'ın " Eski Kodla Etkili Çalışma " adlı kitabı , eski kodumuza testler eklemek için stratejiler geliştirdiğimiz için bizim için çok değerli oldu.


-3

Hayır, mümkün değil ve asla olmayacak. Mümkün olsaydı tüm matematik finalitizm içine düşecekti. Örneğin, iki 64 bit tam sayı alan ve çarpılan bir işlevi nasıl test edersiniz? Bu, her zaman bir programın doğru olduğunu kanıtlamaya karşı test etmedeki sorunum olmuştur. En önemsiz programlardan başka herhangi bir şey için, test, yalnızca az sayıda vakayı kapsadığı için temel olarak işe yaramaz. 1000 numarayı kontrol etmek ve Goldbach varsayımını kanıtladığını söylemek gibi.


Ah! Bu yüzden, biri problemi kendi anlayışı ile çözemediğim için üzgün; Testler bir atık… Popüler olup olmadığı umrumda değil. Asla işe yaramayacak. Olamaz. En zeki bilgisayar bilimcileri bunu biliyorlardı (Dijkstra, Knuth, Hoare ve diğ.). Bir eXtreme Programlama çalışan bir JavaScript programcısıysanız sanırım bu krankları umursamıyorsunuz. Blah, herneyse, kimin umrunda ... berbat kod yaz. Testlerinizi yürüten atık CO ^ 2. - Yani, artık oturup düşünecek zamanı olan var mı? Bunu bilgisayara verdik.
aptalca

3
Soru "TDD" olarak etiketlendi. TDD, testten ziyade bir tasarım aracı ve sorun arama aracıdır ve her "test", kodun bazı bağlamlarda nasıl davranacağına bir örnektir. . TDD, daha temiz, kullanımı kolay kodlara yol açma eğilimindedir ve testlerin yapılması belgelerin güncel olup olmadığını kontrol eder. Çoğu TDD takımı bugüne kadar hiç böcek bulamaz; Onlar bunun için orada değiller. Sanırım reddedilmişsinizdir çünkü cevabınız bu anlayış eksikliğine ihanet eder ve umarım bu yorum bu konuda yardımcı olur.
Lunivore
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.