Test Tahrikli Geliştirme OO ile sınırlı mı? Yoksa prosedürel bir dil ile birlikte kullanmak mümkün mü? Önümüzdeki birkaç hafta içinde daha büyük bir projeye başlamalıyım ve gelişmenin yollarını düşünüyorum.
Test Tahrikli Geliştirme OO ile sınırlı mı? Yoksa prosedürel bir dil ile birlikte kullanmak mümkün mü? Önümüzdeki birkaç hafta içinde daha büyük bir projeye başlamalıyım ve gelişmenin yollarını düşünüyorum.
TDD bir dizayn paradigma ve bunun gibi herhangi bir özel programlama paradigmasına bağlı değildir.
Basitçe söylemek gerekirse, kodunuzu yazmadan önce kodunuz için bir test yaparsınız.
Görmek bu C (Bowling Oyunu Kata) ile TDD hakkında slayt güverte.
Test Tahrikli Geliştirme, sadece test paterni ile başlayan kodunuzu geliştirmeniz, ardından testi geçene kadar fonksiyonellik geliştirmeniz anlamına gelir. Bu, herhangi bir programlama paradigmasına eşit şekilde uygulanabilir: yapılandırılmış / prosedürel, nesne yönelimli, işlevsel - girişleri ve çıktıları alabilen herhangi bir şey test edilebilir.
James Grenning'in kitabını kontrol et Gömülü C için Tahrik Edilen Geliştirme Testi. İçinde iki TDD çerçevesinin nasıl kullanılacağına dair anlamlı örnekler sunuyor (Birlik ve CppUTest) C'yi test etmek
TDD'nin OO ile sınırlı olduğunu sanmıyorum.
Unity & CMock çerçevelerini deneyin.
wikilerinden bir örnek:
void test_ShowSomeSillyExamples(void) { TEST_ASSERT_NOT_EQUAL(0, -1); TEST_ASSERT_EQUAL_INT(1, 1); TEST_ASSERT_EQUAL_HEX16(0x1234, 0x1234); TEST_ASSERT_EQUAL_STRING("These Are The Same", "These Are The Same"); TEST_ASSERT_BITS(0x1111, 0x5555, 0x7175); TEST_ASSERT_INT_WITHIN(5, 100, 102); }
Kitap:
Bu şeyler hakkında bir Yahoo grubu:
Eğer TDD'yi C'ye yaparsanız, testlerinizi C'ye yazmanız mı gerekir? Muhtemelen C'deki üretim kodunu ve Google'ın gtest'ini kullanarak C ++'daki testleri yazacağım.
Diğerlerinin de belirttiği gibi, TDD kendi içinde OOP'a bağlı değildir. Bununla birlikte, pratikte modülerliğe bağlıdır. Her bir birim testi, sadece programın çok sınırlı bir bölümünü test etmelidir, bu yüzden çok fazla küresel durumunuz varsa, bu programı birimden test etmek neredeyse imkansız olacaktır.
C dilinde modüler programlar yazmak kesinlikle mümkündür, ancak farklı teknikler gerektirir. TDD sizi modüler bir program yazmaya zorlayabilir, ancak modüler C-programları yazmak için kullanılmazsanız, geliştirme sürecinizi durdurabilir.
TDD Wikipedia tarafından tanımlanmış aşağıdaki gibi:
Test odaklı geliştirme (TDD) bir yazılım geliştirme tekniği çok tekrarına dayanır kısa gelişim döngüsü: önce geliştirici başarısız bir otomatik yazıyor İstenen tanımlayan test durumu iyileştirme veya yeni işlev, sonra Bu testi geçmek için kod üretir ve son olarak yeni kodu refactors kabul edilebilir standartlar.
Burada kesinlikle OOP'a özel bir şey yok. Aksine, TDD her türlü programlama için oldukça uygundur. Özellikle, C de dahil olmak üzere prosedürel bir dil ile birlikte kullanılması kesinlikle mümkündür.
C için birim test çerçeveleri vardır. "C birim testi" için googling bazılarını ortaya çıkaracaktır. TDD ile C'de birkaç proje yazdım ve kesinlikle TDD sadece OO dilleri için değil. C.'de TDD yapmak zor olsa bile
TDD, kod yazmadan önce Birim Testi'ni kullandığınızı (Önce Test Et) ve bununla birlikte tasarımın C sürücüsünü kullandığınızı, ancak karşılaştığınız iki sorunu hayal ettiğinizi gösterir (denemedim).
Büyük bir proje ise derleme yavaşlığı, TDD geliştirme ve kod çalıştırma sık sık bebek adımları gerektirir, C / C ++ derleme daha C #, java, vs .. ve hatta daha yavaş dinamik dillerden daha yavaş :).
İzolasyonda test etme, alt sistemleri birbirine bağlama, böylece her birini ayrı ayrı test etmelisiniz (çünkü TDD'lisiniz, bu yüzden henüz uygulanmayan sistemlere sahip olursunuz, ancak bunlara bağımlı olursunuz veya testlerinizin dış etkilerle FileSystem, Sockets, vb ..) ve tabii ki de uygulama ve tasarımın ölçeğine bağlı olarak, bunu yapmanın stratejileri ne olduğunu bilmiyorum, fonksiyon göstergelerini geçirmeyi hayal ediyorum (Yani bir testte işlev için sahte işlev) gitmek için bir yol olurdu, ama bunu araştırmak zorundasınız.
Teşekkürler