paint-brush
Kodunuzun Kokmuş Kısımlarını Nasıl Bulabilirsiniz [Bölüm XXXIV]ile@mcsee
725 okumalar
725 okumalar

Kodunuzun Kokmuş Kısımlarını Nasıl Bulabilirsiniz [Bölüm XXXIV]

ile Maximiliano Contieri7m2023/04/07
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

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 Kokuları Önceki tüm kod kokularını (Bölüm i - XXXIII) burada bulabilirsiniz.
featured image - Kodunuzun Kokmuş Kısımlarını Nasıl Bulabilirsiniz [Bölüm XXXIV]
Maximiliano Contieri HackerNoon profile picture

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

  1. Üst düzey bir işleyici kullanın.


  2. Dönüş kodlarını tercih eden dillerden kaçının.


  3. 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

Code Smell 72 - Dönüş Kodları

Daha fazla bilgi

Hızlı Başarısız Olun

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

  1. 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 49 - Önbellekler

Code Smell 150 - Eşit Karşılaştırma

Daha fazla bilgi

Eşitlik ve Karma

Java'da karma kod

Hashcode ve Eşit

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

  1. Nedenleri konusunda açık olun.
  2. 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

  1. 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

  1. 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…