Nasıl kod artık gerekli / kullanılan bulmak için bir kod tabanı denetleyecek misiniz?

6 Cevap php

Ben yerlerde 10 yaşında koduna sahip bir kod tabanı ile çalışıyorum. Kod herhangi bir kod çıkarılması veya gerekli artık modülleri olmadan çok sayıda eklemeler, değişiklikler, sürümleri ve refactorings uğramıştır. Sonuç olarak, kod tabanı gereksiz kod ile doludur.

Eğer herhangi bir gereksiz kullanılmayan kodunu bulmak için kod tabanı denetlemek için kapsamlı bir tekniği veya ürün ile geldi.

6 Cevap

Bir tahmin de, tek yönlü testler komple bir set çalıştırmak için olabilir, ve çalıştırmak ne kodu görmek için bir 'kod kapsama' aracı kullanmak için.

Ben PHP biliyorum, ama http://www.google.ca/search?hl=en&q=php+code+coverage+tools http://stackoverflow.com/questions/348850/code-coverage-tools-for-php dahil olmak üzere 300.000 hit döndürür yok

Dil için mevcut ne bağlı olarak kod tabanı ölü kod iyi bir başlangıç ​​olabilir belirlemek için statik analiz kullanan bazı aracı ile başlayarak yazılır. Yansıma veya diğer hileler tarafından takıldı önlemek için, dikkatli bir şekilde kodlara karşı sonuçlarını Çapraz kontrol edin.

Onları kullanılmayan kodu belirlemek için etkin profilleme bir süre için eski üretim kodunu koştu bir örgüt tanıyorum. Onlar hızlı olma işlemci hızı bahis ve uygulama başlangıçta yarıştığı zaman daha büyük bellek.

Peki bağımsız bir kaynak dosyasını yükleyen bir program yazmak. Yansıma ve get_declared_classes gibi bir işlevi () kullanarak, genel yöntemlerin, genel statik özellikleri ve dışarıdan erişilebilir olabilir sabitleri bir listesini oluşturmak gerekir.

Bu listeyi kullanarak, o metin arama ve her dosyayı referans kodu örneklerini bulabiliriz. Bir çizelgesindeki koy ve dosyalar bağlantısı olduğuna bakmak.

Here's more on reflection: http://nz.php.net/oop5.reflection

You could also build a graph and check for connectivity if you want to be really thorough: http://en.wikipedia.org/wiki/Connectivity_(graph_theory)

Eğer kod ve kullanılmayan sınıfları / yöntemleri ölü kod yollarını belirlemek yardımcı araçlar vardır. Bunlardan biri Project Analyzer Visual Basic için, ama diğerleri de vardır. Bu gerçekten kullandığınız hangi dili bağlıdır.

Eğer varsa siz de düşünebilirsiniz bir şey, tasarım belgeleri yeniden gözden edilir. Ürün ve tüm kullanım durumları için kullanılan ne değerlendirin. Sonra, UML / sınıf şemalar bakmak ve nesneleri ve gereksiz yardımcıları olup olmadığını belirlemeye çalışın.

Bu da zaten kod tabanı dışında kod bir ton kesme gidiyoruz beri mimari değişiklikleri düşünmek için gerçekten büyük bir zamandır. Spagetti kod çıkarılması ve yeniden mimari büyük performansı ve bakımı kazançlara yol açabilir, ve ben denetim ayırdığınız için teşekkür övmek.

Kod kapsamı ve profilleme.

Ifadeleri hiç (teoride) erişilebilir, ve profil eğer belirli dalları hemen erişilebilir ne olduğunu size söyleyecektir eğer kod kapsama sağ aşağı söylüyorum, kod teorik ulaşılabilir ne söylemek gerekir.

Profilleme ayrıca kodu sıcak noktalar olduğu bazı fikir verecektir. Biliyorsanız çöp kod büyük bir kazık gidecekseniz, ama sadece hiç bir çok özel bir şekilde bir kez çağrılır büyük bir kazık gidecekseniz eğer onun çok sıcak, o zaman, dikkatli yaklaşım olabilir, bunu dışarı dilim muktedir ve yerini alabilir düzgün bir üstlenmeden ile o.

Olursa olsun ne zor iş onun tüm çok.

edit: Bu yapıyor PHP gibi görünüyor. İhtiyacınız ne XDebug (php için bir uzantısıdır) olduğunu WinCachegrind profilleme çıkışını okumak için (bir linux kutusuna erişimi varsa KCacheGrind oldukça iyidir), ve kullanmak için iyi kod kapsama çeşit alet bulmak gerekir XDebug çıkışı ile.

Java kodu için, Bill Pugh, FindBugs babası, a recent presentation at JavaOne içinde hafif enstrümantasyon ile ölü kodu bulma konusunda bazı güzel fikirler (ve statik analizi elbette bazı mükemmel fikirler) tanıttı