Önümüzdeki hafta bölümümle birim testi ve test odaklı geliştirme hakkında bir konuşma yapacağım. Bunun bir parçası olarak, son zamanlarda yazdığım bazı kodlardan bazı gerçek dünya örneklerini göstereceğim, ama aynı zamanda konuşmada yazacağım bazı çok basit örnekleri de göstermek istiyorum.
Web'de iyi örnekler için arama yaptım, ancak özellikle geliştirme alanımız için geçerli olanları bulmakta zorlanıyorum. Yazdığımız yazılımların neredeyse tamamı, küçük mikrodenetleyiciler üzerinde çalışan, gömülü kontrol sistemleridir. 'Alt' katmandan uzak kaldığınız sürece birim testine kolayca uygulanabilen bir çok C kodu var (hedefin kendisinden ziyade PC'de birim testinden bahsedeceğim): doğrudan konuşan şeyler mikrodenetleyici çevre birimlerine. Bununla birlikte, bulduğum çoğu örnek, dize işlemeye (örneğin Python Romen rakamlarına mükemmel dalış örneği) dayanma eğilimindedir ve dizeleri neredeyse hiç kullanmadığımızdan bu gerçekten uygun değildir (kodumuzun kullandığı tek kütüphane işlevleri hakkında vardır memcpy
, memcmp
ve memset
,strcat
veya düzenli ifadeler tam olarak doğru değildir).
Öyleyse, soru üzerine: Lütfen canlı bir oturumda birim testini göstermek için kullanabileceğim bazı işlev örnekleri sunabilir miyiz? (Değişime tabi) düşünceme göre iyi bir cevap muhtemelen şöyle olacaktır:
- Herkesin (sadece arada sırada kod yazanlar bile) anlayabileceği kadar basit bir işlev;
- Anlamsız görünmeyen bir işlev (yani parite veya CRC'yi çalışmak muhtemelen iki sayıyı bir araya getiren ve rastgele bir sabit ekleyen bir işlevden daha iyidir);
- Bir odanın önünde yazmak için yeterince kısa bir işlev (hataları azaltmak için Vim'in birçok panosundan yararlanabilirim ...);
- Sayıları, dizileri, işaretçileri veya yapıları parametre olarak alan ve dizeleri işlemek yerine benzer bir şey döndüren bir işlev;
- Basit bir hataya sahip (örneğin
>
yerine>=
), çoğu durumda yine de işe yarayacak, ancak belirli bir kenar durumla kırılacak olan bir fonksiyon: bir birim testi ile tanımlanması ve düzeltilmesi kolaydır.
Düşüncesi olan var mı?
Muhtemelen alakalı olmasa da, testlerin kendileri muhtemelen Google Test Çerçevesi kullanılarak C ++ 'da yazılacaktır: tüm başlıklarımızda zaten #ifdef __cplusplus extern "C" {
etraflarında sarmalayıcı vardır; bu şimdiye kadar yaptığım testlerle iyi çalıştı.