본문 바로가기

IT

코딩(Coding)과 버그(Bug)

반응형

프로그램 설계가 명확해지면 개발자는 코딩을 시작하게 된다. 훌륭한 개발자가 되려면 멋진 코드를 쓰는 것이 아니라 고객의 요구를 이해하고 팀원과 잘 소통하는데 좀 더 많은 시간을 투자해야 한다. 협업을 통한 프로그램 개발의 첫 시작은 코딩이며 좋은 코드는 설계의 세부 사항과 관계없이 몇 가지 기본 원칙을 중시한다.

 

(1) 가능한 한 짧게 쓰기: 프로그램은 대개 동일한 작업을 반복해서 수행한다. 코드를 복사해서 붙여넣는 방식으로 반복 작업을 하게 되는데 이런 방식은 업데이트할 때마다 여러 곳을 변경해야 하므로 실수가 발생한다. 이러한 이유로 반복적인 코드를 작성하는 대신, 특정 작업을 수행하는 미니 프로그램 같은 함수를 만드는 것이다. 그러면 코드를 반복하지 않고도 필요할 때마다 그 함수를 호출하면 된다. 

-. DRY(Don't Repeat Yourself)

-. WET(Waste Everyone's Time)

 

(2) 읽을 수 있게 만들기: 컴퓨터가 이해할 수 있는 코드가 아니라 사람이 이해할 수 있는 혹은 사람이 읽을 수 있는 코드를 만들어야 한다. 각 부문의 목적을 문서화하고 관련된 요소는 한데 모아야 한다. 코드 배치의 규약을 따르고 함수와 변수에 명확한 이름을 사용함으로써 코드를 읽을 수 있는 상태로 유지한다. 수정된 사항, 여럿이 나누어 한 작업, 버그를 처리하는 해결책 등으로 코딩이 완성될수록 복잡해진다. 체계적이지 못한 코드에서 오류를 찾는 것은 매우 어려운 일이 될 것이다.

 

(3) 모듈 만들기: 훌륭한 개발자는 모듈(Modules)이라는 독립된 덩어리로 나누어 문서를 만든다. 모듈은 건물 전체를 만들기 위해 조립하는 빌딩 블록과 같은 역할이다. 모듈을 만들면 여러 사람이 동시에 프로젝트에 참여할 수 있다. 문제가 발생하거나 고객의 요구에 의해 모듈만 변경하면 되기 때문에 업데이트하기도 쉽다.

 

(4) 저장하기: 기능을 추가하거나 문제를 해결하기 위해 코드의 일부를 다시 작업한다. 이 경우, 정상적으로 작동하는 모듈이 가끔 프로그램의 다른 부분에 업데이트된 후 작동하지 않을 때가 있다. 이러한 문제를 사전에 방지하기 위해 항상 저장하는 습관은 매우 중요하다. 문제가  발생할 경우 제대로 작동한 마지막 버전으로 되돌리면 되기 때문이다. 따라서, 개발자는 오류에 대비해 테스트하지 않은 코드를 완성된 코드와 따로 보관하고 작성한 모든 버전의 코드를 저장해야 한다. 이 모든 업데이트를 관리하기 위해 [버전 관리 소프트웨어]를 사용한다. 실수로 다른 사람의 작업을 덮어쓰거나 오래된 버전에 의존하지 않도록 하는 것이다.

 

 

버그(Bug)의 종류

(1) 구문 오류: 문법상의 오류다. 철자 오류, 잘못된 명령어, 문장 부호 누락 등이 여기에 속한다. 구문 오류는 생기기 쉽지만 고치기도 쉽다.

 

(2) 실행 시간 오류: 컴퓨터가 할 수 없는 일을 실행하라고 지시할 때 생기는 오류다. 실행 시간 오류는 무한 루프(Infinite Loops)와 관련 있다. 무한 루프는 코드가 컴퓨터에게 언제 멈추는지 지정해 주지 않고 하나의 작업을 반복하라고 할 경우 컴퓨터가 끝없이 돌아가게 하는 현상을 말한다. 개발자들이 오류 메시지를 만들거나 또는 프로그램을 깨뜨리는 경우에 실행 시간 오류는 반드시 발생한다.

 

(3) 논리 오류: 개발자가 원하는 방향과 실제로 프로그램이 실행되는 방향이 다를 때 발생한다. 프로그램이 오류 메시지 없이 실행되므로 이상 없이 작동하는 것처럼 보이지만, 예상과 다른 결과를 낳기 때문에 논리 오류는 찾아내기 어렵다.

 

 

버그는 흔히 발생하지만 큰 사건을 초래할 수 있다. 따라서, 개발자는 소프트웨어 개발에 드는 시간과 상당한 비용을 테스트에 할당해야 한다. 유용하고 신뢰할 수 있는 소프트웨어를 만들기 위해 테스트가 광범위하게 진행되어야 한다. 크게 두 가지로 테스트 방향이 정해지는데 하나는 검증 테스트를 통해 프로그램이 고객의 욕에 부합하는지를 확인한다. 다른 하나는 프로그램에서 버그(Bug)를 찾아내는 것이다.

검증 테스트는 매우 중요하기 때문에 작업을 시작하기 전에 테스트 코드를 쓰는 경우가 많다. 개발자는 오류를 최소화하기 위해 코드 작성만큼이나 많은 시간을 검증 테스트에 써야 한다. 검증 테스트는 여러 단계를 수행하여 버그를 찾아 프로그램을 올바른 방식으로 구축하고 있는지 확인해야 한다.

 

(1) 단위 테스트: 코드의 작은 부분을 검사한다. 작은 모듈 하나를 작성해 오류를 확인한 후 예상대로 작동할 때까지 다시 작성한다. 작게 시작하면 버그를 더 쉽게 찾을 수 있다.

 

(2) 통합 테스트: 두 개의 코드 단위가 함께 작동하는지를 검사한다. 단독으로 작동하는데 문제가 발생하지 않더라도 다른 구성요소와 결합하면 오류가 종종 발생하기 때문이다.

 

(3) 회귀 테스트: 프로그램에 새로운 문제가 발생하지 않았는지 확인하기 위해 코드를 변경한다. 하나의 버그를 바로 잡으면 또 다른 버그가 생길 수 있기 때문에 업데이트 때마다 단위 테스트와 통합 테스트를 다시 실행해야 한다.

 

(4) 시스템 테스트: 프로그램의 각 요소가 제대로 작동하는지 확인한다. 프로그램이 데이터를 올바르게 분류하도록 보장하는 것처럼 간단한 테스트에서부터 처리 오류를 찾기 위해 끊임없이 체크하는 복잡한 테스트도 있다. 사용자 로그인, 데이터 저장, 보안 프로토콜, 프로그램 기능 등을 모두 다룬다.

 

(5) 설치 테스트: 사용자가 실제로 자신의 기기에 프로그램을 연결할 수 있는지 확인한다.

 

(6) 호환성 테스트: 프로그램이 여러 기종에서 제대로 작동하는지 확인한다. 컴퓨터의 사양에 따라 프로그램이 제대로 작동하지 않을 수 있기 때문이다.

 

(7) 성능 테스트: 프로그램의 속도와 신뢰성을 검증한다. 실제 조건을 예상하고 프로그램에 얼마나 많은 부하가 걸리는지를 시뮬레이션하는 부하 테스트가 포함된다. 성능 테스트를 기반으로 부하를 예측하고 최악의 경우를 대비해 충분한 시스템을 설계해야 한다.

 

(8) 유용성 테스트: 일반 사용자가 프로그램을 이해할 수 있는지 확인한다.

 

(9) 접근성 테스트: 프로그램이 시각, 청각, 이동이 불편한 사람들에게 효과가 있는지를 평가한다.

 

반응형

'IT' 카테고리의 다른 글

심리학과 소프트웨어  (0) 2023.03.01
알고리즘(Algorithm) 설계와 활용  (0) 2023.02.26
프로그래밍 언어  (0) 2023.02.14
프로그래머(Programmer)  (0) 2023.02.09
메타버스 [META VERSE]  (1) 2023.01.16