Kokuyor çünkü düzenlenebileceği veya iyileştirilebileceği birçok durum var.
Bu kokuların çoğu, yanlış olabilecek bir şeyin ipuçlarıdır. Dolayısıyla bunların kendiliğinden düzeltilmesi gerekmez… (Yine de araştırmalısınız.)
Önceki Kod Kokuyor
Önceki tüm kod kokularını (Bölüm i - XXXIII) burada bulabilirsiniz.
Devam edelim...
Code Smell 166 - Kullanıcı Arayüzünde Düşük Seviyeli Hatalar
Önemli hata: Yakalanmayan Hata: 'logs_queries_web' sınıfı /var/www/html/query-line.php:78 dosyasında bulunamadı
Yığın izleme: #0 {main}, 718. satırdaki /var/www/html/query-line.php dosyasına atıldı
TL;DR: Hatalarınızı yakalayın. Hiç beklemediklerin bile.
Sorunlar
- Güvenlik
- Hata yönetimi
- Hata Günlüğü
- Kötü UX Deneyimi
Çözümler
Üst düzey bir işleyici kullanın.
Dönüş kodlarını tercih eden dillerden kaçının.
Veritabanı ve düşük düzeyli hataları bekleyin.
Bağlam
2022'de bile sıradan kullanıcılara bir yığın veya hata ayıklama mesajı gösteren "ciddi" web sitelerini görebiliriz.
Basit kod
Yanlış
<? Fatal error: Uncaught Error: Class 'MyClass' not found in /nstest/src/Container.php:9
Sağ
<? // A user-defined exception handler function function myException($exception) { logError($exception->description()) // We don't show Exception to final users } // Set user-defined exception handler function set_exception_handler("myException");
Tespit etme
- [x] Otomatik
Sorunları simüle etmek ve bunların doğru şekilde ele alınıp alınmadığını görmek için mutasyon testini kullanabiliriz.
Etiketler
- Güvenlik
Çözüm
Olgunlaşmaya devam etmemiz gerekiyor.
Çözümlerimiz özensiz olmamalıdır.
Ciddi yazılım mühendisleri olarak itibarımızı artırmamız gerekiyor.
İlişkiler
Daha fazla bilgi
Sorumluluk reddi beyanı
Kod Kokuları sadece benim görüşüm .
Kredi
Unsplash'ta jesse orrico'nun fotoğrafı
Sorunlarımın yüzde 80'i basit mantık hatalarından oluşuyor. Geriye kalan sorunların yüzde 80'i işaretçi hatalarıdır. Geriye kalan sorunlar zordur.
Mark Donner
Yazılım Mühendisliği Harika Sözler
Code Smell 167 - Karma Karşılaştırması
Hashing, iki nesnenin farklı olduğunu garanti eder. Aynı olduklarından değil.
TL;DR: Karmayı kontrol ederseniz eşitliği de kontrol etmelisiniz
Sorunlar
Çözümler
- Karma (hızlı) olup olmadığını kontrol edin ve ardından Eşitlik (yavaş) olup olmadığını kontrol edin
Bağlam
7 Ekim 2022'de daha büyük blockchainlerden birinin durdurulması gerekti.
Bu haber şok ediciydi çünkü çoğu blockchain tanımı gereği merkezden dağıtılmıştı.
Makalenin tamamını buradan okuyabilirsiniz:
Bir Hacker Kod Kokusunu Kullanarak 566 Milyon Doları Nasıl Çaldı?
Basit kod
Yanlış
public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return (int)(Math.random()*256); } // This is just an example of non-correlation // When using HashMaps we can make a mistake // and guess the object is not present in the collection }
Sağ
public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return name.hashCode(); } // This is just an example of non-correlation }
Tespit etme
- [x] Yarı Otomatik
Birçok linter'ın hash ve eşitliğin yeniden tanımlanmasına yönelik kuralları vardır.
Mutasyon testi ile farklı nesneleri aynı hash ile tohumlayabilir ve testlerimizi kontrol edebiliriz.
- Kimlik
- Güvenlik
Çözüm
Her performans iyileştirmesinin dezavantajları vardır.
Önbellekler ve çoğaltmalar dikkate değer örneklerdir.
Bunları dikkatli kullanabiliriz (kullanmalıyız).
İlişkiler
Code Smell 150 - Eşit Karşılaştırma
Daha fazla bilgi
Sorumluluk reddi beyanı
Kod Kokuları sadece benim görüşüm .
Bu bazı okuyucularınızı şaşırtacak, ancak benim asıl ilgi alanım bilgisayar güvenliği değil. Öncelikle amaçlandığı gibi çalışan bir yazılım yazmakla ilgileniyorum.
Wietse Venema
Yazılım Mühendisliği Harika Sözler
Code Smell 168 - Belgelenmemiş Kararlar
Bazı değişiklikler yapmamız gerekiyor. Nedenini açıklığa kavuşturmamız gerekiyor
TL;DR: Tasarım veya uygulama kararlarınız konusunda açıklayıcı olun.
Sorunlar
- Kod Yorumları
- Test edilebilirlik eksikliği
Çözümler
- Nedenleri konusunda açık olun.
- Yorumu bir yönteme dönüştürün.
Bağlam
Bazen keyfi kuralların o kadar kolay test edilemeyeceğini görüyoruz.
Başarısız bir test yazamıyorsak, yorum yerine mükemmel ve bildirimsel bir isme sahip bir fonksiyona ihtiyacımız var.
Basit kod
Yanlış
// We need to run this process with more memory set_memory("512k) run_process();
Sağ
increase_memory_to_avoid_false_positives(); run_process();
Tespit etme
- [x] Yarı Otomatik
Bu anlamsal bir koku.
Yorumları tespit edip bizi uyarabiliyoruz.
Etiketler
- Yorumlar
Çözüm
Kod düzyazıdır. Ve tasarım kararları anlatısal olmalıdır.
İlişkiler
Code Smell 05 - Suistimalcilere Yorum Yapın
Code Smell 75 - Bir Yöntemin İçindeki Yorumlar
Sorumluluk reddi beyanı
Kod Kokuları sadece benim görüşüm .
Kredi
Unsplash'ta Goh Rhy Yan'ın fotoğrafı
İnsanlar gibi programlar da yaşlanır. Yaşlanmayı önleyemeyiz ama nedenlerini anlayabilir, etkilerini sınırlayabilir ve hasarın bir kısmını tersine çevirebiliriz.
Mario Fusco
Yazılım Mühendisliği Harika Sözler
Code Smell 169 - Yapıştırılmış Yöntemler
Aynı anda iki veya daha fazla şey yapmayın.
TL;DR: Yöntemlerinizde mümkün olduğunca atomik olmaya çalışın
Sorunlar
- Birleşik Kod
- Test etmek daha zor
- Okuması daha zor
Çözümler
- Yöntemi boz
Yeniden Düzenlemeler
https://maximilianocontieri.com/refactoring-002-extract-method
Bağlam
Bir yöntemi 'Ve' ile adlandırırsanız, muhtemelen bir çıkarma ve kırma yöntemi fırsatını kaçırıyorsunuz demektir.
Basit kod
Yanlış
calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities
Sağ
calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them
Tespit etme
- [x] Yarı Otomatik
Bazı linterler 've' terimini içeren yöntemler konusunda bizi uyarabilir.
Etiketler
- Kaplin
Çözüm
Yöntemleri oluştururken plastik ördek hikayesi oynamak ve işleri doğru yapıp yapmadığımızı kendimize söylemek çok önemlidir.
İlişkiler
%[ https://maximilianocontieri.com/code-smell-85-and-functions ]
Sorumluluk reddi beyanı
Kod Kokuları sadece benim görüşüm .
Kredi
Unsplash'ta Scott Sanker'in fotoğrafı
Diğer disiplinlerin çoğunda olduğu gibi programlama sanatını öğrenmek de önce kuralları öğrenmek, sonra da bu kuralları ne zaman çiğnemeniz gerektiğini öğrenmekten oluşur.
Joshua Bloch
Code Smell 170 - İşlevsel Değişikliklerle Yeniden Düzenleme
Gelişmek harika. yeniden düzenleme şaşırtıcı. Aynı anda yapmayın
TL;DR: İşlevsel olarak değişiklik yapmayın ve aynı anda yeniden düzenleme yapmayın.
Sorunlar
- Çözümleri gözden geçirmek zor
- Çatışmaları Birleştir
Çözümler
- Yeniden düzenleme sırasında işlevselliği asla değiştirmeyin
Bağlam
Bazen daha fazla gelişme için yeniden düzenlemenin gerekli olduğunu tespit ederiz.
Biz öğrenme konusunda uzmanız.
Çözümümüzü beklemeye almalıyız. Yeniden düzenleme üzerinde çalışın ve çözümümüze devam edin.
Basit kod
Yanlış
getFactorial(n) { return n * getFactorial(n); } // Rename and Change factorial(n) { return n * factorial(n-1); } // This is a very small example // Things go works while dealing with huge code
Sağ
getFactorial(n) { return n * getFactorial(n); } // Change getFactorial(n) { return n * getFactorial(n-1); } // Run the tests factorial(n) { return n * factorial(n-1); } // Rename
Tespit etme
Bu yeniden yapılanma kokusu.
- [x] Manuel
Etiketler
- Yeniden Düzenleme
Çözüm
Fiziksel bir belirteç kullanmalıyız.
Ya yeniden düzenleme aşamasındayız ya da geliştirme aşamasındayız.
Sorumluluk reddi beyanı
Kod Kokuları sadece benim görüşüm .
Kredi
Unsplash'ta Dannie Jing'in fotoğrafı
Kod çalışırken, yeniden düzenleme beni normalde özleyeceğim daha yüksek düzeyde anlayışa yönlendiriyor. Anlamanın yeniden düzenlenmesini kodla gereksiz bir şekilde uğraşmak olarak görenler, kafa karışıklığının arkasında saklı fırsatları asla göremediklerinin farkında değiller.
Martin Fowler
Yakında 5 kod kokusu daha geliyor…