Neden bir hata nedeniyle bu kadar yaygın değil ve bunları önlemek için ne yapabiliriz?


20

Tek tek hataların en yaygın (en çok değilse) programlama hatalarından biri olduğu görülmektedir (bkz. Https://softwareengineering.stackexchange.com/questions/109/what-are-common-mistakes-in-coding ve geleneksel bilgelik).

Bunların bu kadar yaygın olmasının nedeni nedir, insan beyninin nasıl çalıştığıyla ilgili bir şey mi?
Tek bir hata ile avın düşmesini önlemek için ne yapabiliriz?


8
Ortak mı? Böceklerin adil payını üretiyorum, ancak off-by-one hataları çok nadiren aralarında. Belki de çoğunlukla Python kullandığım için, yani indekslerle hokkabazlık yerine yineleyiciler kullandığım için mi? (Ve: Bu bize ne anlatıyor

Ne kadar az düşünürseniz, o kadar verimli olursunuz?
Malfist

@delnan: Katılıyorum. Tek tek hatalar genellikle kodlama yaparken yakalanan ilk hatalardır (resmi bir "test aşamasına" geçmeden önce).
Sinirli

7
Bir önceki soruyu neredeyse yanlışlıkla cevapladım ...
DevSolo

> Tek bir hata ile avın düşmesini önlemek için ne yapabiliriz? Bir yineleyici kullanın .
Jim G.

Yanıtlar:


18

İnsan beyninin nasıl çalıştığıyla ilgili bir şey. Genelde mühendislik düzeyinde hassasiyet gerektirmeyen görevler için "yeterince iyi" olmak için kablolanmış durumdayız. En çok uğraştığımız davalara "uç" davalar denmesinin bir nedeni vardır.

Muhtemelen tek tek hataları önlemenin en iyi yolu kapsüllemedir. Örneğin, bir koleksiyonu dizine göre yineleyen bir for döngüsü kullanmak yerine (0'dan saymaya - 1), numaralandırıcıda nerede durulacağına dair tüm mantığa sahip bir for-style stili döngü kullanın. Bu şekilde, numaralandırıcıyı yazarken, koleksiyonun her döngüsünde değil, sınırları yalnızca bir kez almanız gerekir.


6
Kapsülleme için +1. Şimdiye kadar gördüğüm en kötü tek tek hatalar, programın bir kısmı 1 tabanlı ve kısmı 0 tabanlı olduğunda ve her bir işlev kullanıldığında, hangisinin olduğunu ve yapmanız gerekip gerekmediğini hatırlamanız gerekir. dönüştürme veya değil ve hangi yöne gitmek için. Zor bir off-yan izlemek zorunda önce bir kaç ay 2 kötü kapsülleme anlamına birisi kapalı-by-1 yapılan hatalar nedeniyle iki ayrı bileşik yerlerde hata. Her yerde takip edilmesi imkansız olan dönüşümler vardı ve bunu tek bir yöntemle bir dönüşüme indirebildim .
Karl Bielefeldt

2
Daha fazla bilgi varsa, bunun bilimi hakkında daha fazla bilgi edinmek isterim. Ben de bu yüzden CSS gibi programlı stilin her şeyin kenarda olduğu kadar sinir bozucu olduğunu düşünüyorum ...
Company Laser

7

Beynin sınırları ve kenarları nasıl ele aldığı konusunda özel bir şey var.

Beynin menzil ve uzaylar açısından düşünmesi daha kolay olsa da , bir kenara odaklanmak biraz daha fazla dikkat gerektiriyor gibi görünüyor. İşte böyle, anlık dikkat kaybı veya yetersiz konsantrasyon ve sınırı kaçırdınız.

Başka hafif sorununa ilave farklı programlama ortamları göre 0 veya 1 başlayarak farklı endeksleme sistemlerine sahip olmasıdır olabilir aktif ortamlar türleri hem maruz insanlara karışıklığı ekleyin.


4

Bağlam değiştirmeden kaynaklandığını düşünüyorum. Günlük yaşamımızda 1 tabanlı indeksler kullanma eğilimindeyiz. Bu nedenle beynimiz doğru davranışı uzun süreli belleğe yazamıyor.


2
Ve sonra DO endeksinin 1'den başlayarak (PL / SQL gibi) programlama dilleri arasında geçiş yapma eğlencesi var.
Sinirli

3
Bunun için +1. 1 dizinli numaralandırma, gerçek dünyadaki görevlerin çoğuyla düzgün bir şekilde eşleşen "kaç tane var?" 0-endeksli, et alanında daha az kullanılan "her bir öğe hangi pozisyonda?"
Dan Ray
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.