Eski, düz bir C projesine birim testleri ekleme


12

Başlık her şeyi söylüyor. Şirketim, tamamen C harfiyle yazılmış bir mikrodenetleyici cihaz için eski bir ürün yazılımı projesini yeniden kullanıyor.

Açıkça yanlış olan ve değiştirilmesi gereken parçalar var ve bir C # / TDD arka planından geliyor, işlevselliğin değişmeden kalmasını sağlamak için hiçbir test yapmadan rastgele yeniden düzenleme fikrini sevmiyorum. Ayrıca, birçok durumda en ufak değişikliklerle hataların bulunmasının zor olduğunu gördüm (bu, regresyon testi kullanıldığında düzeltileceğini düşündüğüm bir şey). Bu hatalardan kaçınmak için çok dikkatli olunmalıdır: kod etrafında bir grup küresel izlemeyi izlemek zordur.

Özetlemek:

  • Yeniden düzenleme işleminden önce sıkı sıkıya bağlı mevcut koda birim testleri nasıl eklersiniz?
  • Hangi araçları önerirsiniz? (daha az önemli, ama yine de bilmek güzel)

Bu kodu yazmakla doğrudan ilgilenmiyorum (benim sorumluluğum, cihazla çeşitli şekillerde etkileşime girecek bir uygulamadır), ancak kullanılabilecek bir şans varsa iyi programlama ilkelerinin geride kalması kötü olurdu.

Yanıtlar:


7

Michael Feathers'ın Eski Kodlarla Etkili Çalışmanın bir kopyasını alın . Bu tür durumlarla başa çıkmak içindir. Daha çok C ++ ve Java gibi OO dillerine odaklanmış olsa da, hala size çok yardımcı olabileceğine inanıyorum.

Bir kısmı (ya da erken bir taslak makale) burada ücretsiz olarak kullanılabilir gibi görünüyor .


+1, teşekkürler. Ancak, daha fazla OO kodu ile OO kodu yeniden düzenleme konusunda oldukça iyi olduğuna inanıyorum. Ne bilmiyorum yordam kodu ve daha az çift yordam kodu ile refactor yordam kodu sınamaktır.
Groo

@Groo, kitap kendi başına yeniden düzenleme yapmakla ilgili değil. Herhangi bir birim testi olmadan bir grup spagetti kodunun, birim testlerle iyi kaplanmış bir grup (biraz daha az spagetti) koduna nasıl dönüştürüleceği ile ilgilidir. Bu tür kodları test etmek zordur, bu yüzden test edilebilir hale getirmek için önce yeniden düzenlemeniz gerekir; Bununla birlikte, sizin de belirttiğiniz gibi, birim testler olmadan yeniden düzenleme risklidir, bu nedenle bir sorun 22 durumudur. Kitap, kod üzerinde ünite testleri ile örtüşmenizi sağlayan kodda en küçük, en güvenli değişiklikleri nasıl yapacağınız konusunda rehberlik eder, böylece daha sonra yeniden ciddiyetle yeniden düzenlemeye başlar.
Péter Török

Bu kitap iyi bir öneridir ve C ile OO dillerini kapsar.
ThomasW

7

Tekniğinde, muhtemelen Michael Tüyler kitap içinde Péter Török cevabı oldukça kapsamlı olacaktır. Kitaba gitmek istemiyorsanız, üç adımlı bir işlem öneririm:

  1. test edilemeyen kodu inceleyin ve bu kodun işlevselliğinin küçük bölümlerini test edilebilir işlevlere kopyalayın . Yeni işlevlerin, çoğaltmaya çalıştığınız işleve açık bir davranışa sahip olması önemlidir - aslında eski kod etrafında yazma birimi testleri savunmuyorum, bu yüzden çok dikkatli olmanız ve kapsamınızı sınırlamanız gerekir. yeniden düzenleme güvenini korumak için.
  2. bu yeni fonksiyonlar etrafında birim testleri yazabilir.
  3. yeni işlevleri çağırmak için orijinal kodu değiştirin.

Bu işlemi birkaç kez tekrarlayın ve eski kod tabanının kalitesinin önemli ölçüde arttığını görmelisiniz.

Araçlar ile ilgili olarak, C ++ 'ın C'yi arayabildiğini unutmayın, bu nedenle C kodunu test etmek için herhangi bir C ++ birim sınama çerçevesi kullanılabilir. Örneğin, projemizde bir grup C kodunu birim test etmek için CPPUnit kullanıyoruz .


+1 ipuçları ve CPPUnit bağlantısı için teşekkürler .
Groo
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.