웹기반의 환경에서 소프트웨어 공학 기술도 함께 진화하고 있다.
소프트웨어 공학의 하나인 역공학과 자바 웹 프로그래밍 기술을 사용하여 C코드분석도구를 구현한다.
이 프로젝트는 국제 IBM리눅스공모전에 입상하였으며, 공모전을 준비하는 독자들께도 좋은
가이드라인을 제공할수있을 것이다. 이번호에서는 소프트웨어 공학과 역 공학에 대한 내용을
먼저 알아보고, 프로젝트의 목표인 WEBDOC_C가 무엇인지 알아보자. (발문)
박종민 울산대학교 정보통신원 정보기획팀 bicman3@chollian.net
필자는 울산대학교 정보통신원 정보기획팀에 근무중이며 2001년 대한민국 소프트웨어 공모대전 리눅스 부문 동상 수상 및 2001 International IBM Linux Scholar Challenge에서 한국에서는 유일하게 수상하였다. 필자는 리눅스 커널 및 POSIX 기반의 시스템 프로그래밍에 관심이 많다. (필자소개)
--------------------------------------------------
연재순서
1회 2002. 3 : 소프트웨어 공학과 역공학 소개
2회 : WEBDOC_C 분석기 설계 및 구현
3회 : WEBDOC_C 생성기 설계 및 구현
연재 가이드 라인
운영체제 : Redhat Linux 6.0 이상
개발도구 : jdk 1.2.1, gcc 2.96 이상권장
기초지식 : C에 대한 기초개념, java에 대한 기초 개념
응용분야 : 다른 프로그램 언어 분석능력 향상
-----------------------------------------------
소프트웨어 공학이라는 용어는 1960년대 후반에 제시된 "소프트웨어 위기" (Software Crisis) 라는 것을 토론하기 위해서 열린 국제회의에서 처음 제안된다. 기존에 시스템보다 몇 십배 빠른 성능을 가진 시스템 설계들이 제안되었지만, 당시의 기술로는 실현되기 어려운데다 시스템들을 구현하는 필요충분조건도 갖추어지지 못한 상태였다. 기존의 작은 시스템들은 확장성에 한계가 있었다. 새롭게 시스템을 재구축 하는데는 적게는 몇 개월부터 심지어 2-3년까지도 걸렸다. 원래 예측했던 것보다 더 많은 비용이 소요되고, 유지보수하기가 더욱 더 까다로와졌다.
이것이 바로 “소프트웨어 위기”이다. 하드웨어 비용은 점점 더 내려가지만 오히려 소프트웨어 비용은 점점 더 비싸졌다. 이러한 위기를 타개하고자 등장한 개념이 바로 소프트웨어 엔지니어링이다.
일반적인 소프트웨어 공학의 개념
소프트웨어 공학이란 대규모의 소프트웨어 시스템을 설계하고, 만들고, 유지 관리하는 것을 통칭한다.
<그림 1> 잘 만들어진 소프트웨어의 필수 특성
잘 만들어진 소프트웨어는 <그림 1> 과 같은 속성이 잘 드러난 것을 볼 수 있다.
소프트웨어 공학에서는 소프트웨어에 대한 비용이 시스템 개발비용의 대부분을 차지하고, 소프트웨어 개발에 드는 비용보다 이를 유지 보수하는 비용이 훨씬 많이 차지한다고 설명한다. 실제 프로젝트 상황에서도 이러한 경우가 많이 발생한다. 따라서 소프트웨어 공학에서는 항상 비용 효율적(cost-effective)인 면을 추구하게 되었다.
시너지 효과를 내기 위해서는 모든 구성요소들이 공동상승작용을 해야 옳겠지만, 서로 상호 배타적인 관계가 있기 때문에 최적화는 아주 어려운 문제이다. 훌륭한 사용자 인터페이스를 제공하면 오히려 시스템의 효율이 떨어지기도 한다. 서로의 특성이 너무 강해서 오히려 비용만 증가시키고, 효율은 깎아 내리는 실패의 소지가 있다. 이러한 예제로 <그림2>와 같은 효율성과 비용과의 관계가 기하 급수적임을 보여주는 그래프로 만들 수 있다.
<그림 2> 비용과 효율성 관계
항공운항시스템이나 은행업무처리 같은 시스템들은 무엇보다 효율성을 최고로 고려해야 한다. 사용하는 하드웨어의 무게와 크기는 제한된 컴퓨터에서 상대적으로 적은 메모리와 디스크를 사용하면서도 최대한 좋은 효율을 유지하는 것이 시스템의 최종목표인 것이다. 단지 높은 효율을 위해서 다른 특성들을 희생시키면서까지 최적화에 주력하게된다.
소프트웨어 프로세스
소프트웨어 프로세스는 소프트웨어 제품을 생산하기 위한 행위들과 이들의 결과물들을 통칭한다. 소프트웨어 설계나 분석부터 코딩 및 유지보수하기 위한 행위까지 여기에 포함된다. 소프트웨어 프로세스는 일반적으로 소프트웨어 분석, 소프트웨어 설계, 소프트웨어 개발, 소프트웨어 검증 및 소프트웨어 진화라는 항목이 있다고 정의하였다. 프로세스 성숙도의 중요성 때문에 SEI(Software Engineering Institute)에서는 조직의 다양한 성숙도 단계를 평가할 수 있는 좀 더 이해하기 쉬운 5단계의 평가모델을 제시한다.
◆ 1단계 (초기단계) : 소프트웨어 프로세스가 아직 제대로 정의되지 않아서 혼란스러운 단계이다. 프로젝트의 성공은 개인적 능력에 달려 있는 단계이다.
◆ 2단계 (반복가능 단계) : 가능성을 지닌 기초적인 프로젝트관리 프로세스가 확립되어 있는 단계이다. 필요한 프로세스의 훈련은 이전에 비슷한 어플리케이션을 만든 선임자로부터 계승되어 반복된다.
◆ 3단계 (정의단계) : 소프트웨어 프로세스가 문서화되고, 규격화되어 조직의 소프트웨어 프로세스에 통합되어 있는 단계이다. 모든 제품들은 소프트웨어의 개발과 유지보수에 문서화되고 공인된 조직의 프로세스를 사용한다. 앞단계의 모든 사항을 포함한다.
◆ 4단계 (관리단계) : 소프트웨어 프로세스의 평가와 제품의 품질의 세부 사항들이 평가된다. 소프트웨어 프로세스와 제품이 정량적으로 이해되고 세부적인 평가로 이어진다. 3단계의 모든 사항을 포함한다.
◆ 5단계 (최적화단계) : 프로세스와 혁신적인 생각들, 기술로부터 정기적인 피드백을 통하여 지속적으로 프로세스 향상이 이루어지는 단계이다. 4단계의 모든 사항을 포함한다.
<박스기사-1 시작>
대표적인 소프트웨어 공모전 소개 및 가이드라인
1. 대한민국 소프트웨어 공모대전
대학생과 대학원생을 대상으로 하는 대표적인 공모전이라고 하면 아무래도 정보통신부와 한국 소프트웨어진흥원이 주최하고 한국정보처리전문가협회와 동아일보사가 주관하는 대한민국 소프트웨어 공모대전이 유명하다. 이 공모전은 2001년도로써 5번째 행사를 치루었다. 2001년도부터는 자바 소프트웨어 공모전과 리눅스 소프트웨어 공모전을 통합하며 대통령상과 국무총리상 및 정보통신부 장관상등을 선정한다. 2000년도 대통령상은 삼성SDS의 Wise View 4.0이 수상하였으며 국무총리상은 드림인텍의 TopSpeeder과 미지리서치의 리누엣 (Linu@)이 차지했다.
학생부에서는 영남대학교 정문규씨의 심틀외 3작품이 정보통신부 장관상을 수상하였으며, 필자는 동아일보 사장상을 수상하였다. 수상작들은 2001년 11월 30일부터 COEX에서 열린 2001 소프트엑스포 전시관에서 전시되었다.
고등부의 경우 대학특례입학의 혜택이 주어지며, 대학생들에게는 취업추천의 기회가, 참여기업들에게는 자금지원이나 벤처타운 입주 시 우선권 부여 등의 혜택이 주어진다. 대한민국 소프트웨어 공모대전의 심사기준은 다른 제품과의 차별성과 그 제품만이 가지는 독창성을 우선으로 한다. 따라서 공모전에 작품을 접수시키기 전에 자신이 개발하고 있는 제품과 유사한 제품이 있는지 알아보는 것이 필요하다. 대한민국 소프트웨어 공모대전의 사이트는 다음과 같다 (http://www.ipak.or.kr/78/default.asp?PageID=78&GroupID=78&CompanyID=78)
2. 시, 도 자치단체 주관의 공모전
여러 시, 도 자치단체에서도 소프트웨어나 멀티미디어 공모전을 개최한다. 필자가 참여했던 공모전으로는 성남시청의 전국 멀티미디어 소프트웨어 공모전과 진주시청의 전국 컴퓨터아트 공모전이 있다. 성남시청의 멀티미디어 공모전은 일반부와 학생부로 나뉘어 멀티미디어 관련 소프트웨어에 대한 심사를 수행한다. 수상작에게는 대상 상금 100만원과 은상 50만원 동상 30만원의 상금이 주어진다. 진주시청의 컴퓨터아트 공모전은 성남시청의 멀티미디어 공모전과는 약간 성격이 틀리다. 성남시청의 공모전이 소프트웨어 기술적인 면으로 치중한다고 생각하면, 진주시청의 공모전은 디자인이나 예술적인 면에서 점수를 높이 평가한다. 진주시청의 공모전 수상자도 대상 상금 200만원 및 금상, 은상, 동상에게 상금이 돌아가며 장려상에게는 상장 및 부상이 주어진다. 제1회 광주 비엔날레 행사때에도 S/W 공모전이 열렸다.
3. 대학주관의 공모전
대학주관의 공모전은 주로 고등학생을 대상으로 하는 경향이 짙다. 성균관대, 경성대, 건국대등은 특례입학자격을 주기도 했다. 대학생을 대상으로 하는 공모전으로는 경남대학교 주최의 한마 소프트웨어 공모전을 들수 있겠다. 2001년도에는 4회째 대회를 맞이하여 전국의 대학생으로 참가대상을 확대했다. 수상자에게는 상장과 부상이 지급되었다. 영남대학교의 전국대학생공학분야공모전. 창원대학교의 봉림 소프트웨어 공모전등이 있다.
4. 기업주관의 공모전
기업주관의 공모전은 하이닉스반도체 (구 현대전자)에서 주최하였던 SW 공모전이 있었으며, 삼성 SDS에서 주최하는 명인전, 삼성전기에서 주최하는 공학분야 공모전이 있었다. 필자가 속한 타이거팀은 몇 년간 계속해서 참가하여 좋은 성적을 거두고 있다. (주) 한게임의 게임공모전이 진행중이며, 작년에는 한국 IBM에서 리눅스 웹 애플리케이션 공모전을 주최하기도 했다. IBM의 공모전의 색깔은 리눅스 상에서 IBM의 제품인 웹스피어 서버 플랫폼과 DB2 데이터베이스, 자바개발툴인 Visual age for Java 등을 사용하여 응용 어플리케이션을 제작하는 것을 목적으로 한다. 지난 대회에서는 전북대학교 전자정보공학부 ꡐ업그레이드ꡑ 동아리가 제출한 <잘나가는 학사관리>가 은상에, 인제대학교 의용공학과 ꡐ네트워크팀ꡑ 동아리가 제출한 <마이크로브(미생물백과사전)>가 동상으로 각각 선정되었다. 그 외에도 한국통신 주관의 인터넷 콘텐츠 공모전과 조선일보 주최의 인터넷 홈페이지 공모전등이 있다.
5. 여성전용 공모전
아쉽게도 필자는 참여하지 못하는 공모전이 있다. 동아닷컴이 주최하는 여성 멀티미디어 소프트웨어 공모전은 작년에 21세기 3F : Female(여성) Feeling(감정) Fiction(상상력) 시대를 맞이하여 여성인력의 정보 활용능력 향상 및 저변 확대와 우수한 여성 정보 인력을 발굴, 육성하고자 하는데 그 목적이 있다.
대상수상자에게는 대통령상과 함께 700만원 상당의 상금이 수여되고, 교육인적부 장관상과 여성부 장관상, 문화관광부 장관상, 정보통신부 장관상등이 수여된다. 수상작 선정은 디자인과 독창성을 중요시 한다. 40대주부의 “불혹의 도전”등이 좋은 평가를 받았다. 여성독자들은 필히 도전해 보기를 바란다.
</박스끝>
<박스기사-2 시작>
IBM International Linux Scholar Challenge 소개
IBM 본사가 리눅스 산업 육성을 위한 특별 공모전을 개최하였다. Linux Scholar Challengeꡑ콘테스트는 전 세계 대학생들을 대상으로 리눅스 OS 기반의 시스템을 설계, 오픈 소스 커뮤니티 활동에 친숙해지는 기회를 제공한다는 취지이다. IBM은 리눅스 환경의 애플리케이션과 툴 개발 및 유용성을 높이는 리눅스 프로세스를 포함하여 프로젝트의 목표와 방법론, 연구 활동 및 결과를 온라인을 통해 제출 받았다. 제출된 계획서는 IBM의 전문 기술진으로 구성된 심사위원단들이 검토하였다. 수상 선정 기준은 프로젝트의 독창성을 비롯하여 완벽성, 명확성 그리고 성취도 등이다. IBM은 25명의 수상자 전원에게 리눅스가 탑재된 자사의 노트북 컴퓨터를 제공하고, 특히 수상자 중 자격 요건에 부합하는 3명에겐 IBM 기술센터(IBM Technology Center)에서 진행하는 2002년 하계 인턴쉽 참여 기회도 제공한다. 또 최소 10명 이상의 학생이 참가한 대학 중 최고 평점을 받는 대학에게는 리눅스를 실행할 수 있는 16 노드 리눅스 클러스터 혹은 엔트리 레벨의 IBM eServer, zSeries 리눅스 서버 가운데 원하는 제품을 부상으로 제공한다. 참가 대상은 정부의 인가를 받은 2년제 또는 4년제 대학생이고, 11월 30일까지 심사를 마친 후 1월 4일(미국 현지 시각 기준)에 입상자를 발표하였다. 입상자를 보면 미국이 6명으로 가장 많고, 독일과 인도가 각 3명, 영국과 중국이 각각 2명의 수상자를 내었고, 뉴질랜드, 불가리아, 포르투칼, 이탈리아, 핀랜드, 호주, 대한민국은 각 1명의 수상자를 배출하였다.
</박스끝>
<박스기사-3 시작>
IBM Linux Scholar Challenge를 준비 과정
필자는 WEBDOC_C를 울산대학교에서 연구과제로 시작하였다. 필자의 담당교수님과 함께 논문을 써가면서 구현을 하였고, 지난 2001년 6월에 KORUS(IEEE, 2001. 6)에서 발표하였다. 필자가 나름대로 공모전 당선요인을 분석해보니 역공학이란 주제 선정에 점수를 주고싶다. 웹 공학 및 역 공학을 이용한 도구는 리눅스에서 구현한 사례는 많지 않았고, 무한한 잠재 가능성이 보이는 분야이다. 물론 외국에서 하는 공모전이라 영어 표현력이 중요하겠지만,
주최자인 IBM에서 요구하는 양식을 준수해야하며, 심사항목에 대한 대비를 위해 독창적인 프로젝트 선정부터 프로젝트의 명확성과 성취도를 높이는데 주안점을 두고 작성하였다. 비록 우리나라에서는 아쉽게도 한 작품밖에 선정되지 않았지만 대한민국의 리눅스업계를 지탱해오고 있는 리눅서들의 땀과 열정이 이루어 낸 결과이다. 대한민국의 리눅스 프로그래밍 실력은 세계 1위라고 항상 자부심을 갖고 있다. 이 글을 읽는 독자들도 열심히 준비하여 내년도에는 대한민국 리눅서의 이름을 드높이는 결과를 일구어내도록 하자.
</박스끝>
소프트웨어 공학 기법의 종류
기존의 소프트웨어 공학기법은 앞에서도 설명했듯이 요구사항 분석, 설계, 구현, 검증 및 유지보수의 4단계 프로세스로 대표되는 기법이었다. 그러나 시간이 지남에 따라 여러 가지 다양한 방법들이 제시되었다. 여기서는 기존의 소프트웨어 공학기법을 소개함으로써 우리가 만들어 볼 WEBDOC_C에 쓰인 역공학과의 장단점을 비교해 보자.
객체지향 소프트웨어 공학
소프트웨어 개발에 대한 객체지향 접근법은 1960년대 말에 처음 제시되었다. 그러나 폭넓게 사용되는 데는 거의 20년 이상이 걸렸다. 1990년대에 들어와서야 개발자들과 공학 전문가들이 선택하는 주요 패러다임이 되었는데, 객체지향기술은 재사용성을 제공하여 소프트웨어 개발 속도를 높이고 고품질의 프로그램들을 만들 수 있게 한다. 분리된 구조 역시 확장하기가 쉽다.
컴포넌트 기반 소프트웨어 공학
오늘날은, 복잡하고 고품질의 소프트웨어를 매우 짧은 시간에 구축되어야 하는 경우가 많이 발생한다. 이에 따라 재사용이 용이한 컴포넌트 기반 소프트웨어 공학이 나오게 되었다. 컴포넌트 기반 소프트웨어 공학은 컴포넌트를 이용하여 시스템들의 설계와 구축을 하는 소프트웨어 공학기법이다. 여러분들이 잘 아시는 COM이나 CORBA등이 그러하며, 비주얼베이직의 OCX나 델파이의 VCL같은 부분집합 개념들도 친숙하게 접할수 있다.
웹 공학
메인프레임의 더미터미널부터 클라이언트-서버개념을 지나, 개인간의 Peer-To-peer 방식이나 PDA나 웹브라우저를 기본 브라우저로 통합시킨 웹 프로그래밍조차 첨단 유행이 될 수 없다. 이제는 XML 같은 표준을 이용한 정보교환이 이루어지는 Software-To-Software 방식 (이하 S2S)으로 가는 추세라고 말할 수 있다.
기본브라우저로 통합되는 웹 프로그램들은 기존의 소프트웨어들과는 사뭇 다르다. 네트워크에 크게 의존하며, 시간과 장소, 디바이스를 따지지 않는다. 무엇보다 컨텐츠를 가장 중요시 여긴다. 텍스트, 그래픽, 비디오 컨텐츠들은 끊임없이 통합되고 진화한다. 웹 공학도 갑자기 튀어나온 새로운 개념은 아니다. 기존 컴포넌트기반 공학과 보안, 인터넷 표준들이 서로 능수능란하게 조합되어 근간을 이루는 것이다.
역 공학
소프트웨어 역 공학 (Reverse Engineering)은 소프트웨어 재사용공학 (Software RE-Engineering)의 한 분야이다.
소프트웨어 유지보수는 소프트웨어 공학에서 매우 큰 비중을 차지하고 있다. 소프트웨어 유지보수 비용은 전체 시스템 개발비용에 쓰이는 모든 노력의 60% 이상을 차지하고 있고, 이 비용은 계속 증가하기 마련이다.
소프트웨어 위기가 도래하기 이전에 개발된 대형 레거시 시스템 (legacy system)들은 구조화가 되어있지 않고, 관련 문서들은 시스템에 맞지 않거나, 심지어는 존재하지 않는 경우도 많았다. 시스템을 개발할 당시 개발자들은 이미 오래전에 회사를 떠났고, 유지보수를 담당할 인력조차 거의 존재하지 않게 되었다. 그렇다고 돌아가는 시스템을 즉석에서 폐기처분할 수는 없었다. (주: 20년이 지났지만 아직도 공장라인에서 쌩쌩 돌아가는 몇몇 하드웨어 시스템들은 옥션경매코너에서도 흔히 발견된다. )
회사에서는 유지를 원하고, 새로운 업무로의 적응이 중요하였지만 시스템은 자료를 구성하는 여러 개의 다른 프로그램으로 구성되어 있기 때문에 유지보수의 문제는 상당히 복잡하다고 할수 있다. 이런 배경아래 역 공학이 등장한다. 역 공학은 소프트웨어의 설계와 분석정보를 찾는 목적을 가지고 소프트웨어를 분석하는 과정이다. 소프트웨어 소스코드가 대개 역공학 과정의 입력으로서 이용 가능하다. 그러나 소스코드마저 없으면 역 공학 과정에서는 실행코드부터 시작해야만 하는 경우도 발생한다. 즉 디스어셈블이나 디컴파일하는 경우가 그러하다. <그림 3>에서는 역 공학 프로세스에 대한 것을 그림으로 표현하였다.
<그림 3> 역 공학 프로세스
역 공학 프로세스를 돕기 위하여 다양한 도구들이 제공되는데 우리가 이번에 알아볼 WEBDOC_C도 이러한 도구중의 하나라고 보면 된다.
WEBDOC_C 소개
이번에 소개할 WEBDOC_C는 앞에서 설명한 역공학과 웹 공학기법을 이용하여 C 소스코드를 분석하는 도구이다. 웹에서 사용자들로부터 C 소스파일이나 헤더파일을 입력받고, 분석기가 이것들을 분석하여 데이터베이스에 저장하고, 사용자가 원하면 생성기가 데이터베이스로부터 자료를 받아와서 애플릿 형태로 보여준다.
WEBDOC_C를 설계하고 구현하기 위하여 다음과 같은 시스템이 필요하다.
◆ IBM 호환 PC (펜티엄, 150MHz 이상 추천)
◆ Redhat Linux 6.0 이상
◆ RAM : 32Mbyte 이상
◆ 하드 디스크 공간 : 30Mbyte 이상
◆ Apache Web Server 1.3.9 이상
◆ Mysql
◆ JDK 1.2
◆ Jakarta-tomcat 3.0
WEBDOC_C 시스템 설계에서 웹을 담당하는 부분은 PHP와 자바 애플릿 및 서블릿을 사용하였지만, PHP를 빼고 자바 서블릿으로만 구현 가능하다.
<그림 4>에 보면 전체적인 흐름이 소개되어 있다.
<그림 4> WEBDOC_C의 전체적인 흐름도
UML을 이용한 설계
필자는 WEBDOC_C를 설계할 때 UML을 사용하였다. 소프트웨어를 설계하는 도구들 중에서 UML (Unified Modeling Language)은 객체지향 분석과 설계를 위한 대표적인 모델링 언어이다. 객체기술에 관한 국제 표준화 기구인 OMG (Object Management Group)에서는 이미 UML을 국제 표준으로 인정하였다.
UML의 목적은 객체지향 시스템을 가시화, 명세화, 문서화하는 것이다. UML은 표기하려는 대상을 다이어그램(Diagram)을 사용하여 나타낸다. 필자는 UML의 여러 가지 다이어그램 중에서 유즈-케이스(Use-Case) 다이어그램과 순차 (Sequence) 다이어그램을 사용하여 전체적인 시스템 구조를 설계하였다. 유즈-케이스 다이어그램은 요구분석의 첫 단계에서 주로 사용자의 요구를 기술하는데 사용된다. 유즈-케이스 다이어그램은 시스템의 정적인 구조를 보여준다.
<그림 5> WEBDOC_C 시스템에 대한 유즈-케이스 다이어그램
<그림5>는 사용자가 할 수 있는 작업을 보여준다. 사용자가 프로젝트와 파일을 업로드 하면 분석기는 자동으로 그것을 분석하여 데이터베이스에 저장하며, 생성기에 의해 만들어진 결과는 사용자의 요구, 즉 함수호출관계 보기나 전역변수 호출관계 보기 및 소스코드 보기에 의해 구조도 (Structure Chart)나 소스코드 형태로 가공하여 보여준다는 것을 설명하고 있다.
<그림 6> WEBDOC_C 시스템에 대한 순차 다이어그램
<그림6>는 순차 다이어그램을 나타내주고 있다. 순차 다이어그램은 프로그램의 동적인 부분을 보여준다. 즉, 객체와 객체그룹사이, 객체와 객체사이, 객체그룹과 객체그룹 사이의 동적인 행위를 기술하게 된다. 특히 순차는 종 좌표축으로 시간개념을 도입하고 횡 좌표축으로 객체들을 나열하여 그 사이의 상호작용을 표시한다.
사용자가 로그인하여 시스템에 성공적으로 접근하면 프로젝트 유무에 따라서 새 프로젝트를 업로드 할 것인지, 아니면 기존의 프로젝트를 사용할 것인지 결정하고, 필요한 파일을 업로드 하게 된다. 업로드가 성공하면 분석기는 자동적으로 C 소스코드를 분석하여 결과를 데이터베이스에 저장하고, 생성기는 사용자가 원하면 사용자에게 구조도 형식으로 보여주게 된다.
분석기 소개
앞에서 살펴보았듯이 WEBDOC_C는 생성기와 분석기 두부분으로 나누어져 있다. 분석기는 사용자의 웹 브라우져로부터 C 소스코드나 혹은 헤더파일을 업로드 받는다. 일단 이것을 사용자 디렉토리에 저장한다. 사용자가 처음에 WEBDOC_C 시스템에 접근할 때에는 회원가입을 하기 바란다. 사용자 디렉토리 및 사용자 정보를 토대로 데이터베이스를 초기화 해줘야 하기 때문에 필요하다. 사용자 디렉토리에 있는 C 소스파일을 분석기는 5개의 실행파일로 분석해서 데이터베이스의 각각의 테이블에 넣어준다.
생성기 소개
생성기는 자바 애플릿과 서블릿을 사용하여 사용자들에게 함수 호출관계 구조도 및 전역변수 호출관계 구조도를 보여주거나, 소스코드를 보여준다. 서블릿을 쓰는 이유는 데이터베이스 접근 문제 때문이다. 이것은 자바 애플릿의 보안모델이 “SandBox" 모델이기 때문인데, 애플릿은 잘 실행되지만, 클라이언트로의 자원접근은 강력하게 차단되어 있다. 자바 애플릿에서 직접 데이터베이스로 접근하는 것은 어렵기 때문에, 자바 서블릿을 사용하여 데이터베이스로 접근하고, 원하는 정보를 추출한다. 그 다음에 자바 서블릿과 애플릿간의 HTTP 기반의 통신을 사용하여 4개의 자바 서블릿 클래스가 1개의 자바 애플릿 클래스로 정보를 전달하면, 자바 애플릿 클래스에서는 해시테이블과 3개의 구조체를 사용하여 정보를 가공하여 구조도나 소스코드 형태로 사용자의 웹 브라우져로 보여주게된다.
마치면서
지금까지 간단하게 소프트웨어 공학과 소프트웨어 공학을 이용한 WEBDOC_C에 대하여 알아보았다. 소프트웨어 공학은 “소프트웨어 위기”를 해결하고자 제시되었지만, 모든 소프트웨어 제작과정에서 널리 쓰이고 있다. 다음호에서는 역공학과 웹 공학을 사용하여 WEBDOC_C를 설계하고 구현하는 일과 리눅스에서 사용된 도구인 cflow와 cxref에 대해서 알아볼 것이다.
참고자료
(1)Software Engineering (Ian Sommerville저 우치수,김갑수,이명재 공역, 홍릉과학출판사, 2000)
(2)소프트웨어 공학:실무적 접근 (Roger S.Pressman저 우치수,강병욱,강병도,이명재 공역, McGraw-Hill Korea 2001)
(3)UML in a nutshell (Sinan Si Albir저, O'Reilly, 1998)
(4)Maintenance Burden Beginningfor a Remedy (Manna M 저, Datamation, 1993)
(5)리눅스 한글화 문서 프로젝트 사이트 (http://kdlp.org)
(6)IBM 개발자 사이트 (http://www-903.ibm.com/developerworks/kr/index.html)