Birim test jeneratörleri eski kodlarla çalışırken size yardımcı oldu mu?


10

Ben çok düşük test kapsamı olan küçük (~ 70kLOC oluşturulan dahil) C # (.NET 4.0, bazı Silverlight) kod tabanı bakıyorum. Kod, kullanıcı kabul testini geçtiği için çalışır, ancak kırılgandır ve bazı alanlarda çok iyi faktörlere sahip değildir. Her zamanki şüphelileri (NMock, NUnit, Silverlight bitleri için StatLight) kullanarak eski kodun etrafına katı birim testi kapsamı eklemek istiyorum.

Normal yaklaşımım, kodun durumundan memnun olana kadar proje, birim testi ve yeniden düzenleme ile çalışmaya başlamaktır. Bunu geçmişte birçok kez yaptım ve iyi çalıştı.

Ancak, bu sefer test çerçevesi oluşturmak için bir test jeneratörü (özellikle Pex ) kullanmayı ve sonra manuel olarak etmeyi düşünüyorum.

Sorum şu: Eski bir kod tabanı üzerinde çalışmaya başlarken geçmişte birim test jeneratörleri kullandınız mı ve eğer öyleyse, bunları tavsiye eder misiniz?

Benim korkum, üretilen testlerin kod-tabanının semantik nüanslarını kaçıracağı ve koddaki amaçlanan davranışı açıkça ifade eden testler yerine kapsama metriği uğruna testlere sahip olmanın korkunç durumuna yol açacağıdır.


PeX'i bir kez denedim ve sonuçlar, diyelim ki, çok tatmin edici değil - YMMV. Böyle bir aracın kodunuzu ve işlevsel gereksinimlerini "anlamasını" beklemeyin - sadece "anlamsal nüansları" kaçırmaz, tüm anlambilimi kaçırır. Dahası, eski bir kod tabanıyla başladığınızda, genellikle önce birim testleriyle değil, sistem veya entegrasyon testleriyle başlarsınız; bu kesinlikle PeX'in yaratıldığı bir şey değil.
Doc Brown

Yanıtlar:


9

Şeylere biraz farklı bakmayı öneririm. Mevcut bir uygulamaya olaysız yeni birim test kodu eklemek size en iyi sonuçları vermeyebilir. Kod tabanını tanımak için bunu yapıyorsanız veya gerçekten öldürmek için zamanınız varsa ve test jeneratörlerini test etmek istiyorsanız, yorumlarımı görmezden gelin.

Pragmatik olmak için tüm hata listelerine bakmalısınız. Daha sonra, hataların her biri için birim testler oluşturun, bu da nasıl davranılması gerektiği ile sonuçlanır. İdeal olarak, ulaştığınız her hata için yalnızca yeni kod eklersiniz.

Birim test kodu ekleme süreleri:

  • Yeni işlevler ekleme
  • Yeniden faktörlü kod
  • Bir hata düzeltildi
  • Kodun ne yaptığını öğrenme
  • Bir hatanın var olduğunu kanıtlayın

Gerçeklemeden sonra birim testleri eklemenin değerini ölçmek zordur.

Normalde kendimin, askerin istediklerine karşı cevaplar yazmasına izin vermem, ancak bunun iyi bir ders olduğunu düşünüyorum.


Orada seninle% 100 anlaşıyorum - bu soru benden en iyi nasıl zaman geçireceğimi merak ederek ortaya çıktı. Benim normal pratiğim, hataları düzeltme veya özellik ekleme sürecinde test etme ve yeniden düzenleme. Bazı insanların bu alanda bazı savaş hikayelerini paylaşabileceğini umuyordum ...
Duncan Bayne

1
+1, gerçeği sonra kapsama için çekim genellikle verimli değildir. Regresyonu önleyen sabit hatalar üzerinde testler yapmak çok verimlidir. Bir hatanın gerilemesi ilgili herkes için çok sinir bozucu olabilir. Testler, daha iyi kod yazmanıza yardımcı olmak için gerçekten uygundur. Testlerin cıvatalanması genellikle standartların altında testlerle sonuçlanır. Bence OP'nin korkusu kuruldu ve üretilen testlerden gelen sinyal-gürültü oranı sadece yoluna girecek. Test edilmemiş kod muhtemelen içinde çok dallı bitlere sahiptir. Kod kokularını gösteren araçlar muhtemelen daha kullanışlıdır. Belki FXCop ve benzeri araçlar.
kevpie
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.