말이 마차를 끄는 프로그램을 만든다고 생각하자.
말을 마차 앞에 연결하고 말을 움직이게 하면 말과 마차가 이동할 것이다.
그런데 프로그래머의 실수로 "마차를 말 앞에 연결"했다면 이는 버그를 유발할 것이다.
하지만 실제로 이러한 버그는 추적하는데 많은 노력이 필요할 수도 있다.
마차를 말 앞에 연결하고 말을 앞으로 가게 하는 경우, 말이 마차를 밀면서 말과 마차가 앞으로 이동할 수 있다. 이 단계에서 프로그래머는 아직까지 자신의 코드에 문제가 있음을 인지할 수 없다. 의도대로 프로그램이 작동되니까.
여기에 기능을 하나 추가해보자. 마차에 타고있는 마부가 앞을 향해 채찍질을 해서 마차의 속력을 올리는 기능이다. 프로그래머는 마부가 앞을 향해 채찍질하면 말을 자극할것이고 자극받은 말은 속력을 올릴 것이라고 예상한다. 각각의 기능(마부에게 채찍질을 시킴, 채찍이 말을 때림, 채찍에 맞은 말이 자극됨, 자극된 말은 속력을 올림)을 모두 구현한 프로그래머는 테스트를 해본다. 허나 프로그래머는 마부에게 아무리 채찍질을 시켜도 마차의 속력이 빨라지지 않는 것을 목격한다! 이 순간이 프로그래머가 버그를 발견한 순간이다.
프로그래머는 이러한 버그를 초래한 원인에 대해 여러 가설을 세우게 된다. '마부가 채찍질을 해도 말이 맞지 않는건가?', '말이 맞아도 자극되지 않는건가?', '말이 자극을 받아도 속력이 오르지 않는건가?' 등등 기능을 구성하는 로직의 어느 부분에 문제가 생겼는지를 추적한다. 아마 프로그래머는 추적 끝에 "마부가 채찍질을 해도 말이 채찍에 맞지 않음' 을 발견할 것이다. 포위망을 좁혔으나 아직 문제가 해결되지 않았다. 프로그래머는 마부가 휘두르는 채찍과 관련된 코드와 말이 채찍에 맞앚음을 인식하는 부분과 관련된 코드를 관찰할 것이다. 끝내 마부가 채찍질을 하는 곳과 말이 채찍을 맞는 곳이 자신의 예상과 다르다는 것을 발견하면 자신이 말과 마차를 거꾸로 연결하였음을 깨달을 것이다.
버그를 없앤다는 일을 프로그래밍을 전혀 모르는 사람들은 마치 방을 청소해서 더러운부분을 없애는 일처럼 생각하는 경우가 있다. 하지만 버그를 없애는 것은 '문제 해결력'의 활용을 극대화하도록 하는 일이며, 단순노동과는 거리가 멀다. 프로그래밍이 굉장히 기술적인 일이면서도, 암기력과 경험 만큼이나 논리력과 사고력이 필요하다고 하는 이유가 바로 이것에 있지 않은가 하는 생각을 한다.
'📁information > 개발관련' 카테고리의 다른 글
윈도우 시작 프로그램 추가 및 제거하는 법 (0) | 2022.06.14 |
---|---|
개발용 키보드셋팅 (0) | 2022.03.26 |
코드 공유할때 유용한 사이트 (0) | 2022.03.23 |
2022 백엔드 로드맵 (0) | 2022.01.23 |
댓글