왜 하나의 오류로 인해 일반적인 오류가 발생하지 않으며 어떻게 방지 할 수 있습니까?


20

비 일대 오류는 가장 일반적인 프로그래밍 오류 중 하나 인 것 같습니다 ( /software/109/what-are-common-mistakes-in-coding 참조). 및 기존의 지혜).

이것이 일반적인 이유는 무엇입니까? 인간의 뇌가 작동하는 방식과 관련이 있습니까?
한 번의 실수로 먹이가 떨어지지 않도록 어떻게 할 수 있습니까?


8
그것들은 일반적입니까? 나는 버그의 공정한 몫을 생산하고 있지만, 하나 하나의 오류는 거의 드물다. 아마도 파이썬을 주로 사용하기 때문에 아마도 인덱스로 저글링하는 대신 반복자를 사용합니까? (그리고 : 그것은 우리에게 무엇을 말합니까?;))

생각해야 할 것이 적을수록 생산성이 향상됩니까?
Malfist

@delnan : 동의합니다. 오프 바이 원 오류는 일반적으로 코딩 할 때 가장 먼저 발생하는 오류입니다 (공식 "테스트 단계"로 이동하기 전에).
FrustratedWithFormsDesigner

7
실수로 이전 질문에 거의 대답했습니다 ...
DevSolo

> 한 번의 실수로 먹이가 떨어지는 것을 막기 위해 어떻게해야합니까? 반복자를 사용하십시오 .
Jim G.

답변:


18

그것은 일종의 인간의 뇌가 작동하는 방식과 관련이 있습니다. 우리는 일반적으로 엔지니어링 등급의 정밀도를 요구하지 않는 작업에 "충분히"적합하도록 배선되었습니다. 우리가 가장 다루기 어려운 경우를 "가장자리"사례라고하는 이유가 있습니다.

아마도 일대일 오류를 피하는 가장 좋은 방법은 캡슐화입니다. 예를 들어 인덱스를 기준으로 컬렉션을 반복하는 for 루프 (0에서 count-1)를 사용하는 대신 열거 자에 내장 된 중지 위치의 모든 논리와 함께 for-each 스타일 루프를 사용하십시오. 이렇게하면 컬렉션을 반복 할 때마다 열거자를 작성할 때 경계를 한 번만 가져와야합니다.


6
캡슐화 +1 내가 본 것 중 최악의 버그는 프로그램의 일부가 1 기반이고 일부가 0 기반 일 때이며, 사용되는 모든 단일 기능은 어떤 기능을 사용했는지 기억해야합니다. 전환 여부와 진행 방향 몇 개월 전에 필자는 캡슐화가 잘못되어 두 개의 개별 컴 파운딩 장소에서 1 개씩 오류가 발생했기 때문에 2 개로 어려운 오류 를 추적해야했습니다 . 이 따를 불가능했던 사방 전환했고, 나는 그것을 아래로 얻을 수있었습니다 하나 에 변환 방법.
Karl Bielefeldt

2
누군가 더 많은 정보를 가지고 있다면 이것의 과학에 대해 더 많이 배우고 싶습니다. 나는 이것이 CSS와 같은 프로그래밍 스타일이 왜 모든 것이 가장자리인지를 너무나 실망시키는 이유라고 생각한다.
Company Laser

7

뇌가 테두리와 가장자리를 처리하는 방법에 특별한 것이 있습니다.

그것은 뇌의 관점에서 생각하기가 쉽다 동안 범위공간 , 가장자리에 집중하는 것은 좀 더주의를 요구하는 것 같다. 어떻게 발생하는지, 순간적인 주의력 상실 또는 집중력 부족으로 국경을 놓쳤습니다.

문제에 대한 또 다른 약간의 추가 사항은 서로 다른 프로그래밍 환경에서 0 또는 1로 시작하는 서로 다른 인덱싱 시스템을 가지므로 두 유형의 환경에 적극적으로 노출되는 사람들에게 혼란을 줄 수 있습니다.


4

컨텍스트 전환 때문이라고 생각합니다. 일상 생활에서 우리는 1 기반 인덱스를 사용하는 경향이 있습니다. 이 때문에 우리의 뇌는 올바른 행동을 장기 기억으로 태울 수 없습니다.


2
그런 다음 1부터 시작하는 DO 색인 (PL / SQL 등) 프로그래밍 언어 사이를 전환하는 재미가 있습니다.
FrustratedWithFormsDesigner

3
+1입니다. 1- 색인 번호 매기기는 "얼마나 많은가?"라는 질문에 대한 답변으로, 대부분의 실제 작업에 깔끔하게 매핑됩니다. 0- 색인은 "각 항목이 어떤 위치에 있습니까?"에 관한 것으로, 이는 공간에서 덜 사용됩니다.
Dan Ray
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.