일반 View는 논리적인 테이블이고,
Materialized View( 일명 MView) 는 물리적으로 존재하는 테이블이다.
물리적으로 존재한다는 것은 Data가 일정 공간을 차지하고 있다는 것이다.

View의 결과를 디스크에 저장해서 Query 속도를 향상시키는 개념으로
집계/분석 데이터 산출과 같이 비용이 많이 들거나 빈번히 사용되는 쿼리에 적용한다.

MView를 생성하고 테스트 하기 위해서는,  sysdba에서 Query Rewrite권한과  
CREATE MATERIALIZED VIEW 권한을 MView를 생성하는 유저에게 부여해야 한다.


CREATE MATERIALIZED VIEW dept_sal
     -- PCTFREE 0 TABLESPACE mviews
     -- STORAGE (initial 16k next 16k pctincrease 0)
     BUILD IMMEDIATE -- BUILD IMMEDIATE, BUILD DEFERRED 선택.
     REFRESH
     COMPLETE       -- FORCE, COMPLETE, FAST, NEVER 선택.
     ON DEMAND      -- ON DEMAND, ON COMMIT 선택.
     -- ENABLE QUERY REWRITE
     AS
     SELECT SUM(a.sal), a.deptno
     FROM emp a, dept b
     WHERE a.deptno = b.deptno
     GROUP BY a.deptno
;

스냅샷(snapshot)이라 불리기도 하는 Materialized view(MV)는 오라클에서 오래 전부터 구현해 온 기능의 하나입니다. MV는 쿼리 결과를 별도 세그먼트에 저장하고, 쿼리가 재실행되는 경우 사용자에게 미리 저장된 결과를 전달함으로써 쿼리를 여러 차례 재실행하는 데 따르는 성능적인 부담을 줄여줍니다. MV는 데이타 웨어하우스 환경에서 특히 유용합니다. 또 “fast refresh” 메커니즘을 이용해 MV를 전체적으로 또는 부분적으로 refresh할 수 있습니다.

> 개념,특징
http://apollo89.com/blog/tag/Materialized%20View
> 생성방법 및 권한부여
http://apmtip.com/board/zboard.php?id=mysql&no=76
>MATERIALIZED VIEW 활용방법
http://kr.forums.oracle.com/forums/thread.jspa?threadID=453711
> Oracle Technical Note
http://www.ihelpers.co.kr/programming/reference/01spring_materialized_view.pdf
>10g에서 materialized view의 관리
http://www.oracle.com/technology/global/kr/pub/articles/10gdba/week12_10gdba.html

Posted by ukmie
,

rdf:ID vs rdf:about

software 2008. 9. 5. 14:35
rdf:ID 와 rdf:about  뭐가 다른걸까.

The rdf:ID attribute on a node element (not property element, that has another meaning) can be used instead of rdf:about and gives a relative RDF URI reference equivalent to # concatenated with the rdf:ID attribute value. So for example if rdf:ID="name", that would be equivalent to rdf:about="#name". rdf:ID provides an additional check since the same name can only appear once in the scope of an xml:base value (or document, if none is given), so is useful for defining a set of distinct, related terms relative to the same RDF URI reference.
( http://www.w3.org/TR/rdf-syntax-grammar/#section-Syntax-ID-xml-base )

똑같은건데 rdf:ID 는 문서내에서 유일해야 한다는 얘기같군. 그리고,
not property element, that has another meaning <- 이건 Reification 에서 쓰일때 이야기인듯
http://www.w3.org/TR/rdf-syntax-grammar/#section-Syntax-reifying

As for choosing between rdf:ID and rdf:about, you will most likely want to use the former if you are describing a resource that doesn't really have a meaningful location outside the RDF file that describes it. Perhaps it is a local or convenience record, or even a proxy for an abstraction or real-world object (although I recommend you take great care describing such things in RDF as it leads to all sorts of metaphysical confusion; I have a practice of only using RDF to describe records that are meaningful to a computer).rdf:about is usually the way to go when you are referring to a resource with a globally well-known identifier or location.



참고)
Use rdf:about and rdf:ID effectively in RDF/XML
https://mailman.stanford.edu/pipermail/protege-owl/2007-March/001676.html


Posted by ukmie
,
Jena 파서 실행시
WARN  RDFDefaultErrorHandler.java .....
이런 메세지가 성가시게 느껴진다면,

...
RDFDefaultErrorHandler.silent = true;
...

를 실행전에 삽입해준다.

com.hp.hpl.jena.rdf.model.impl.RDFDefaultErrorHandler 안의 주석에도 바꾸라고 되어있다.
...
 /**
  * Change this global to make all RDFDefaultErrorHandler's silent!
 * Intended for testing purposes only.
 */

 public static boolean silent = false;
...



Posted by ukmie
,
다국어 지원을 위해 UTF-8를 주로 쓰는 편임

Mysql JDBC를 이용해 insert를 하는 경우 데이터베이스가 utf8임에도 깨져 들어가는 경우.

JDBC Connection URL에 useUnicode, characterEncoding파라미터를 붙여줌.

예) jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8


Posted by ukmie
,
뭐 이런것도 팁이냐 하겠지만, 의외로 자꾸 까먹게 되더라. 음음

**

for(int i = 0, n = list.size(); i < n; i++){

//일하기

}

n을 for문 앞에서 선언하는 방법도 있지만, for block 밖에서 n이 필요한 경우가 아니라면 n이 for의 초기화 부분에 선언되고 할당되는 것이 좋습니다. 변수의 유효범위가 최소화되기 때문이죠.

**

for (Iterator i = c.iterator() ; i.hasNext(); ) {

 doSomething(i.next());

}

작은 차이지만 Iterator i는 for block을 벗어나는 순간  잊어버려도 되는 것이니 block 밖에서 개발자의 머리는 조금이나마 가벼워 질 수 있습니다. 이것은 캡슐화의 원칙인 class의 맴버 중 밖에서 볼 필요 없는 것들은 private으로 선언해야 하는 이유와 일맥상통합니다.

**

for/in 선언문은 collection 류의 객체들과 배열에 대해서
편리하게 순환문(반복문)을 돌릴 수 있게 해준다.


형식은 다음과 같다.

for(Object obj: collection) {

    ...

}


단, 컬렉션은 제네릭을 사용하여 어떤 객체를 담는 컬렉션인지 명시해야한다.


ArrayList<Movie> movieList = (ArrayList<Movie>)getMovieList();


for(Movie movie: movieList) {

System.out.println("Movie Name is : " + movie.getName() );

}


이런 식으로 말이다.

>>
http://benelog.egloos.com/1382604
http://greenwebber.tistory.com/69
Posted by ukmie
,

백설공주와 신경망

software 2008. 7. 11. 17:58
thanksTo:http://www.aistudy.co.kr/neural/history_lee.htm

신경망의 역사는 순조롭지 않아 한 편의 드라마를 연상시킨다. 지능형 기계의 상업화를 주도해 온 쿠르즈웨일 (Kurzweil) 이 쓴 《The Age of Intelligent Machines》(1990) 에서 인용한 한 토막의 이야기를 소개하기로 하자.

"옛날 옛적에 인지과학에게 2 명의 딸이 태어났다. 한 딸은 두뇌의 연구로부터 얻은 특징을 갖는 자연스러운 '자연' 이고, 다른 딸은 처음부터 컴퓨터의 사용과 관련된 '인공' 이었다. 두 자매는 인지의 모델을 구성하려고 노력하였으나, 각기 사용한 재료는 아주 달랐다. '자연' 은 신경세포로부터 수학적으로 정리된 (신경망으로 불리는) 모델을 구성한 반면, '인공' 은 컴퓨터 프로그램으로부터 그녀의 모델을 구성하였다.

그들의 유년기에 두 자매는 모두 성공적이었고, 다른 지식분야로부터 구혼자들이 따라 다녔다. 두 자매는 사이가 좋았었다. 그러나 1960년대 초반 과학왕국에서 일찍이 보지 못한 많은 보화를 가진 DARPA (Defence Advanced Research Projects Agency) 경이 군주로 나타나면서 두 자매의 사이는 변했다. '인공' 은 질투가 나서 DARPA 경의 연구비를 혼자 독차지하려고 굳게 결심하였다. 그러기 위해서는 '자연' 은 죽어야 했다.

'인공' 의 충실한 추종자 마빈 민스키 (Marvin Minsky) 와 시모르 페퍼트 (Seymour Papert) 두 사람이 백설공주를 살해하고 그 증명으로 그녀의 심장을 가져오는 사냥꾼의 역할을 맡아 피비린내 나는 일을 시도하였다. 그들의 무기는 단검이 아니라 보다 막강한 펜이었고, 이로부터 한 권의 책이 씌어졌다. Perceptrons 라는 이름의 이 책은, 신경망은 지성을 모델화하고자 하는 약속을 지킬 수 없고, 오직 컴퓨터 프로그램만이 이를 달성할 수 있다는 것을 증명하고자 하였다. '인공' 의 승리가 확실한 것 같았다. 실제로 다음 10년간 왕국의 모든 포상은 '인공' 의 자손에게 돌아갔는데, 그 중에서도 전문가시스템 (Expert System) 가문의 행운과 명성이 제일 높았다."  "그러나 백설공주는 죽지 않았다. Minsky 와 Papert 가 세상에 증거로 제시한 것은 공주의 심장이 아니라 돼지의 심장이었다."

이 글에서 '자연' 과 백설공주는 동일인이고 신경망 연구분야를 의미하며, '인공' 은 AI 연구분야를 의미한다. DARPA 는 미국에서 많은 기초 및 응용과학연구를 지원하는 영향력 높은 기관이다. 그러면 이 이야기는 신경망 연구자가 만든 것인가? 아니다. 바로 2 명의 사냥꾼 중의 하나인 Papert의 이야기이다. 다만 시기가 1960년대가 아닌 1988년일 뿐이다.

Posted by ukmie
,
시맨틱웹을 편리하게 적용해볼 수 있는 기반을 제공해볼 수 있는 시스템이란 생각이 든다. 탐구해 볼만한 가치가 있을듯 하다. JSPWIki 위에서 GVPOET 라는 구글가젯을 통해 RDF 데이터를 볼 수 있도록 되어있다.

Fortunata
This work focuses on two aspects. The first one is how to simplify the process of semantic contents creation. The second one is how human users can easily obtain some benefit from these semantic contents. In either aspect we consider that users have null or minimal knowledge about Semantic Web technologies. To leverage the former we take advantage of wikis, one of the most successful approaches in the last years. On top of JSPWiki infrastructure we have built a semantic layer, called Fortunata, to create Semantic Web applications. To deal with the latter, we have designed a collaborative Fortunata-based tool to create visualization templates for ontology elements (namely VPOET). These templates are published as semantic data, so that they can be used by HCI agents ("semantic agents"). Also, a HTTP GET/POST channel has been created. Human users can use this channel to get access to the semantic templates or query about “the most appropriated” visualization for a given user profile. This user profile contains data about the interactive impairments of the user, its interaction device, or its aesthetical preferences.

VPOET
This Gadget let you render Semantic Web data. You can display your FOAF profile, your DOAP projects, etc. You just have to indicate the designID, the design provider, and the data source.


http://ishtar.ii.uam.es/fortunata/

Fortunata infrastructure
                             Fortunata infrastructure

Fortunata participants

Yes... There are many participants. We have followed the "divide and conquer" method so, different roles are involved.

By the way, the role played by "Alice" can be played by a novice (a.k.a newbie)using Fotunata-VPOET Google Gadget







Posted by ukmie
,

간단정리
http://www.sdnkorea.com/blog/367
예제
http://java2go.net/blog/tag/Regular%20Expression
문법
http://iamnotokay.tistory.com/85

자바스크립트 예제 - http://powerjava.net/blog/clevekim/205

1. 숫자이외의 문자가 있는지
/^[0-9]+$/
2. 알파벳이외의 문자가 있는지
/^[a-zA-Z]+$/
3. 한글만 찾기
/[가-힝]/
4. 한글과 알파벳만 찾기
/[가-힝a-zA-Z]/
5. 한글만 있는지
/^[가-힝]*$/
6. 전화번호 체크
/^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$/
7. 정확한 날짜인지 체크
/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/
8. 도메인이 정확힌지 체크
/^[.a-zA-Z0-9-]+.[a-zA-Z]+$/
9. E-mail이 정확한지 체크
/^[_a-zA-Z0-9-]+@[._a-zA-Z0-9-]+\.[a-zA-Z]+$/
Posted by ukmie
,
DataPortability.org - 이미 존재하는 데이터 공유를 위한 기술 표준을 이용하여 플랫폼 간의 데이터를 공유할 수 있도록 여러 업체들이 함께 가이드라인과 정책을 마련하자는 취지랍니다.

DataPortability is a group created to promote the idea that individuals have control over their data by determing how they can use it and who can use it. This includes access to data that is under the control of another entity.

The DataPortability project intends:

  • To be open to anyone, whether individuals, companies or organizations
  • To reach resolution by consensus
  • To have transparency in decisions
  • To prefer collaboration of existing efforts over invention of new technologies

아직 구체적인 방안이 마련되어있는것 같진 않지만, 이 조직에 구글 페이스북 등이 참여의사를 밝혔다고 하네요. 취지는 그럴듯한데, 음,,어떤 모습이 될지 기대~~

DataPortability 소개 동영상
connect. control. share. remix

DataPortability - Connect, Control, Share, Remix from Smashcut Media on Vimeo.
Posted by ukmie
,

기능 명세서 작성 요령

 

소프트웨어 개발 실패시 중요항목으로 작용



소프트웨어 프로젝트는 낮은 품질과 지연되는 일정, 초과되는 예산으로 악명 높다. 소프트웨어 위기(Software Crisis)라고도 불리는 이런 현상의 원인에는 항상 불완전하거나 잘못된 요구사항이 있다. 스탠디시 그룹(Standish Group)이 352개 기업의 8000개 프로젝트를 조사한 결과에 따르면, 소프트웨어가 실패하는 주요인으로 사용자의 참여 부족(12.8%), 불완전한 요구사항과 명세서(12.3%), 변화하는 요구사항과 명세서(11.8%) 등 요구사항과 관련된 항목이 거의 40%에 달함을 알 수 있다. 이번 호에서는 요구사항과 관련된 최소한의 문서인 기능 명세서(Functional Specification)에 대해 알아보자.

   

서광열 | kwangyul.seo@gmail.com

   

요구사항이란?


소프트웨어 프로젝트에 있어 요구사항 분석이란 무엇을 하는 소프트웨어를 만들지 결정하는 단계이다. 실제로 많은 소프트웨어 프로젝트가 무엇을 만들지도 확실히 결정하지 않고, 코드를 작성하고 테스트를 수행하는 모습을 볼 수 있다. 이런 일을 잘할수록 슈퍼 프로그래머로 불리고 칭송 받는 게 현실이다. 하지만 이렇게 작성된 소프트웨어는 최종 사용자가 실제로 원했던 모습이 아니며, 잘 만든 소프트웨어일수는 있어도 결국 쓸모없는 소프트웨어가 된다.

요구사항을 작성하는 목적은 다양하다. 소프트웨어의 설계와 구현뿐만 아니라, 프로젝트의 범위 확정, 비용 측정, 일정 관리, 문서화와 교육 훈련 등 다양한 제반 활동을 지원하는데 있어 요구사항 작성과 관리는 빠질 수 없는 중요한 활동이다. 이처럼, 요구사항은 개발팀뿐만 아니라 해당 소프트웨어와 이해관계를 함께 하는 모든 사람들이 참여하는 중요한 활동이다.

요구사항 분석 단계에서 나오는 최종 산출물은 요구사항 명세서이다. 요구사항 명세서에 포함되는 내용은 무척 다양하다. 시스템의 목표, 독자, 전체 기술 요약, 프로젝트 제약 조건 등이 서론으로 포함되고, 본문에는 기능 명세의 필요에 따라 자료 흐름도(Data Flow Diagram)이나 프로세스 명세서(Process Specification), ERD (Entity-Relationship Diagram) 등이 포함되기도 한다. 또한 표준, 법률 등에 의한 외부 규제나 성능 관련 내용을 포함한 비기능 요구사항(Non-functional Requirement), 프로젝트가 완료되었을 때의 검증 기준 등도 문서에 포함된다.

하지만 중소규모의 프로젝트에서는 이런 요구사항 문서 작성이 부담인 경우가 많으며, 압도적인 문서의 양에 겁먹어 사실상 아무런 문서화를 하지 않는 경우가 비일비재하다. 현재도 중소기업 간의 소프트웨어 계약에서는 시스템을 요약적으로 기술한 1-2장의 짧은 문서가 요구사항 명세서를 대신하는 경우가 많으며, 이런 명세서의 모호한 구절은 이후 프로젝트의 범위와 종료 여부를 놓고 논쟁의 대상이 된다.



기능 명세서


기능 명세서는 앞서 언급한 요구사항 명세에 들어갈 내용 중에 하나이며, 소규모 프로젝트에서는 사실상 기능 명세서만 제대로 작성되어도 프로젝트를 성공적으로 이끌 수 있다. 여기서 말하는 소규모란 개발자 1명이 일주일 이상 개발해야 하는 복잡도를 가진 모든 소프트웨어를 통칭한다. 1명의 개발자가 하루 이틀 작성하는 미니 프로그램을 제외한다면, 모든 소프트웨어는 명세 없이는 항상 일정을 초과하고 품질이 낮은 소프트웨어를 만들 수밖에 없다.

그렇다면 기능 명세란 무엇인가? 기능 명세란 1) 사용자의 관점에서 2) 최종 제품이 3) 어떤 모습이며 4) 어떻게 동작할 것인지를 기술한 문서를 말한다. 기능 명세란 어디까지나 최종 사용자의 입장에서 기술한 문서이기 때문에 내부 구현이나 설계 이슈를 포함하지 않는다. 또한 최종 제품에 대해서 이야기하기 때문에 각 소프트웨어 컴포넌트들이 어떻게 상호 작용하는지도 중요하지 않다. 그저 이 프로젝트가 끝나면 나오는 최종 산출물이 어떤 모습이며 어떤 일을 수행하는지를 자세히 기술하는 것이다.

실제로, 많은 개발자들이 무엇을 만들 것인지와 어떻게 만들 것인지를 혼동한다. 무엇과 어떻게 사이에 명확한 경계가 존재하지는 않지만, 소프트웨어 요구사항도 파악하기 전에 설계가 시작되어서는 곤란하다. 최종 소프트웨어가 어떤 모습인지를 확실하지 않은 채 UML을 이용해 클래스 다이어그램부터 그리고 있어서는 곤란하다. 이런 시스템은 필연적으로 주객이 전도되어 설계가 요구사항의 변경이나 삭제를 요구한다. 기능 명세는 ‘무엇’을 만들 것인지를 분명히 하는 문서라고 보면 된다.

개발자 입장에서 기능 명세는 개발 과정에서 궁금할 수 있는 모든 질문에 답을 해놓은 문서가 존재한다는 뜻이다. 또한 명세는 고객 혹은 최종 사용자의 승인을 받은 문서이므로, 명세만 따라서 만들면 고객이 실제로 원하는 소프트웨어를 작성할 수 있다는 장점이 있다. 또한 분쟁의 소지가 생겼을 때는 결국 명세에 명시된 내용을 근거로 판단을 내릴 수 있다 (물론 상당수의 소프트웨어 프로젝트에 명세는 무시되고, 고객의 머릿속에 있는 요구사항이 최우선이긴 하지만 말이다).

종종 기능 명세를 기술 명세(Technical Specification)와 혼동하는 경우가 있다. 기술 명세는 프로그램 내부 구현에 대한 기술이며, 데이터 구조, 관계형 데이터베이스 모델, 프로그래밍 언어, 알고리즘, 플랫폼 등을 기술하는 것이 일반적이다. 기술 명세는 설계 및 구현에 직접적인 도움을 주기 위한 것이며 사용자의 관점에서 시스템을 기술한 기능 명세와는 다르다.

쉽게 커뮤니케이션이 가능한 10명 이하 소규모 개발 조직에서는 대부분의 의사소통이 구두로 이루어지므로, 기술 명세를 생략하는 경우가 많지만 기능 명세는 개발팀만을 대상으로 하지 않는다는 면에서 여전히 유효하다.



기능 명세에 들어갈 내용


기술 명세의 중요성을 설파하고 나면, 기술 명세의 템플릿을 원하는 분들이 많다. 기술 명세를 한 번도 작성해 본 적이 없는 분들의 입장에서 템플릿은 기술 명세 문서를 작성하는 단서가 되기도 하지만, 무비판적으로 모든 템플릿의 항목을 채우려는 문서화 노력은 보통 불필요한 노동으로 끝나는 경우가 많다.

기술 명세는 프로젝트 성격에 따라 달라지지만 일반적으로 다음 요소들은 반드시 포함되며 추가 설명이 필요 없을 정도로 자세히 기술되어야 한다.



1) 시나리오


기술 명세는 사용자 관점에서 시스템을 바라본 것이므로, 이를 가장 잘 기술하는 방법은 실제 사용자를 가정하고 시스템을 어떻게 쓸 것인지 시나리오를 작성해 보는 것이다. 예를 들어, 온라인 영어 학습 사이트에 대한 기술 명세를 쓴다고 하면, 성적은 중위권이며 방과 후에 PC방에서 게임하는 것이 취미인 15살 박 모 군과 같이 구체적인 인물을 설정하고, 이런 인물이 영어 학습 시스템을 사용할 때 어떤 패턴을 보일 것인지를 기술하는 것이 효과적이다.
이때 시나리오는 유스 케이스(Use Case)가 될 수도 있고, 조금 더 단순화된 형태인 유저 시나리오(User Scenario)가 될 수도 있다. 소프트웨어 방법론이나 프로젝트의 성격에 따라 어떤 방식을 선택해도 무방하다. 하지만 원칙은 시스템의 모든 기능을 한 번 이상을 이용할 수 있도록 충분히 많은 시나리오를 작성해서, 개발자가 시스템을 설계할 때 전혀 고려된 적이 없는 상황을 마주치는 일이 생기지 않도록 해야 한다.
기능 명세의 시나리오는 무엇을 테스트해야할지 단서를 제공한다는 측면에서 소프트웨어 테스트나 품질보증(Quality Assurance, QA) 팀에게도 소중한 문서이다. 특히 시스템의 기능 테스트(Functional Test)는 유저 시나리오에 바탕을 뒀을 때 가장 효과적이다. 유저 시나리오는 최종 제품이 원래 요구사항에 기술된 요소를 모두 충족시켰는지를 판단하는 중요한 근거가 되기 때문이다.

2) 세부사항


기능 명세를 작성함에 있어서는 세부사항이 무척 중요하다. 특히, 무엇인가 잘못될 수 있는 경우 모든 가능성에 대해서 꼼꼼히 명세를 작성해야 한다. 예를 들어, 전자상거래 웹페이지의 로긴 페이지를 만든다고 한다면 다음과 같은 이슈를 모두 고민해야 한다.

1) 등록되지 않는 ID로 로긴한 경우?
2) 등록된 ID지만 패스워드가 틀린 경우?
3) 같은 ID에 3번 이상 다른 패스워드를 입력했을 경우 추가적인 로그인 시도를 금지할 것인가?
4) 아이디와 패스워드를 잃어버린 사람이 이를 되찾는 방법은?
5) 패스워드 관련 힌트를 제공할 것인가?
6) 한 번 로긴한 후에는 얼마나 오래 세션이 지속되는가?


세 부사항을 작성할 때, UI를 중심으로 기능을 기술하는 것이 가장 효과적이다. 특히, 웹개발의 경우 각각의 페이지를 기준으로 소프트웨어가 어떻게 동작하는지 설명하는 방법이 일반적이다. 모든 페이지에 고유의 이름을 붙이고, 각 페이지에서 나오는 메뉴와 UI 위젯이 어떤 역할을 하는지 구체적으로 기술한다.

3) 열린 이슈


명세를 작성하는 목적은 프로젝트 시작 전에 최대한 많은 요구사항을 끌어내고 최종 산출물의 모습을 파악하는 데 있지만, 필연적으로 일부 문제들은 미해결 상태로 남아있게 된다. 이런 부분은 기능 명세에 분명히 기술하여 프로젝트가 진행되면서 해결해 나가야 한다.

변경 추적


기능 명세뿐만 아니라 모든 개발 관련 문서의 생명은 얼마나 변경 추적이 잘 되느냐에 달려 있다. 명세와 관련된 가장 큰 불만은 명세를 작성한 이후 프로젝트 요구사항이 변화하고 설계 및 코드에 수정이 일어남에도 불구하고 명세가 갱신되지 않는다는 데에 있다. 따라서 개발자들을 비롯한 이해 관계자들은 명세를 신뢰하지 않게 되고, 쓸모없다고 생각하게 된다.

특히 요구사항 분석, 설계, 구현, 테스트, 유지 보수를 한 번씩만 거치는 폭포수 모델(Waterfall Model)을 따르는 조직일수록 이런 경향이 강하게 나타난다. 요구사항 분석은 프로젝트 초기에 단 한 번만 이루어지며, 이후 설계나 구현은 요구사항 변경 요청 시에 수정되지만 정작 요구사항 문서는 그대로 남는 경우이다. 이런 조직에서는 시간이 지날수록 기능 명세를 비롯한 요구사항 문서의 질은 극도로 낮아지며 유지 보수 단계에서는 누구도 기능 명세를 보지 않는 상황이 벌어진다.



누가 기능 명세를 쓰는가?


기능 명세와 관련된 가장 중요한 질문은 누가 기능 명세를 쓰느냐는 것이다. 앞서 언급한 것처럼 기능 명세는 개발팀뿐만 아니라, 마케팅, 문서화팀, QA팀 등 소프트웨어 프로젝트에 관련된 모든 팀이 관여하는 문서이고, 다양한 이해 관계자들을 만나서 요구사항을 끌어낼 수 있는 능력이 필요하다. 따라서 어느 정도 개발 지식이 있을 뿐만 아니라 대인 관계와 커뮤니케이션 능력이 뛰어난 사람이 명세를 작성해야 한다.

덕분에 국내에서는 기능 명세를 쓰는 사람이 개발팀장인 경우가 많지만, 훌륭한 프로그래머가 훌륭한 커뮤니케이션 능력을 갖추고 글도 잘 쓰는 경우는 국내외를 막론하고 무척 드물다. 또한 내부 구현이나 기술적인 세부 사항을 너무 잘 알고 있다는 점이 부작용으로 작용한다. 뛰어난 개발자 출신일수록 기능 명세가 아닌 기술 명세를 작성하는 경우가 많다.

기능 명세를 개발팀장이 작성하는 경우가 많은 이유는 기능 명세 작성을 개발팀 리더의 역할로 보는 관점 때문이다. 하지만 기능 명세를 작성하는 사람은 개발자나 테스터와는 다른 전문 영역으로 보는 것이 옳다. 실제로 마이크로소프트나 구글 등 대형 소프트웨어 업체는 신입 사원을 모집할 때부터 직군을 프로그램 매니저, 개발자, 테스터로 구분하고 있는데, 프로그램 매니저의 주요 역할이 요구 사항을 수집하고 기능 명세를 작성하는 데 있다.

기능 명세는 소프트웨어 요구사항의 핵심이며, 설계와 구현의 바탕이 되는 중요한 문서이다. 아직까지 기능 명세 없이 곧바로 소프트웨어를 작성하는 조직이 있다면, 기능 명세를 작성해 볼 것을 권한다. 기능 명세에 대한 더 자세한 정보가 궁금한 사람은 참고문서를 참고하기 바란다.



필자소개

현재 (주)노매드커넥션의 CTO로 재직 중이다. 관심 분야는 플랫폼, 가상 머신, 프로그래밍 언어 등이며 현재는 미디어 플랫폼에 많은 관심을 가지고 연구 개발을 진행 중이다. 개인 블로그인 서광열의 소프트웨어 이야기(http://skyul.tistory.com)을 통해서 소프트웨어 개발과 IT 산업에 대한 생각을 정리하고 있다.


제공 : DB포탈사이트 DBguide.net  

출처명: 경영과컴퓨터 [2007년 11월호]

Posted by ukmie
,