Daha İyi Bir Hata Düzelticisi Olmak


24

Programcı olmayı seviyorum. Orada söyledim. Bununla birlikte, bununla birlikte, son zamanlarda farkettim ki, hataların giderilmesine gerçekten dayanamıyorum . Hiç.

Aslında, bir şeyi geliştirirken üretkenliğim son derece yüksek. Birim testler yazarken ve gelişimimi kendi kendime test ederken bile, genellikle gerçekten verimli oluyorum. İyi odaklanabiliyorum ve işleri başarabiliyorum.

Ancak, QA zamanı geldiğinde ve hataları düzeltmek için çalışıyorum, ilham kaynağım büyük bir burun atışı alıyor. Ben almak oldukça zor önlemleri (hani, yüksek BPM müzik, kafein aşırı miktarda vs.) ile kendimi zorlamak zorunda şey bitmiş. İşim genellikle mevcut büyük bir projeye adım atmak ve yeni özellikler eklemek veya hataları düzeltmekle ilgilidir, bu yüzden işverenime kodlarının tümü için birim testleri yazmak için birkaç haftaya ihtiyacım olduğunu tam olarak söyleyemem :) Ayrıca, Sıklıkla kullandığımız sunucu teknolojisi, bir kaç Java sınıf yükleyici sorunu olduğundan, hem birim hem de entegrasyon testlerinde çok engelleyicidir. Hata onarımına tamamen karşı değilim, bazen eğlenceli olabilir, ama hiç eğlenceli değil Küçük değişiklikler yapmanız ve çalışıp çalışmadıklarını görebilmek için 30 saniye ila 3 dakika beklemeniz gerektiğinde (sistemin çalışmasından dolayı).

Hata düzeltme sırasında verimliliğimi ve motivasyonumu nasıl artırabilirim? Bu çoğu programcının ilgilendiği bir şey mi?


4
“bu yüzden işverenime kodlarının tamamı için birim testleri yazmak için birkaç haftaya ihtiyacım olduğunu söyleyemem” . Bunun bir nedeni var mı? Bunu çok yapıyorum ve gerçekten herkes için karşılığını veriyor. Demek istediğim, ünite testine 3 hafta ayırırsanız, sadece 3 hafta hata düzeltmeden tasarruf edebilirsiniz. Genellikle ben bile bir sürü bulmak nihai tamamen QA radar altında gitti böcek. Elbette, muhtemelen bunu kendiniz yapmak istemezsiniz.
Netcoder

10
Hata kodunu yazmayın ... sorun çözüldü.
Michael Brown

3
Neredeyse yeni kod yazmak için hataları düzeltmeyi tercih ediyorum. Özellikle birim testleri yazmayı tercih ederim. Belki tuhafım.
Paul Tomblin

1
@ PaulTomblin Ne dediğini anlıyorum. Öncü gelişmeyi seven bazı geliştiriciler biliyorum ... ben UI olmayan kodları en çok seviyorum. Yeni kod yazmak bazen zor, çünkü bazen "yazar bloğunu" alıyorsunuz
Michael Brown

1
Hata düzeltmenin "verimliliğini" ölçmek zordur, çünkü "sorun değil" olup olmadığını bulmak için çok zaman harcayabilirsiniz, tıpkı Edision'ın ampul üretmeme yolunun 1000 yolunu bulduğunu söylediği gibi "ve düzeltmelerin genellikle neyin önemli olduğunu ve şu anki (ve gelecekteki) hata onarım görevini öğretmede öğretici olduğunu düşünüyorum.
Zeke Hansell

Yanıtlar:


21

Küçük değişiklikler yapmanız ve işe yarayıp yaramadığını görmek için 30 saniye ila 3 dakika beklemeniz hiç de eğlenceli değil

Buradaki asıl sorun bu. Geri bildirim için çok beklemek zorunda kaldığınızda verimsiz hissediyorsunuz, bu hissi biliyorum. Belki de daha fazla hizmet vermek ve daha iyi test araçları oluşturmak mümkündür, böylece anında geri bildirim alabilirsiniz.

Ünite testi eski kodu pahalıdır veya tehlikeli yeniden alevlendiriciler içerebilir. Bununla birlikte, daha iyi test fikstürleri oluşturmak, dakikalara kıyasla saniyeler içinde test yapmanıza izin verir ve yeni birim test edilebilir koduyla çalışmakla neredeyse aynı verimliliği elde edebilirsiniz.

Geri bildirim için çok uzun süre beklemek, hataların giderilmesi yerine sıkıcı ve can sıkıcıdır.


Hiç Efsanevi Adam Ayını okudun mu? Sadece ertesi sabaha kadar beklemeyi ve başarısızlık anında mevcut olan yığın dökümü / kayıt içeriğini analiz etmeye çalışıyorum ...
sq33G

@ sq33G Daha da kötüsü, test ekibinizin Hindistan’da yalnızca e-postayla (gerçek hikaye) konuştuğunuz birisine sahip olması.
Garrett Hall,

13

Hata düzeltme, öğrenmeniz gereken çok önemli bir beceridir. Bir yerde, normalde bir uygulamanın% 20'sini sabitleyerek zamanın% 80'ini harcadığını okudum .

Hatalardan ders almaya inanıyorum ve hata düzeltme diğer hatalardan ders almak için bir fırsat . Bir öğrenme alabilir ve gelecekte daha iyi bir programcı olmasına yardımcı olacaktır. Bu, çok fazla hatayı düzeltmeye ve kodu tekrar çarpanlara ayırmaya ilerlemeye başladığımda elde ettiğim motivasyondur .


1
Yazdıkların doğru; Ancak,% 80 /% 20’niz sadece geçerlidir, çünkü vahşi doğada çok fazla çirkin kod vardır. Crappy ile, az tasarlanmış ya da fazla mimarili ya da yanlış mimarili ya da sadece düz özensiz uygulamalar kastediyorum. Olduğu söyleniyor, geliştirici hata düzeltmeyi tercih eden bir geliştirici yanlış bir şey yok. Çoğu yazılımın başlangıçtan itibaren kötü bir şekilde tasarlandığını ve çoğu hata ayıklayıcısını başarısızlık için hazırladığınızı ekleyin.
Wil Moore III

@ wilmoore: Crappy kodunda haklısın ve ayrıca değişen şartlar da var.
ManuPK

6

Şahsen, hataları 'küçük şeyler' olarak düşünmekten vazgeçmeyi yararlı buldum; bunun yerine, saatler süren hata ayıklamadan sonra birkaç satır kod değiştirmeyi gerektirse de, büyük özellikler kadar önemli olan büyük şovmenler kadar. Bu şekilde, bütün bir günü 3 hata izci girişini öldürmek için harcamak çok daha az iç karartıcıdır (yaklaşım, kendinize inanmak için kendinize konuşma yeteneğinize bağlıdır :-).

Belki bir oyun yapmanıza yardımcı olabilir, örneğin iş arkadaşlarınızla birlikte ( günün en fazla hatasını kim düzeltir? Veya daha da kötüsü, günde en az yeniden yapılanmayı kim yaptı? )


Bir günde en fazla böcek ya da onun gibi şeyleri çözme oyunu yapma konusunda kesinlikle aynı fikirde değilim. Bazı böcekler, onları nasıl tetikleyeceğinizi öğrendikten sonra izole etmek ve düzeltmek için önemsizdir: bu değeri bu alana yapıştırın ve izleyin: kalan uzunluk şimdi yanlıştır. (Belki karakter yerine bayt sayıyorsunuz ve yukarıdaki boşluğu unutuyorsunuz, diyelim, U + 007F.) Diğerleri (özellikle çeşitli yarış koşullarını veya çoklu okuyucuyu içeren böcekler) çoğaltmak için iş günlerini kolayca alabilir, ancak bunu yaparken kritik olabilir alanda meydana gelir. Her ikisi de böcek izleyicisine yalnızca tek bir girişi garanti ediyor.
12'de

Bu tür böcekleri eşit şekilde saymak, herkesin yani yarış koşullarıyla mücadele etmek yerine basit hataları düzeltmek anlamına geleceği anlamına gelir. Ancak bu, motivasyonsuz, odaklanmamış hata düzeltme durumlarında da geçerli değil mi? :-) 'Sert' böceklerin basit şeyler lehine dinlenmelerine izin vermemek tamamen farklı bir konudur.
Alexander Gessler,

Ayrıca düzeltmenin kalitesi de var. Çoğu durumda, nedene ulaşmadan bir hatayı hızlı bir geçici çözüm düzeltmesi yapabilirsiniz, ancak benzer bir hata ya başka bir yerde ya da başka bir durumda ortaya çıkar. Hatanın yapısını anlamak ve düzeltmek genellikle daha uzun sürer, ancak genellikle çok daha sağlam bir düzeltmeye yol açar. "Bu, üretimde her zaman başarısız oluyor ve şimdi bir düzeltme yayınlamamız gerekiyor" olmadığı sürece , hangi yaklaşımı tercih edeceğimi biliyorum (ve öyle olsa bile, kesilmiş kemiği düzeltmek yerine kırık kemiği düzeltmek için geri döneceğim) iyi bir fikir).
12'de CVn

5

Ayakkabılarında bulundum. Ne zaman ve nerede yapabilirsiniz otomatik testler oluşturun. Aynı anda olmak zorunda değil. Bir hata bulduğunuzda, bir test vakası programlamaya çalışmak için bir dakikanızı ayırın. Bir test senaryosunu programlayamıyorsanız, manuel olarak nasıl test edileceğine dair hızlı bir bulanıklaştırma yazın, örneğin buraya tıklayın, bunu yazın, vb. Bir tür Bilgi Tabanına yerleştirin.

Hata ayıklama, özellikle yazmadığınız karmaşık kodlarla çok yorucu olabilir. "Bug Bug 13533 Fix Cuma" bir hedef ile gelip. Öyleyse, "Cuma gecesi arkadaşlarımla bir bardak kapmak" hedefine ulaşırsan, ödül hazırla Bu biraz daha faydalı hale getirecek.

Bunun dışında, bazen iş sadece bu ... iştir.


Bu mevcut proje için aslında yazılı birim testlerim var. Tek sorun, birim testlerimi kullanarak neyi kanıtlayabileceğimin önemi yok, sunucu teknolojisindeki sorunlardan dolayı her şey üretim / gerçek hayatta cehenneme gidiyor. Ne yazık ki, başka bir alternatif yok ve tabiri caizse, motoru değiştirmek için yerinde değilim.
Naftuli Kay

Bunları yakalamanıza yardımcı olması için "beklenmeyen bir hata işleyicisi" yordamı yazmanız gerekir ;-)
Zeke Hansell

2

Bu tür bir durumda, bir çeşit yaratıcı zorluğa ihtiyacınız var. Normalde kod yazıyor ama burada değil.

Ancak, hepsi kayıp değil. Meta-problemlerinizi çözmeye çalışın ve enerjinizi buna dökün. Geri bildirim almak neden 30 saniye ila 3 dakika sürüyor? Bu zamanı nasıl kısaltabilirsiniz? (Belki de check-in yapmadığınız bir tür komut dosyası veya yardımcı program yazabilirsiniz. Yeni problem alanınız bu - yeni yaratıcı zorluğunuz.

Şahsen, her ne zaman bir kusur tamir aşamasındayım, hızlı ve acısız bir şekilde halletmek için en büyük engellerimi belirledim ve bu engelleri kaldırmak için otomatik hale getirmek için gerekenleri otomatikleştiriyorum. Bu genellikle önyükleme için artan verimlilik ve kişisel portföyüme eklemeyle sonuçlanır.

Yani, kısaca, "her zaman gelişiyor" derim. :)


Seni duyuyorum. Keşke işleri otomatikleştirmek için bir şeyler yapabilseydim. Bir sunucum ve bir müşterim var ve müşteriyi tam olarak otomatikleştiremiyorum. Bu şeyin iş akışında birçok aşama var ve birçok hata aşamalar arasında ortaya çıkıyor, bu yüzden 30 saniyelik bir aşama, sonra 3 dakikalık bir aşama yapmam gerekiyor veya tersi. Alt satırda, oldukça kabus>>
Naftuli Kay

2

Sorununuz hata ayıklama veya hata düzeltme mi? Soruna neden olan bileşeni yalıtmak için yeterince hata ayıklayabilirsiniz, o zaman yeni bir geliştirme görevi olarak bakın.

  1. Sadece parçalanan kod için bazı birim testleri yaz. İstediğiniz tüm işlevselliklerini doğrulayan testlerin ve özellikle de buggy davranışını izole eden testlerin yapıldığından emin olun.
  2. Yeni yazdığınız tüm testleri geçen yeni bir kod yazın.
  3. Eski kodu yenisiyle değiştirin.
  4. Bazı entegrasyon testleri çalıştırın. Burası üç dakikalık sunucunuzun yeniden başlatılacağı yerdir, ancak 1-3 adımlarını iyi yaptıysanız simge durumuna küçültülmelidir.
  5. İşte bu kadar!

2

Belki Brian Hayes' bakmak gerekir Kendimi ayıklama , Sen (mutad kullanımı gibi gerekli önlemleri alabilirsiniz 1995 yılında American Scientist dergisinde yayınlanan bir makaleye Yoda Koşulları azaltmak veya ürettiğiniz hataların en nefret türlerini elemek için).

Hata ayıklamanın, ilgili olmasına rağmen programlamadan farklı bir beceri olduğu kanısındayım. Özellikle, çok iş parçacıklı programlarda hata ayıklamak, bunları yazmaktan neredeyse tamamen farklıdır.


1

Yazılım geliştirme sıkıcıysa, yanlış yapıyorsunuzdur. Başka bir deyişle, bu sizinle ilgili bir sorun değil, platformunuz ve sürecinizle ilgili bir sorun. Sunucunun yeniden başlatılmasını beklemeniz gerekmeyen dinamik bir dil kullanarak (örneğin Python, Ruby, JavaScript) bir konum aramayı düşündünüz mü?


Ne yazık ki, bu aşamada bir seçenek değil. Ayrıca, yukarıda bahsedildiği gibi, iş akışı birden fazla aşama ve aşama gerektirir ve bu aşamalar arasında hatalar ortaya çıkar. Bunu sıfırdan yazıyor olsaydım, kesinlikle bir betik dili kullanmayı düşünürdüm, fakat şu an sahip olduklarımızla sıkışıp kaldık.
Naftuli Kay

1
@TK: Son şirketimde eski manuel süreçleri otomatikleştirmek için Groovy'yi Java geliştirme sürecimize entegre etmede büyük başarı elde ettik. Java değil, ama yeterince yakındı ve çok az geri dönüşümüz olması çok etkiliydi.
kevin cline

1

Maalesef bu işin bir parçası. Crappy projeleriniz ve crappy işverenleriniz olacak (ikisinin de burada durum olduğunu söylemiyorum, sadece genelleme).

Sen edebilirsiniz kodlarına karşı birim testleri yazmak. Yapabildiğin kadar gizlice sok. Patronlara gösterebileceğiniz bir şey olduğunda, gelgitleri döndürebilirsiniz.

Yavaşlığı gidermek için hata ayıklama araçlarını kullanın, yeni kodu test etmek için birim testlerini kullanın ve mevcut kodun sorunlarını düzeltmek için bunları kullanın ve mevcut kodu daha küçük parçalara ayırın.

Bir meydan okuma yapabilir ve bir süreç iyileştirme kahramanı olabilirsiniz. Ve işe yaramazsa, bir sonraki işverene götürmek için iyi bir deneyime sahip olacaksınız.


1

Programcıların çoğu, kariyerlerinin bir noktasında sorun giderici kişisel meselelerle uğraşmak zorundadır.

Kişiden işe uzaklığı doğru hissetmek motivasyonunuz için çok önemlidir. İşinizle fazla ya da doğrulamayın. Kendinizi işinizle fazlasıyla özdeşleştiriyorsanız, tarif ettiğiniz sorunlar gibi sorunlar ortaya çıkabilir: Kendinizi suçladığınız zamanın yarısı olduğunuz için hataları düzeltmek konusunda çok isteksiz olabilirsiniz. Biraz içsel mesafe alın ve probleminizde rasyonel olarak nasıl çalışabileceğinizi öğrenin.

Platformunuzdaki belirli konularla ilgili olarak, uzun konuşlandırma ve test sürelerini azaltmak için birkaç yol vardır (ve ayrıca, sizin tarafınız özellikle uzun değildir).

Birincisi, test süreniz ne kadar uzun olursa, kargo kültüne karşı o kadar fazla duyarlı olmalısınız. Bir değişiklik yaparsanız, hatayı düzelteceğinden emin olana kadar bir düşünün . Elbette, test sürenizin uzunluğuna bağlı olarak ne kadar emin olabilirsiniz? Ancak, test döngüleriniz uzarsa ve uzun testlerden kaçınılamazsa, daha fazla düşünmeye daha fazla zaman ayırın ve hata ayıklamada daha çok ödüllendirilecek ve daha mutlu olacaksınız çünkü daha hızlı ve iyi bir "fiat lux" anının ödüllendirici etkisi var ".

İkinci olarak, birim testlerine karşı daha fazla ve entegrasyon testlerine karşı daha az önyargı. Her hata noktasını, hata ayıklaması zor platformdan kaldırabilirsiniz.


1

Hata düzeltme "harika" veya "sıkıcı" olabilir. Tamamen tek bir hatayı - başka kimsenin çözemediği kilitlenme hatasını - düzelttiği için bazı oyun kredilerim var. Fakat bugzilla'nın günlük tımar edilmesi uyuşturucudur. Küçük hatalar can sıkıcıdır. Başlıca böcekler buna değer.

İşte gerçekleşme: Devasa bir küçük böcek listesine sahip olmanız, başlı başına bir böcek. Sadece bir kod hatası değil. Bir süreç veya yönetim hatası.

O hatayı bul ve düzelt.


1

Meslektaşlarım ve tanıdıklarım arasında iyi bulduğum bir şey de "hata ayıklayıcılar / hata ayıklayıcılar / sorun çözücüler" iyi olan, genellikle bulmaca çözmeyi sevdikleridir. Bu, bulmaca, sayı oyunları (Sudoku gibi) ve mantık bulmacaları, vb. Anlamına gelebilir.

Böylece, daha iyi bir hata onarımcısı olmanın bir yolu, problem çözme veya bulmaca çözme becerileriniz üzerinde çalışarak biraz zaman geçirmeniz olacaktır.

İşte size daha iyi bir problem çözücü olmanıza yardımcı olacak şeyler için iyi bir başlangıç ​​noktası olabilecek bir Wikipedia bağlantısı .

Dikkat edin, bazı insanlar problem çözmede daha iyidir, ya da sadece bundan daha çok zevk alırlar. Bazı insanlar hiç hoşlanmıyor, bu da kendini zorla zorlaştırıyor - ama hata yapmıyorsun - kendini bir bulmaca çözücüsü olmayı öğrenmeye zorlarsan, gelecekte iyi bir hata düzelticisi olmayı kolaylaştıracak .


0

Hata tespiti genellikle bir angarya gibi gelir çünkü böceklerin tüm zamanınızı alıp sizi eğlenceli yeni şeylerden uzak tuttuğunu hissetmenize neden olabilir. Ancak gerçek şu ki, hata düzeltme işlemi yaptığımız işin çok büyük bir parçası ve ilk satır kodunu yazmak ve derleyiciyi çalıştırmak kadar erken başlıyor. İlk kez kodu serbest bıraktığınızda, muhtemelen hataları düzeltmek için saatlerce zaman harcadınız, ancak bu şekilde görünmüyor çünkü bunları uygulama sürecinin bir parçası olarak düzelttiniz. Gerçekçi konuşmak gerekirse, ne kadar iyi bir programcı olursanız olun, hatalar sisteminize sızacak.

Peki nasıl eğlenceli hale getirirsin? Peki, sizin için gerçekten cevaplayamıyorum, çünkü sizin tek tek teknenizi neyin yüzdüğünü hayal edemiyorum. Benim için, biraz alet bağımlısıyım, bu yüzden cevap çok güvenilir bir alet zincirine sahipti ve hepsinin hata düzeltmeyi bir angaryadan daha az düzeltmeye katkıda bulunan esnek bir geliştirme süreci ve daha basit bir problem çözüldü. hızlı bir şekilde. Şu anda çoğunlukla C # ile geliştiriyorum ve her zaman yazma yazılımının parçalarını boşa harcayarak sıkıcı zamanı kaldıracak araçlar aramaktayım. StoryQ adında çok iyi bir BDD API ile desteklenen test ilk geliştirme yaklaşımını kullanıyorum . Kodlama stili gibi şeylerin üzerinde durmak için yeniden düzenleme ve StyleCop'un çoğunu otomatikleştirmek için Resharper kullanıyorum . Takım zincirine en son eklemem, dahil etmek oldu.Kodlarımı yazarken sürekli ve aynı anda arka planda testlerimi yürüten NCrunch ve oyun değiştirici olduğu kanıtlanmış NCrunch aslında .

Tüm bu araçların birleşimi, üretkenliğimin son zamanlarda tavana doğru gittiğini gördü, çünkü işleri derlemek veya yürütmek için çok az zaman harcıyorum. Düzeltmem gereken sorunlarım olduğunu bildirmek için IDE'mde görsel olarak anında geri bildirim alıyorum ve test kodumu yalnızca birkaç satırlık kod satırına tam olarak belirleyebileceğim şekilde yerleştiriyorum. başarısızlık gerçekleşir, ancak StoryQ'dan aldığım çok güzel ayrıntılı raporlama nedeniyle hatanın nedeninin ortaya çıktığı yerbu da bana sınavımın hangi bölümlerinin geçtiğini, hangilerinin başarısız olduğunu ve kodun hangi kısımlarda olduğunu gösterir. Wasters gelişim zamanımdan çıkardığım süre boyunca aktif olarak hata ayıklama ve problem çözme, test ve kod yazma konusunda çok az zaman harcıyorum. Devir hızının yüksek olması beni meşgul ediyor ve görevlerimde çok fazla değişiklik var. Ayrıca, çalışma günüm boyunca başka ilgi alanlarının peşinden koşmam için bana zaman verdi, böylece yeni ve yenilikçi fikirleri ürün hattımıza ve süreçlerimize ekleyebileyim.

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.