Step by step

한 걸음 한 걸음 천천히

Programming Language/C Language

프로그램의 개발과 컴파일 및 디버깅 과정

개발자 까마귀 2024. 4. 4. 11:55
728x90

이 포스트에선 프로그램을 작성하는 과정과 프로그램의 오류의 종류들에 대해 알아본다.

 

프로그램의 개발 과정

1. 요구사항 분석 - 무엇을 만들 것인가?

2. 설계 - 알고리즘을 설계한다.

3. 구현 - 개발 도구를 이용해(IDE) 소스코드를 작성한다.

4. 테스팅 - 여러가지 경우의 수를 테스트한다.

5. 유지 보수 - 사용자의 요구사항과 오류들을 수정한다.

설계

문제를 해결하는 알고리즘을 개발하는 단계이다. 저번 포스팅에서 공부한 Flow Chart, Pseudo Code를 사용한다. 알고리즘은 프로그래밍 언어와는 무관하다. 또한, 알고리즘은 결과가 아닌 그 결과를 얻기 위한 과정에 대해 초점을 맞춘다.

소스 작성

알고리즘을 프로그래밍 언어를 이용하여 기술하는 것. 프로그래밍 언어의 문법에 맞게 기술하는 것을 소스 프로그램(xxx.c)이라고 한다. 이 소스 프로그램은 주로 텍스트 에디터(메모장), 통합 개발 환경(IDE)

컴파일

컴파일은 소스 프로그램을 기계어로 된 오브젝트 파일(xxx.obj)로 변환하는 작업이다. 컴파일을 하는 수행하는 것을 컴파일러라고 부른다.

소스 프로그램을 오브젝트 파일로 바꾸는 과정에 발생하는 오류를 컴파일 오류(Compile Error)라고 부른다.

오류에 대해서는 아래에서 자세히 다룬다.

링크

컴파일된 목적 프로그램(오브젝트 파일)을 라이브러리(여러 기능을 미리 작성해 놓은 것. 입출력 기능, 수학 함수 등)와 연결시켜 실행 프로그램을 작성하는 것을 의미한다. 링크를 수행하는 것을 링커라고 부른다.

 

실행 파일 생성 과정

 

소스 프로그램에서 오브젝트 파일을 만드는데 필요한 과정을 컴파일(Compile)이라고 부르며 컴파일하는 프로그램을 컴파일러(Compiler)라고 부른다.

오브젝트 파일에서 실행파일을 만드는 과정은 링크(Link)라고 부르며 오브젝트 파일을 실행파일 하나로 병합하는 프로그램을 링커(Linker)라고 부른다.

그렇게 생성된 실행파일을 실행(Excution)한다.

디버깅

오류

프로그램에는 여러가지 오류가 존재할 수 있다.

컴파일 시간 도중 발생하는 오류를 컴파일 오류, 컴파일 에러라고 부르며 구문 오류이다.

눈에 보이는 문제들이기 때문에 매우 쉽게 해결할 수 있다.

 

실행 도중 발생한 오류를 실행시간 에러는 컴파일 에러에 비해 눈에 보이지 않는 문제점들이다.

0으로 나누어 발생하는 오류와 잘못된 메모리에 접근하는 오류가 있다. 이는 컴파일 에러보다는 찾기 어렵지만 유심히 잘 살펴보면 크게 수고를 들이지 않고 해결할 수 있다.

사실 굳이 따지고 보자면 컴파일 에러 또한 실행시간 에러에 속하나, 편의를 위해 구분하여 부르고 있다.

 

논리오류가 가장 머리가 지끈거리는 에러이다. 이는 실행까지 모두 잘 되었으나 결과 값이 이상해지는 것을 의미한다. 예를 들어 1부터 10까지의 합을 구하는 코드를 작성하였는데 결과값이 55가 아닌 엉뚱한 숫자가 나온다던가 하는 경우가 논리 오류에 해당한다. 이는 코드의 알고리즘을 하나하나 뜯어보며 최악의 경우 알고리즘을 새로 구상해야하는 경우도 있다.

디버깅의 뜻과 유래

소스에 존재하는 오류를 잡는 것을 의미하며 1945년 마크2 컴퓨터에 벌레가 들어가 고장을 일으켰고 이를 "컴퓨터 버그(Computer Bug)"라고 불렀다. 이에 그레이스 호퍼가 벌레를 채집해 기록을 남기고 이를 "디버깅(Debugging"이라고 불렀다.

소프트웨어의 유지 보수

소프트웨어는 디버깅을 모두 마친 후에도 버그가 남아있을 수 있기에 유지 보수를 꾸준히 해야한다. 그 외에도 사용자의 불만이나 요구사항을 소프트웨어에 반영해야하기에 유지 보수를 해야한다.

소프트웨어는 유지 보수 비용이 전체의 50% 이상이다.

 

이 글에서 상술했던 통합 개발 환경(IDE: Integrated Development Environment)는 텍스트 에디터 + 컴파일러 + 디버거 기능을 모두 갖춘 것을 말한다.

 

우리는 앞으로 Visual Studio 2022를 이용해 C를 배우게 되는데 Visual Studio 2022에서 프로그램을 관리하는 시스템에 대해 간략히 설명하자면

최상단에 Solution 그 밑에 Project, 그 밑에 File들이 존재한다.

솔루션은 문제해결에 필요한 프로젝트들을 담은 컨테이너이며, 프로젝트는 하나의 실행파일을 만들기 위해 필요한 항목들이 들어 있는 컨테이너이다.

또한 32비트, 64비트 운영체제에서 사용할 수 있는 디버그 파일과 실행 파일이 존재한다.

C언어에서의 에러와 경고

C 컴파일러는 실행 시 오류가 발생할 수 있다.

에러는 심각한 수준의 오류에 대해 발생하며 코드의 실행자체가 되지 않는다.

그러나 경고의 경우 코드 실행은 되지만 실행 도중 문제가 발생할 수 있다는 점을 경고하는 경미한 수준의 오류에 대한 것이다.

 

컴파일 시간 에러는 컴파일과 링크 과정에서 발생될 수 있다.

실행시간 에러와 논리 에러는 컴파일부터 실행할 때까지도 발생한다.

디버그

디버깅은 논리 오류를 찾는 과정을 의미한다.

디버거는 프로그램을 한 문장 씩 실행하며 오류의 원인을 찾는 도구이다.

728x90