Soru C programlama ve TDD


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.


27
2018-04-04 10:25


Menşei


Zaten sordun stackoverflow.com/questions/2343420/... bu yüzden çok iyi biliyorsun kutu birim testi düz prosedür kodu. Bu soruyu gereksiz kılıyor. Ayrıca bakınız stackoverflow.com/search?q=[c]+unit+test . - dmckee


Cevaplar:


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.


38
2018-04-04 10:31



Sonuncusu, sunumun 122 slaytına işaret eden 3 satırlık bir cevap. Bunu sevdim. - Błażej Michalik


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.


8
2018-04-04 10:30





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

"Test-Driven Development for Embedded C" book cover


7
2017-07-18 21:38



Bu kitap, gömülü olmayan programcılar için hala yararlı mı? - MrPickles


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);
  }

görmek: http://sourceforge.net/apps/trac/embunity/wiki

Kitap:

http://www.pragprog.com/titles/jgade/test-driven-development-for-embedded-c

Bu şeyler hakkında bir Yahoo grubu:

http://tech.groups.yahoo.com/group/AgileEmbedded/

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.


6
2018-04-04 10:40





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.


5
2018-04-04 12:03





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.


3
2018-04-04 10:49





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


1
2018-04-04 12:15





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


1