Otomatikleştirilmiş testlerle eski kodun güçlendirilmesi için en iyi yöntemler


22

Önceden tanımlanmış bir arayüzü (bir dizi C ++ başlık dosyasını) nispeten büyük ve eski bir kod tabanında yeniden uygulama görevini üstleneceğim. Bunu yapmadan önce, mümkün olduğunca tam bir test kapsamı olmasını istiyorum, böylece yeniden uygulama hatalarını mümkün olduğunca erken ve kolay bir şekilde tespit edebiliyorum. Buradaki sorun, zaten var olan kod tabanının, (çok) büyük sınıflar ve işlevler, yüksek dereceli bir kaplin derecesi, (çok) yan etkisi olan işlevler vb. İle kolayca test edilebilir şekilde tasarlanmamış olmasıdır.

Benzer görevlerle ilgili önceki deneyimlerinizi ve otomatik testlerinizi (birim, entegrasyonlar, regresyon vb.) Eski kodunuza nasıl uyarlama konusunda iyi ve somut ipuçlarını duymak güzel olurdu.


1
Adım 1: Yığın Taşması Ara. Soru soruldu. Çok, çok defa.
S.Lott

Yanıtlar:


20

Öncelikle, Michael Feathers'ın Eski Kodla Etkili Bir Şekilde Çalışmalarını Okuyun ve Okuyun - bu tür görevler için vazgeçilmez bir yardımcıdır.

Sonra birkaç not:

  • Arayüz için kesin bir şartname / sözleşmeniz var mı veya pratikte sadece “şartname” olarak mevcut uygulamanız var mı? Eski durumda baştan başa tam bir yeniden yazma yapmak daha kolaydır, ikinci durumda imkansızdır.
  • Eğer arayüzü yeniden uygulamak istiyorsanız, test kaynaklarınızı harcamanın en kullanışlı yolu sadece arayüze karşı testler yazmaktır. Tabii ki, bu katı anlamda birim testi değil, işlevsel / kabul testi olarak nitelendirilemez, fakat ben katı değilim :-) Ancak, bu testler yeniden kullanılabilir ve iki uygulamadaki sonuçları doğrudan yan yana karşılaştırmanıza olanak tanır .
  • Genel olarak, tamamen elde edilemez olmadıkça, sıfırdan yeniden yazmak yerine mevcut kodu yeniden düzenlemeyi tercih ederim. (Ancak bu durumda nasıl buna karşı birim testleri yazacaksınız?) Konuyla ilgili daha ayrıntılı bir tartışma için Joel'den bu yazıya göz atın . Arayüze karşı bir dizi kabul testi oluşturmuş olmanız, size birimi test edilebilir hale getirmek için (Tüyler kitabındaki fikirleri kullanarak) dikkatli bir şekilde yeniden düzenlemeye başlayabileceğiniz ince ama kullanışlı bir güvenlik ağı sağlar.

Yapabilseydim bunu +3 olarak yapardım. WELC temel bir okumadır ve kesinlikle bir yeniden düzenleme için ...
Johnsyweb

2. noktaya dair küçük bir yorum, eski sistemler için, karakterizasyon testi zihniyetine göre test yapılması gerektiğidir . Diğer bir deyişle, yazılımın mevcut davranışını güvenilir bir şekilde yakalayın ve test sonuçlarından bazıları birim test zihniyetine göre garip ya da uygun olmasa bile davranışı değiştirmekten kaçının. (Bu fikir aynı zamanda WELC'in yazarından da gelir.)
rwong

Gerçekten, @ rwong. Ayrıntılı bir teknik özellik olmadan veya bilgili bir ürün sahibi olmadan, geliştiricinin programın belirli bir davranışının a) kasıtlı ve gerekli olup olmadığına karar vermesi imkansızdır, b) istemeden, ancak şimdi kullanıcılar buna bağlıdır, c) aslında kullanıcılara zarar verir, d) şimdiye dek hiç fark edilmeyen bir hata. İlk iki durumda, "düzeltme" aslında kullanıcıları incitir ve son durumda düzeltme - teorik olarak doğru olmasına rağmen - gözle görülür bir fayda sağlamaz.
Péter Török


2

Eski bir kod tabanına yapılan retro fitting testleri, tasarımda monolitik ise, oldukça zor olabilir.

Mümkünse (zamanınız / paranız var mı?), İlerlemenin bir yolu kodu daha fazla test edilebilir birime dönüştürmektir.


1

Bir link eklemek istiyorum . Bu kadar kolay test edilemeyen uygulamaların daha fazla xUnit dostu kodda tekrarlanan çok az örneği vardır. Genel bir yaklaşım gelince, zaten belirtilen bağlantıları deneyin (Joel post, Eski Kodla Çalışma)

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.