SORU
14 NİSAN 2009, Salı


Ne kadar büyük bir miras (C/C ) birim testi kod temeli tanıtmak mı?

Biz bir büyük, multi-platform uygulama C ile yazılmış (bir küçük ama artan miktarda C ) gelişti yıllar boyunca birçok özelliği ile beklediğiniz büyük bir C/C uygulama:

  • 0* *cehennem
  • Zor test edilebilir kod yalıtmak için büyük dosyaları
  • Kolayca test edilebilir olması için çok karmaşık fonksiyonları

Bu kodu gömülü cihazlar için hedeflenen bu yana, yükü bir sürü gerçek hedef üzerinde çalıştırmak için. Geliştirme ve test daha yapmak için yerel bir sistem üzerinde hızlı döngüleri isteriz. Ama "yapıştır .içine kopyala/klasik strateji önlemek istiyorum c sisteminizdeki dosya, hataları düzeltmek, kopyala/yapıştır". Eğer geliştiriciler için sorun gitmek için gidiyoruz eğer, aynı test daha sonra yeniden ve otomatik bir şekilde çalıştırmak için güçlü olmak istiyoruz.

İşte sorun: daha modüler olması için kodu yeniden oluşturulması için, biz daha test edilebilir olması gerekir. Ama otomatik birim testleri tanıtmak amacıyla, daha modüler olmalıyız.

Tek sorun bizim dosyalar çok büyük olduğundan, bir işlevi çağıran bir dosya içinde bir işlev olabiliraynı dosya içindeiyi bir birim test yapmak için saplama gerekiyor. Bu kodumuzu daha modüler hale geldikçe daha az sorun olacak gibi görünüyor, ama bunun için daha çok yolumuz var.

Düşündüğümüz bir şey hakkında "bilinen" yorum kaynak kodu. test edilebilir olması için etiketleme yapıyordu Sonra bir komut dosyası test edilebilir kod taraması kaynak dosyaları yazmak, ayrı bir dosyada derleme ve birim testleri ile bağlantı yapabiliriz. Yavaş yavaş kusurları düzeltmek ve daha fazla işlevsellik olarak Ekle ünite testi öğretebiliriz.

Ancak, bu düzen (tüm gerekli saplama fonksiyonları ile birlikte) bakımı bir çok zorluklar olacak endişe var, ve geliştiriciler birim testlerini bakımı duracaktır. Başka bir yaklaşım, otomatik olarak tüm kod taslakları oluşturan bir araç kullanın, ve bu dosyaya bağlantı. (bu yapacak bulduk aracı sadece pahalı ticari bir ürün) Ama bu yaklaşım gibi görünüyorgerektirirtüm kod bile başlamadan önce daha modüler olması, sadece dış aramalar saplama olabilir beri.

Kişisel olarak, geliştiriciler dış bağımlılıklarını düşün ve akıllıca kendi koçanları yazmayı tercih ederim. Ama bu, 10,000 satır korkunç bir şekilde büyümüş bir dosya için tüm bağımlılıkları saplama için çok zor olabilir. Bütün dış bağımlılıkları için taslakları korumak için gereken geliştiriciler ikna etmek zor olabilir, ama bunu yapmak için doğru yol mu? (Duyduğum bir diğer değişken bir alt sistemi sürdürücü onların alt koçanları muhafaza etmeli. Ama "eğer" kendi taslakları yazmak için daha iyi birim test yol açar mı?) geliştiriciler zorlayarak merak ediyorum

#İfdefs, tabii ki, sorun başka bir boyut eklemek.

Bazı C/C tabanlı birim test çerçeveler görünüyordu ve iyi görünen bir çok seçenek vardır. Ama geçişi kolaylaştırmak için hiçbir şey bulamadık "hiçbir birim testleri kod tüy yumağı" için "birim test edilebilir kod".

İşte bunu isteyen herkes için sorularım bu kadar:

  • İyi bir başlangıç noktası nedir? Doğru yöne mi gidiyoruz, yoksa eksik bir şey belli mi?
  • Araçlar geçiş yardımcı olmak için yararlı ne olabilir? bütçemiz şu anda kabaca olduğundan (tercihen ücretsiz/açık kaynak,"") sıfır

Not, inşa çevremizi/UNIX Windows-sadece araçları kullanamayız tabanlı bir Linux.

CEVAP
14 NİSAN 2009, Salı


< . p ^"geçişi kolaylaştırmak için hiçbir şey bulamadık "hiçbir birim testleri kod tüy yumağı" için "birlik-test edilebilir'." kod

Ne kadar üzücü ... hayır mucizevi çözüm zor iş bir sürü birikmiş yıllarca düzeltme -- 1**.

Kolay geçiş yok. Büyük, karmaşık, ciddi bir sorun var.

Sadece küçük adımlar onu çözebilir. Her minik adım aşağıdakileri içerir.

  1. Kesinlikle gerekli olan kodu ayrı bir parça seç. (Önemsiz de kenarlarını kemirmek değil mi?) Önemli ve ... bir bileşen bir şekilde cevap ver gerisi oyulmuş olabilir. Tek bir işlevi ideal olsa da, işlevleri veya fonksiyonları, tüm dosya belki karışık bir küme olabilir. Tamam test edilebilir bileşenler için bir şey ile mükemmel bir başlangıç için.

  2. Bunu yapmak gerekiyordu ne olduğunu. Bu arayüz olması gerekiyordu ne olduğunu. Bunu yapmak için, bazı ilk yeniden düzenleme hedef parça aslında ayrı yapmak zorunda kalabilirsiniz.

  3. Bir "" için şimdi bulunmuş gibi kod ayrık parça daha fazla veya daha az -- test -- entegrasyon test genel yazma Bu çalışmadan önce geçmek ve önemli bir şey değiştirmek.

  4. Bulunduğunuz tüy yumağı daha mantıklı bir derli toplu, test edilebilir ve birim kodu yeniden Düzenle. Biraz geriye uyumluluk (şimdilik) genel entegrasyon testi ile korumak Zorundasınız.

  5. Yeni birimler için birim testleri yazmak.

  6. Geçiyor sonra, eski API açığa ve değişim tarafından kırılacak ne düzeltme. Gerekirse, orijinal entegrasyon testi yeniden işleme; eski API testleri, yeni API test etmek istiyorum.

Yineleme.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • metallmanutza13

    metallmanutz

    13 NİSAN 2007
  • mliskIT

    mliskIT

    29 Mart 2012
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010