Bilmediğiniz bir kod tabanını tanımlamak için hangi araçlar veya teknikler yararlıdır? [kapalı]


9

Bilmediğiniz kodu manuel olarak incelerken (gözden geçirmek veya değiştirmek için), üç seçeneğim var gibi görünüyor.

  • Bir yukarıdan aşağıya okumak dosya görünüyor nasıl temel her bir sonraki kaynak dosyasını seçerek kod. Genellikle neredeyse her şeyi okurum. Bazı dosyalar iki kez.
  • Bir genişliği birinci okuma ı bulmak ve minimal bir anlayışla çağıran yönteminin okuma. Sonra fonksiyon olarak adlandırılan tüm fonksiyonları okuyun, vb. Zihinsel yığınım birkaç çağrı yaparsam taşma eğilimindedir.
  • Bir derinlik ilk okuma bu olsun emin bir hata ayıklayıcıda tüm kod adım, 8 dakika veya 8 saat sürecektir.

Ne yaptığı hakkında oldukça sağlam bir anlayışa sahip olmak için yeterince kod okuduktan sonra , temel kod% 20 veya daha az iken, genellikle kod tabanının% 80 veya daha fazlasını okuduğumu yansıtırım . Çok zaman harcadım.

Unfamilar kodu hızlı bir şekilde kavramak için hangi araçlar yararlıdır? Kritik kod yolunun "büyük resmini" verebilecek ve herhangi bir parçanın ayrıntılarını ayrıntılı olarak inceleyebileceğim herhangi bir araç var mı?


2
% 80'i kavramadan,% 20'nin neden temel kısım olduğunu anlayamazsınız
cırcır ucube

@ratchetfreak Böyle mutlak terimlerle söylemezdim. Bir araç, örneğin her zaman çağrılan kodu izole edebilir. Ya da sadece birçok yığın seviyesini derinlemesine çalıştırın.
Drew Dormann

Yanıtlar:


8

En iyi şey, elbette, kod tabanını bilen birinin size yol göstermesi içindir. Bu bir seçenek değilse, size yardımcı olabilecek bazı araçlar vardır.

  • VisualStudio otomatik olarak bir kod tabanının UML sınıfı diyagramı oluşturabilir. En azından size sınıf hiyerarşilerini gösterecek.
  • Oksijen son derece yardımcı olabilir. Kodda doxygen tarzı yorumlar olmasa bile, doxygen hala okunamayan belgeler, sınıf diyagramları ve çağrı grafikleri oluşturabilir, bu da tanımadığınız bir kod tabanı çevresinde yolunuzu bulmak için çok yararlı olabilir.

Genellikle, herhangi bir şeyi sağ tıklayıp "tanımlamaya" gidebileceğiniz tam özellikli bir IDE kullanmak da istersiniz. Bu, karmaşık bir dizin yapısında birçok dosyada grep kullanımı ile karşılaştırıldığında size çok zaman kazandırabilir.

Kodla ne kadar süre uğraşmanız gerektiğine bağlı olarak başka bir önemli şey. Birim testleri varsa, testlere bakın. Test yoksa, yazmaya başlayın. Belirli bir sınıfın veya işlevin ne yaptığına dair bir hipotez oluşturun ve test etmek için bir test yazın. Bu çok disiplin gerektirir, ancak kodda neler olduğu hakkında cevaplar almak için harika bir yoldur.


2
Teşekkürler @ Dima. Doxygen, bunlardan bazılarını ele almakta harika. (Bildiğim bir araç adını bırakarak cevapları yönlendirmek istemedim). Seviye başlı "insan etkileşimi" bileşeninde de Kudos. :)
Drew Dormann

3

Bu daha sert bir yaklaşım. Bu teknik, anlamlı ad alanlarına yerleştirilmemiş birçok sınıfı olan bir proje için yararlı olabilir.

Bu alıştırmanın amacı sınıf ilişkisini keşfetmektir. Projenin atılabilir bir klonunu yapın ve ardından bazı sınıfları ad alanlarına yerleştirmeye çalışın. Tekrarlanan denemelerde zaman kazanmak için, bu değişikliği otomatikleştirmek üzere bazı Regex dosya işleme araçlarını kullanın.

Bu, birçok derleyici hatasına neden olacaktır. Bu hataları düzeltme sürecinde, bu sınıfların birbirine nasıl bağlı olduğu daha iyi kavranacak ve hangi sınıfların aynı ad alanına yerleştirilebileceğine karar verilecektir.

Bu teknik, projenin kod organizasyonunu çok az anlamadan bile uygulayabilmesi açısından faydalıdır. Bununla birlikte, bazı sınıfların yanlış anlama nedeniyle bu teknikle yanlış yerleştirilme riski ortaya çıkar.


Zekice. Bunu genellikle birçok sınıf için mi yapıyorsunuz yoksa sizin için belirsiz olan belirli bir sınıfa rastladığınızda mı kaydediyorsunuz?
Drew Dormann

@DrewDormann Bu tekniği, gruplandırılmamış 100'lü sınıfla karşılaştığımda meslektaşlarımdan birinden öğrendim. Herhangi bir yeniden düzenleme gerçekleşmeden önce proje dosyalarını "sıralamak" için ilk adımdır. Başka bir deyişle, her şey hala bir karmaşa olduğunda kullanılır. (Şaşırtıcı bir şekilde, karmaşa daha önceki kendim tarafından yazılmıştır.) Proje dosyalarını ad alanlarına ayırarak Doxygen sınıfı sayfa oluşturmayı kolaylaştırır (ad alanı ağaçlarını görüntüleyerek) ve aynı zamanda programcının anlaşılmasını hızlandırır.
rwong
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.