Çok az bilgi ile hata ayıklama için ipuçları? [kapalı]


11

Oldukça büyük bir kod tabanı olan bir projeyi miras aldım ve orijinal geliştirici nadiren e-postalara cevap veriyor. İçinde bazı şeyler yapmanın tonlarca farklı yolu var ve hepsini bilmiyorum. Bu yollar boyunca çoğaltılmış kod (göreceli olarak aynı şeyi yapan 5 sayfanın içerdiği işlevler yerine, kod 5 sayfada kopyalanır) ve veritabanındaki bazı ince sorunlar (hepimiz spagetti kodunu duyduk) , ama hiç spagetti veri tabanı duydunuz mu?)

Tüm bu sorunların çoğu ile başa çıkabilirim.

Sorun, bir istemcinin bir yerde bir hata bulmasıdır. Genellikle son sorunun ekran görüntüsünü gönderir ve "Buna bir göz atabilir misiniz?" sayfada yanlış olan şeyleri ve bazen beklenenleri vurgulayarak. Çok az daha fazla bilgi verilir ve onlarla konuşmaya ve daha fazlasını elde etmeye çalışmak (sonucu elde etmek için ne yaptıklarına benzer) diş çekmek gibidir.

Temel olarak, buna kaynar:

  • Büyük ve karmaşık kod tabanı% 100 aşina değilim
  • İşlerin yanlış gidebileceği birçok yol
  • Bir hatanın nasıl ortaya çıktığı hakkında çok az bilgi

Böyle bir şeyin nasıl ayıklanacağına dair herhangi bir ipucu, püf noktası, öneri vb. Var mı?


"Hiç bir spagetti veritabanı duydunuz mu?" Bir zamanlar, ürün veritabanının on yıldan fazla bir süredir sürekli olarak geliştiği bir işte çalıştım, gereksinimler büyüdükçe (ve büyüdükçe, büyüdükçe ve büyüdükçe) yeniden düzenleme için çok az çaba harcadım veya hiç çaba göstermedim. Tüm işi "Veritabanı anlamak, ondan yararlı bir şey ayıklamak için SQL sorguları oluşturmak" için kaynatılmış bir iş arkadaşım vardı - ve o vazgeçilmezdi. Acını hissediyorum.
BlairHippo

Tamamlayıcı olarak, [Raymond Chen'in blogundaki "psişik hata ayıklama" yayınlarını okuyun] ( goo.gl/2KIH )!
Wizard79

Kod tabanı ne kadar büyük? On KLOC veya 50 MLOC?
Basile Starynkevitch

Yanıtlar:


11

Böyle bir şey aldığımda genellikle daha fazla bilgi isterim. Nerede çalıştığınızdan emin değilim, ancak burada sorunu yerel olarak yeniden oluşturmak için yeterli bilgim yoksa, daha fazla bilgi isteği ile Yeniden Üretilemez olarak işaretlenmiş olan bileti geri gönderebilirim ve hiçbir şeyin düzeltilemeyeceğini biliyorlar. Sonunda kırabiliyorum.

Müşterileriniz adımları açıklamakta sorun yaşıyorsa, ekran görüntüsü videosu isteyin. Jing gibi bunları yaratabilecek birkaç ücretsiz ürün var . Ne yaptıklarını tam olarak izleyebilmeniz çok daha kolay.

EDIT: Bunu birkaç yıl önce yazdığımda Jing iyi bir fikirdi. O zamandan beri, sisteminizi hiç istemediğiniz "bonus" crapware ile yüklemek için yükleyicilerini değiştirdiler, bu yüzden artık öneremem. Etrafında bol miktarda iyi ekran kaydedici var.


2
+1 Sesli tavsiye, ve ben bunu şu şekilde genişletirim: Hatanın güvenilir bir şekilde gerçekleşmesini sağlayabilir mi yoksa aralıklı mı? Güvenilir bir şekilde oluyorsa, sizi oraya ulaşmak için attığı adımlar boyunca yürütebilirler mi?
BlairHippo

1
Günlük dosyalarını görmek biraz yardımcı olabilir.
pramodc84

11

Bu kitap iyi bir başlangıç ​​olabilir .

alternatif metin

Ben geliştirici artık desteklemek için etrafında değil gibi geliyor gibi aşağıdaki tanımı kullanıyorum.

Eski kod, artık desteklenmeyen kaynak kodudur.


Üzücü yanı, bu eski kod bile değil. Eminim üzerinde çalıştığım şeylerin çoğu bu yılın başlarında başladı.
Tarka

3
@Slokun - kitaptaki "Eski Kod" un tanımı, kitabın geleneksel tanımı ile tamamen aynı değildir. Çok iyi bir kitap.
Austin Salonen

4

Birkaç yıl önce benzer bir sorun yaşadım ve üretkenlik ve kod temizliğinde en büyük artış, hata izlemeyi sisteme entegre etmekti.

Fogbugz kullandık (hala Fogcreek yaptıkları varsayılır!) daha fazla ekran görüntüsü yok. Bu seçenekle, kullanıcıdan çıkarmaya çalışmak yerine ihtiyacınız olan bilgileri alırsınız. Bir varyant gibi geliyor, özellikle ekran görüntüsü yakalama seçeneği ile size iyi gelir.

Yapmaya başlamak isteyeceğiniz diğer bir şey de günlük kaydı eklemeye başlamaktır. Her yöntem çağrısını bağımsız değişken değerleri ile günlüğe kaydetmek kadar ileri gitmek isteyebilirsiniz. Eski kodla (testsiz kod) çalıştığınız gibi göründüğünden, bu günlük kaydı uygun birim testleri eklemenize yardımcı olur, böylece herhangi bir sorunu tekrarlamamanız gerekir.


Önceden var olan büyük bir kod tabanı için, iyi bir günlük kaydı eklemek çok fazla işin Cehennemi olacaktır. +1 çünkü hatalar aralıklıysa tek uygun seçenek olabilir.
BlairHippo

@BlairHippo: Deneyimlerime göre, ama tarif ettiği bir kod tabanı ile ödediğiniz fiyat. Başlamak için böyle bir kod tabanında çalışmak kadar sefil ...
Austin Salonen

Günlüğe kaydetme zordur. Otomatik istisna günlüğü eklemek önemsizdir ve binlerce kez (asgari) çabaya değer. Ya da en azından Delphi'de. Diğer diller için hangi çözümlerin bulunduğundan emin değilim, ancak iyi istisna işleme sahip herhangi bir dil için çok zor olmamalıdır.
Mason Wheeler

1

En ciddi tavsiyem, elinizden geldiğince yeniden düzenleme yapmaya başlamak. Sadece% 100 tam bir kopya olmadığını öğrenmek için işlevsellik kopyalarını kaç kez gördüğümü sayamıyorum. Bu,% 99,9 kopya ve 1 küçük, küçük hataya neden oldu. Her şeye birim testleri eklemeye başlayın ve bir KG departmanınız varsa, çalıştığınız kodun bölümleri için bazı otomatik test komut dosyaları almaya çalışın.

Öte yandan, koda ne kadar günlük ekleyebileceğini görün. Yani, günlük kaydı yolunda fazla bir şey yoksa, kendi hata ayıklama amaçlarınız için daha ayrıntılı günlük kaydı almaya başlamak için koda bir bayrak ekleyebilirsiniz. Bu, bir iletişim kutusunu açabiliyorsanız kullanıcının açıp kapatabileceği bir şeydir. Bana sayabildiğimden daha fazla yardımcı oldu. Normalde sorunun bir resmi olmadan "işe yaramaz" alıyorum. Sadece "bana günlük dosyasını gönder" diyorum.


0

Birim testleri yazarak başlayın. Bir sınıf veya işlev seçin ve nasıl çalışması gerektiğini düşündüğünüze karşılık gelen bir dizi test yazın. Testler başarısız olursa, nedenini bulun. Bir hata ise - düzeltin. Beklentileriniz yanlışsa, şeyin gerçekte ne yaptığını bulun ve testleri buna göre değiştirin.

İyi bir çalışma birimi testleri setiniz olduğunda, kodu daha temiz hale getirmek için bazı yeniden düzenleme işlemleri yapmak için bir güvenlik ağınız vardır.

Kod tabanını anlayana kadar yinelemeye devam edin.

Söylemeye gerek yok, bu bir hata raporuna yanıt olarak değil, vaktinden önce yapmanız gereken bir şey.

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.