paint-brush
Kodunuzun Kokmuş Kısımlarını Nasıl Bulabilirsiniz [Bölüm XLVI]by@mcsee
616
616

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

Kovboy kodlayıcılar en iyi uygulamaları takip etmez. Takımın önerilerine uymuyorlar. Kovboy kodlaması genellikle yazılım geliştirmede profesyonel olmayan ve riskli bir yaklaşım olarak kabul edilir çünkü bakımı zor ve hatalara açık kodlara yol açabilir.
featured image - Kodunuzun Kokmuş Kısımlarını Nasıl Bulabilirsiniz [Bölüm XLVI]
Maximiliano Contieri HackerNoon profile picture

Kodunuz 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 - XLV) burada bulabilirsiniz.


Devam edelim...


Code Smell 226 - Karışık Öncelikler

Bir uzay aracı daha düştü. Başka bir yazılım sorunu


TL;DR: Yazılımı tasarlayın ve test edin. Donanımdan daha ucuzdur

Sorunlar

Çözümler

  1. Doğru simülasyonlar oluşturun
  2. Hataya dayanıklı yazılım yapın

Bağlam

Luna-25, 19 Ağustos 2023'te Ay yüzeyine düştü.


Hindistan'ın Chandrayaan-3'ü Ay'ın güney kutbuna yumuşak inişinden 4 gün önce.


Adli analiz, talimatların bir veriyolunu paylaştığını ve doğru şekilde önceliklendirilmediğini ortaya çıkardı.


Uzay araçlarının uzun bir yazılım hatası geçmişi vardır.

Basit kod

Yanlış

 class TaskManager: def __init__(self): self.tasks = [] def add_task(self, task, priority): self.tasks.append((task, priority)) def execute_tasks(self): # No sorting for task, _ in self.tasks: task.execute() class Task: def __init__(self, name): self.name = name def execute(self): print(f"Executing task: {self.name}") task_manager = TaskManager() highPriorityTask = Task("Slow down") mediumPriorityTask = Task("Take Photos") reviveKlaatu = Task("Klaatu barada nikto") # unsorted task_manager.add_task(mediumPriorityTask, 2) task_manager.add_task(highPriorityTask, 1) task_manager.add_task(reviveKlaatu, 3) task_manager.execute_tasks()

Sağ

 class TaskManager: def __init__(self): self.tasks = [] def add_task(self, task, priority): self.tasks.append((task, priority)) def execute_tasks(self): # Sort tasks by priority (high to low) self.tasks.sort(key=lambda x: x[1], reverse=True) for task, _ in self.tasks: task.execute() class Task: def __init__(self, name): self.name = name def execute(self): print(f"Executing task: {self.name}") task_manager = TaskManager() highPriorityTask = Task("Slow down") mediumPriorityTask = Task("Take Photos") reviveKlaatu = Task("Klaatu barada nikto") # unsorted task_manager.add_task(mediumPriorityTask, 2) task_manager.add_task(highPriorityTask, 1) task_manager.add_task(reviveKlaatu, 3) task_manager.execute_tasks()

Tespit etme

  • [x] Manuel

Bu bir tasarım kokusu

Etiketler

  • Güvenilirlik

Çözüm

Yazılım bileşenleri oluşturun ve gerçek ve gerçek olmayan koşulları simüle edin

İlişkiler

Code Smell 198 - Gizli Varsayımlar

Daha fazla bilgi

Sorumluluk reddi beyanı

Kod Kokuları benim görüşüm .


Analitik Motorun herhangi bir şeyin ortaya çıkması gibi bir iddiası yoktur. Nasıl yapılmasını emredeceğimizi bildiğimiz her şeyi yapabilir… Ancak bilimin kendisi üzerinde dolaylı ve karşılıklı bir etki yaratması muhtemeldir.


Ada Lovelace

Yazılım Mühendisliği Harika Sözler


Code Smell 227 - Kovboy Kodlaması

Kovboyları Hollywood filmlerine bırakın.


TL;DR: Ekip programcısı olarak kod yazın

Sorunlar

  • Okunabilirlik
  • Güvenilmez kod
  • İnsan Yönetimi Sorunları
  • Koordinasyon eksikliği

Çözümler

  1. Profesyonel kod yazın.


  2. Bildirimsel, şifreli olmayan adlar kullanın.

Bağlam

Kovboy kodlayıcılar en iyi uygulamaları takip etmez.


Takımın önerilerine uymuyorlar.


Kovboy kodlaması genellikle yazılım geliştirmede profesyonel olmayan ve riskli bir yaklaşım olarak kabul edilir çünkü bakımı zor ve hatalara açık kodlara yol açabilir.


Kovboy Programcıları iyi insanlardır; ancak grup halinde çalışamazlar .

Basit kod

Yanlış

 # Very simple example # Compute the sum of two numbers without any structure or best practices. num1 = input("Enter the first number: ") num2 = input("Enter the second number: ") # WARNNING!!!! Don't remove the line below !!!!! # (Unpleasant comment) res = num1 + num2 # (No data type checking or error handling) print("The sum is: " + result) # (No validation or formatting) # (No good names, no functions, no error handling, no testing, # no version control, and no structure.)

Sağ

 def add_numbers(): try: firstAddend = float(input("Enter the first number: ")) secondAddend = float(input("Enter the second number: ")) total = firstAddend + secondAddend return total except ValueError: print("Invalid input. Please enter valid numbers.") return None def main(): total = add_numbers() if total is not None: print("The sum is: {:.2f}".format(sum)) if __name__ == "__main__": main()

Tespit etme

  • [x] Manuel


Bu kodlama uygulamalarını önlemek ve ekip oluşturmayı zorunlu kılmak için çevre kuralları belirleyebilirsiniz.

İstisnalar

  • Çok küçük kişisel projeler

Etiketler

  • bildirimsel

Çözüm

Yazılım geliştirme ekip işidir.

İlişkiler

Code Smell 06 - Çok Zeki Programcı

Code Smell 02 - Sabitler ve Sihirli Sayılar

Code Smell 105 - Komedyen Yöntemleri

Daha fazla bilgi

https://www.linkedin.com/pulse/software-development-cowboy-coding-hakan-atbaş/

Kredi

Unsplash'ta Taylor Brandon'ın fotoğrafı


Bilgisayarlardan kaynaklanan tehlike, sonunda erkekler kadar akıllı olmaları değil, bizim onlarla yarı yolda buluşmayı kabul etmemizdir.

Bernard Avishai


Code Smell 228 - Dosya Başına Çoklu Sınıflar

Birden fazla sınıf karmaşadır.


TL;DR: Endişelerin ayrılması ilkesini ve dosya organizasyonunu takip edin

Sorunlar

  • Kod Organizasyonu
  • Kaplin
  • Otomatik yükleme sorunları
  • Hata ayıklama
  • Sürüm kontrolü ve birleştirme çakışmaları

Çözümler

  1. Dosya başına tek bir sınıf bildirin


  2. Ad kapsamını kullan

Bağlam

Sınıfları bir dosya sistemi kullanarak bildiren dillerde, dosya başına bir sınıfa sahip olmak genellikle en iyi uygulama olarak kabul edilir.


Bu yaklaşım, kod organizasyonunun ve bakımının iyileştirilmesine yardımcı olur ve olası sorunları azaltır.


Ad alanlarını proje yapınızda ayrı dizinler halinde düzenleyebilirsiniz.


Bu şekilde, tek bir dosyada birden fazla sınıf bildirme sorunlarından kaçınırken mantıksal ve etkili bir kod tabanını koruyabilirsiniz.

Basit kod

Yanlış

 <? namespace MyNamespace; class Class1 { public function sayHello() { echo "Hello from Class1!\n"; } } class Class2 { public function sayHello() { echo "Hello from Class2!\n"; } }

Sağ

 <? namespace MyNamespace; class Class1 { public function sayHello() { echo "Hello from Class1!\n"; } }
 <? namespace MyNamespace; class Class2 { public function sayHello() { echo "Hello from Class2!\n"; } }

Tespit etme

  • [x] Otomatik

Birçok standart bu kuralı zorunlu kılar

Etiketler

  • Kaplin

Çözüm

Kodunuzu düzenli tutun ve bilinen standartları takip edin.

İlişkiler

Code Smell 48 – Standartsız Kod

Daha fazla bilgi

Kredi

Unsplash'ta Marjan Blan'ın fotoğrafı


Gereksinimler veya tasarım olmadan programlama, boş bir metin dosyasına hata ekleme sanatıdır.


Louis Srygley


Code Smell 229 - Bürokrasi

Kodunuzu aşırı karmaşık hale getiriyorsunuz.


TL;DR: Kaza eseri karmaşıklıktan ve bürokrasiden kaçının

Sorunlar

  • Kazara Karmaşıklık
  • Okunabilirlik
  • Bijeksiyon Arızası

Çözümler

  1. MAPPER'ı kullanarak sorumlulukları gerçek dünyadaki nesnelere atayın.

Bağlam

"Bürokrasi" kod kokusu, gereksiz karmaşıklık, bürokrasi veya kod tabanının anlaşılmasını veya sürdürülmesini zorlaştıran aşırı yapılandırmayla ilgili olabilir.

Basit kod

Yanlış

 class VotingSystem: def __init__(self, config): self.config = config def validate_voter(self, voter_id): if self.config['voter_verification_enabled']: # Code to verify the voter's identity goes here def cast_vote(self, voter_id, candidate): if self.config['voting_enabled']: # Code to record the vote goes here def generate_vote_report(self): if self.config['generate_report']: # Code to generate a voting report goes here def audit_voting_system(self): if self.config['audit_enabled']: # Code to perform an audit of the voting system goes here # ... other voting-related methods ... # Usage config = { 'voter_verification_enabled': True, 'voting_enabled': False, 'generate_report': False, 'audit_enabled': True } voting_system = VotingSystem(config) # Voter validation, voting, report generation, # and auditing are handled based on the configuration.

Sağ

 class VoterVerification: def verify_voter(self, voter_id): # Code to verify the voter's identity goes here class VotingMachine: def cast_vote(self, voter_id, candidate): # Code to record the vote goes here class VoteReporter: def generate_report(self): # Code to generate a voting report goes here class VotingAuditor: def audit_voting_system(self): # Code to perform an audit of the voting system goes here # Usage voter_verification = VoterVerification() voting_machine = VotingMachine() vote_reporter = VoteReporter() voting_auditor = VotingAuditor() # Voter verification, vote casting, report generation, # and auditing are handled separately.

Tespit etme

  • [x] Yarı Otomatik

Bazı araçlar, nesnelerinizi gereksiz sorumluluklarla şişirdiğinizi tahmin edebilir.

Etiketler

  • Şişkinlikler

Çözüm

Geliştiricilerin hangi özelliklerin etkin olduğunu belirlemek için karmaşık yapılandırmada gezinmesi gerektiğinden bürokratik kod kokusu belirgindir.


Bu yalnızca gereksiz karmaşıklığı artırmakla kalmaz, aynı zamanda sisteminizin bütünlüğünü etkileyebilecek yanlış yapılandırma olasılığını da artırır.

İlişkiler

Code Smell 54 - Demir Tekneler

Sorumluluk reddi beyanı

Kod Kokuları benim görüşüm .

Kredi

Unsplash'taki patlamanın fotoğrafı


Bir Yazılım Yanılgısı: Eğer işe yararsa ve biz hiçbir şeyi değiştirmezsek, çalışmaya devam edecektir.

Jessica Kerr


Code Smell 230 - Schrödinger Kodu

Kodunuz ölü ve canlı.


TL;DR: Yarış koşullarına dikkatlice bakın

Sorunlar

Çözümler

  1. Yarış koşullarından kaçının


  2. Küresel değişkenlerden kaçının


  3. Doğru senkronizasyonu kullanın

Bağlam

Schrödinger kodu aynı anda iki farklı durumda olabilen koddur ancak kodun durumu çalıştırılana kadar belirlenmez.


Bu, kod bir yarış koşulu içerdiğinde veya kod, diğer iş parçacıkları veya işlemler tarafından değiştirilebilen genel bir değişkenin durumuna bağlı olduğunda meydana gelebilir.

Basit kod

Yanlış

 import threading cats_alive = 0 def thread_1(): cats_alive += 1 def thread_2(): cats_alive -= 1 if cats_alive > 0: feedThem() # The value of cats_alive is indeterminate, # so the code can be in either of the two states: # # 1. cats_alive > 0 and feedThem() is called. # 2. cats_alive <= 0 and feedThem() is not called.

Sağ

 import threading lock = threading.Lock() cats_alive = 0 def thread_1(): with lock: cats_alive += 1 def thread_2(): with lock: cats_alive -= 1 if cats_alive > 0: feedThem() # With the lock, the two threads cannot access # the `cats_alive` variable at the same time. # This means that the value of `cats_alive` is always determined, # and the program will not exhibit Schrödinger code behavior.

Tespit etme

  • [x] Manuel

Eşzamanlı kod üzerinde kod incelemeleri yapın

Etiketler

  • Eşzamanlılık
  • Küreseller

Çözüm

Schrödinger kodundan kaçınmak için yarış koşullarından kaçının ve diğer iş parçacıkları veya işlemler tarafından değiştirilebilecek global değişkenlerin durumuna bağlı kalmaktan kaçının.


Kodunuzda global bir değişken kullanmanız gerekiyorsa bunun doğru şekilde senkronize edildiğinden emin olun.

İlişkiler

Code Smell 198 - Gizli Varsayımlar

Kod Kokusu 32 - Tekil Tonlar

Code Smell 60 - Küresel Sınıflar

Kredi

Yerlin Matu'nun Unsplash'taki fotoğrafı


Herhangi bir programcının yapmasını isteyeceğiniz son şey dahili durumla uğraşmak

Alan Kay


Gelecek hafta 5 koku daha.