Upload
buithuan
View
230
Download
2
Embed Size (px)
Citation preview
070
GGUUEESSTT
ARTICLE
소프트웨어 개발자라면 누구나 소프트웨어 디펙트(Software Defect, 주1)로 고생한
기억이 있을 것이다. 예를 들어, 내가 며칠 동안 못 찾은 디펙트를 동료 개발자가
몇 분 만에 찾는 경우도 있고 복잡한 디버깅 과정을 거쳐 디펙트의 원인을 분석해
본결과지역변수를초기화하지않아생긴단순한문제도있다.
글 : 이창호주임 / MDS테크놀로지 TA(Test Automation)사업팀
www.mdstec.com
소프트웨어는형체가없기때문에사람이코드의의미를해석해문제점이나디
펙트를찾는다는것은정말어려운일이다. 출시이전에디펙트가발견되면금전
적인손실은어느정도막을수있지만, 불과몇년사이에소스코드의크기와복
잡도가너무나도많이증가했으므로코드상의모든부분을개발자가하나하나테
스트하고디펙트를찾아내수정하는작업은거의불가능하다고볼수있다.
정적분석기법이란
시간과인력이많이소모되는소프트웨어테스팅과정을신속하고정확하게진
행하기위한기법과툴들이연구되고있다. 이번기고에서필자는정적분석툴
CodeSonar를기준으로실행되는정적분석기법(Static Analysis)에대해소개
하도록하겠다. 정적분석기법은소스코드실행없이코드의의미를분석해디
GGUUEESSTT ARTICLE
SW개발 과정에서 효과적인
정적 분석 기법 적용방법
그림 1. Codesonar 분석과정
SourceCode
ProgramModel
Constructor
ProgramPath
Analyzer
Static Analysis Tool
AbstractProgram
Representation
DefectWarningDatabase
Web-Baseduser Interface
071
펙트를찾는방법이다. 그림 1에서와같이
입력된 소스 코드를 Program Model
Constructor가 분석하면 실행시의 동작
을 표현한 중간코드로 변환된다. 이 중간
코드에는변수의범위나실행경로를추적
할수있는정보들이담겨져있다. 변환된
코드를 Program Path Analyzer가분석
해실제실행되는경로를추적하고그중
디펙트로의심되는항목을찾아리스트를
작성함으로써, 사용자는웹을통해작성된
디펙트리스트를검토하고실제디펙트를
찾아낸다. 그림 2는 CodeSonar와 실제
빌드환경과의 연동 과정을 나타내고 있
다. CodeSonar는 빌드 과정을 감시하는
기능을제공하기때문에간단한세팅만으
로 실행 가능하다. 이 툴은 결과를 html
형태로만들어내며 Html 결과에는각변
수와함수의링크가포함되어클릭몇번
만으로디펙트를추적및원인분석이가
능하다(그림 3참조).
정적 분석 기법을 적용한 코딩 단
계의세부과정
소프트웨어 개발 과정을 크게 5단계로
요약한다면그림 4와같다.
개발자 입장에서 코딩단계를 살펴보면
버전관리툴에서체크아웃하고코드를작
성한 후 컴파일러를 통해 작성된 코드의
Syntax Error를체크한다. 에러수정이완
료되면체크-인을실시한다.(그림 5참조)
이과정에정적분석툴로디펙트를체
크하는단계를포함시키면그림 6과같은
AROUND THE EMBEDDED
FEATURE STORY
GUSET ARTICLE
PRODUCT FEATURE
그림 2. Codesonar와빌드환경의연동
그림 3. Codesonar 결과화면
Build Information(e.g., Makefiles orIDE-based build)
CodeSonarBuild Watcher
CodeSonarAnalyzer
Defect warningdatabase
SourceCode
RegularCompilation Regular
Object Code
Regular BuildEnvironment
Web-based user interface
(248라인에서 사이즈 값이 1이 되면 256라인의 리턴문이 실행되어 270라인 pSum 변수 초기화 부분이 실행되지 않는다. 따라서 497 라인에서 sum 변수는 초기화 되지 않고 사용 되었다는 디펙트가 검출된다.)
072
진행이이루어지며, 개발자는 syntax error가없는코드를정적분석툴로분석해
발견된디펙트를수정할수있다. 예를들어, 개발자가오늘작성한코드에버퍼
오버런이있었다고가정할경우, 그림 5와같은순서로코딩을하는개발자는해
당부분이테스트되지않는이상버퍼오버런의존재여부를판단할수없다. 이
경우, 코딩후바로수정하는것보다수정작업이훨씬어려워진다. 이미변수나
라인은다른곳과연관되어있을확률이크고문제가발견된부분을수정함으로써
또다른문제가유발될수있기때문이다. 하지만그림 6과같이정적분석기법을
적용해개발을진행하는개발자는코딩후정적분석툴을실행함으로써발견된버
퍼오버런을수정할수있다. 이작업은수정된부분이다른코드에미치는영향을
최소화하기때문에, 테스팅단계의업무강도를줄이고높은품질의소프트웨어
제품을조기출시할수있는환경을제공
한다.
글을마치며
CodeSonar가찾아내는디펙트항목은
약 50여 가지이며 앞으로도 계속 추가될
예정이다. 이가운데발생시시스템에심
각한영향을미칠수있는크리티컬디펙
트들은그림 7과같다.
필자는약 3년동안다양한소프트웨어
관련 기업들을 방문해 많은 라인의 소스
코드를 분석하였다. 필자의 경험에 비추
어볼때, Buffer Overflow(주2), Buffer
Underflow(주3), Resource Leak, Null
Pointer Deference, Uninitialized
variable의 5개 크리티컬 디펙트들이 전
체의 80% 이상을차지하고있다. 배열의
길이를선언할때는숫자를직접넣는것
보다는 정의된 값을 이용하고 포인터 변
GGUUEESSTT ARTICLE
Buffer Overrun Return pointer to Freed
Buffer Underrun Type Overrun
Division By Zero Type Underrun
Double Free Uninitialized Variable
Free Non-HeapUse After FreeVariable
Free Null Pointer Double Close
Resource Leak Double Lock
Missing ReturnDouble Unlock
Statement
Null Pointer Memcpy Length Dereference Unreasonable
Return Pointer Strcpy Length To Local Unreasonable
그림 7. Codesonar에서검출가능한크리티컬디펙트리스트
그림 4. 일반적인소프트웨어개발과정
그림 5. 일반적인코딩과정 그림 6. 정적분석툴을이용한코딩과정
요구분석 설 계 코 딩 테스팅 유지보수요구분석 설 계 코 딩 테스팅 유지보수
Check Out
Check Out
코드 작성
코드 작성
코드 수정
코드 수정
Compile Error 발견?
Compile Error 발견?
Defect발견?
yes
yes
yes
Check In
Check In
no
no
no
073
AROUND THE EMBEDDED
FEATURE STORY
GUSET ARTICLE
PRODUCT FEATURE
AROUND THE EMBEDDED
FEATURE STORY
GUSET ARTICLE
PRODUCT FEATURE
수를참조할때Null 유무를체크하며, 로컬변수
를 선언할 때 초기화를 해주는 코딩 습관으로도
많은디펙트를줄일수있다. 하지만라인이크거
나구조가복잡한코드를분석하고검증하기위해
서는객관적인툴이꼭필요하다. 또한, 툴이발견
한디펙트들을분석해발생원인을밝혀내고개발
자들끼리 정보를 공유함으로써 해당 디펙트들이
재발하지않도록관리하는것도정말필요한시스
템이라고생각한다. 무조건만들어서먼저출시하
고향후에A/S나펌웨어업데이트로수정하면된
다는생각으로제작된소프트웨어는시장경쟁에
서살아남을수없다. 따라서여유있는개발기간
을통해높은품질의소프트웨어를조기에출시하
기위해서는개발에도움을줄수있는도구들을
잘활용해야만할것이다.
▶주 1) 디펙트(Defect) : 시스템의 성능을 떨어뜨리
거나 멈춤, 오동작을 유발하는 소프트웨어의 구문.
일반적으로설계상의오류도포함됨.
▶주 2) Buffer Overflow : 배열이나 포인터의 유효
범위를 어드레스 증가방향으로 벗어나는 디펙트.
CodeSonar에서는 버퍼 오버런과 타입 언더런이
해당된다.
▶주 3) Buffer Underflow : 배열이나포인터의유효
범위를 어드레스 감소방향으로 벗어나는 디펙트.
CodeSonar에서는버퍼언더런, 타입언더런이해
당된다.
☎
02-2026-5700
www.Embeddedworld.co.kr
인터넷에서읽는Embedded World,
e-Magazine서비스
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
의 특징은 제작비용, 및 유통비용, 판매가격이 상대적
으로 인쇄책자보다 저렴하며 수정 및 재가공이 가능합니다.
또한 멀티미디어 기능이 있어 표현이 다양하고 광고효과가
뛰어난장점을지니고있습니다.
를 www.EmbeddedWorld.co.kr에서 이용하시려면
Adobe Acrobat eBook Reader를설치해야합니다.
(eBook Service 참조)
언제, 어디서나빠르고손쉽게
를만나자!