2004-10-26

J2SE 1.4 Assertions

1. 프로그램 작성

Test.java

int month = ...

/* 메시지 없이 */
assert (month <13);

/* 메시지 포함 */
assert (month <13) : "The value of iMonth has exceeded 12";

메시지를 메서드 호출을 통해서 받을 수 있다. 단, 그 메소드는 void를 반환해서는 안된다.


2. 소스 컴파일

javac -source 1.4 Test.java


3. 프로그램 실행

java -enableassertions Test


4. Eclipse 3.0 설정

Java Compiler > Compliance and Classfiles 메뉴에서

Use default compliance settings 체크 박스를 비활성화하고 Generated .class files Compatibility와 Source Compatibility를 모두 1.4로 선택한다.

2004-10-13

Sun Tech Days 2004 참석 후기

장소 : 서울 서초구 반포동 메리어트 호텔
시간 : 2004년 10월 7일 (목) - 8일 (금)
개요 : 2개의 트랙으로 구성되어 있었으며, 발표자의 대부분은 Sun, SAP, Oracle, AMD의 본사 인력이었음(동시 통역으로 진행). 그리고 발표 내용의 80%는 자바 관련이었음.
홈페이지 : http://www.suntechdays.co.kr


세션 내용

8일의 자원 봉사 관계로 두번째 날 오후의 세션은 참석하지 못함.

(1) 기조연설 1 - James Gosling

The Future of Java라는 주제로 소프트웨어 개발의 복잡도를 극복하기 위한 노력들을 설명. J2SE 5.0, 도구(Sun Java Creator), 클라이언트 프로그램 등이 주요 주제가 되었는데 Sun Tech Days 전체가 각각의 부분들에 대해서 자세하게 다루는 식으로 지정됨.


(2) 기술시연 - 여려명

4가지 정도의 주제에 대해서 담당자들이 나와서 5분 동안 시연함. 그 주제는 리눅스/자바 기반의 데스크탑 환경, Wearable Computing, J2ME, Sun Java IDE를 이용한 성능 튜닝이었음. 별로 색다른 내용은 없었으며, 데스크탑과 Sun Java IDE 시연에서는 시연 중 에러가 발생하였음.


(3) Beyond Web Services: Developing Service-Oriented Applications (Raghu Kodali, Oracle)

SOA에 대한 설명을 Oracle ADF(Application Development Framework)를 중심으로 설명함.


(4) Think Applications, Run J2EE (Ivo Totev, SAP AG)

SAP의 NetWeaver와 자바/J2EE의 관계에 대해서 개괄적으로 설명함.


(5) J2EE Persistence : Explore your persistence options (조인영, Sun)

자바 환경에서 Persistence를 구현하는 것을 JDBC, JDO, EJB Entity Bean, Hiberate를 중심으로 비교 설명. 기초적인 수준에서만 다룸.


(6) SOA : Web Services and Business Process Modeling (Raghu Kodali, Oracle)

SOA를 웹 서비스에 초점을 두어서 설명함. (3) 세션과 연결되어 있었음.


(7) JavaServer Faces and Sun Java Studio Creator : Experience the Next Generation Web Application Framework (Rima Patel, Sun)

JSF에 대한 기본적인 설명과 JSF와 Struts 간의 관계를 보여줌. 그리고 이를 Sun Java Studio Creator를 이용해서 애플리케이션을 개발하는 것에 대한 데모


(8) NetBeans 4.0 and Sun Java Studio 7 Enterprise Edition : Maximize Developer Productivity (신상철, Sun)

Sun의 자바 개발 도구인 NetBeans와 Sun Java Studio 7에 대한 설명 및 데모. 다른 경쟁 제품과 비교했을 때 고유한 특징이나 장점을 찾기는 어려웠음.


(9) J2SE 5.0 : Watch and Hear the Tiger Roar! (Angela Caicedo, Sun)

J2SE 5.0에서 변경되거나 추가된 문법과 새로운 라이브러리에 대한 설명. J2SE 5.0을 이해하는데 발표 자료(PPT, 약 130장)를 사용하면 유용할 듯 함.


후기

새로 발표된 J2SE 5.0에 대한 내용, 웹 서비스/SOA, 다양한 개발 도구 등을 중심으로 짜여진 이번 행사는 내용 수준에서는 간단한 소개 수준이었음.

2004-10-12

마이 웨이

내가 좋아하는 야구팀, OB 베이스. 아무 것도 모를 7살 어린 나이에, 한국시리즈에서의 그 떨림에 좋아하게 된 팀.

절대로 그 어느 팀도 넘볼 수 없는 원년 우승팀이라는 자신감 하나로 꼴찌 OB라는 비아냥에도 불구하고 좋아한 팀.

당장이라도 박철순만 돌아오면 리그를 호령할 줄 알았던... 나의 학창 시절의 매일은 언제나 곰들의 전날 경기 성적에 따라서 좌우되던...


1994년, 여자 친구에게서 이별통고를 받을 때 이별하자는 말보다... OB 선수들의 집단 항명에 'OB 망했네'라는 그녀의 말이 더욱 가슴 아프게 다가오던...

그리고 그토록 기다리던 우승을 부산 출신 고참들이 즐비한 비무장지대 내부반에서 이등병으로 감격해하며 맞았던...

이름이 두산으로 변경되어서인지... 아니면 사느냐고 지쳐서인지... 예전 같진 않지만... 오랜만에 플레이오프 첫경기에서의 두산의 승리에... 옛 생각을 떠올리며...

2004-10-10

비즈니스 애플리케이션 프레임워크 & 컴포넌트

* 인터넷에서 비즈니스 애플리케이션 프레임워크 & 컴포넌트(이하 BAFC)에 대한 자료는 간단한 소개 이상은 찾기가 어렵습니다. 디자인이나 구현과 관련된 내용은 Martin Fowler의 Anaylsis Patterns(http://www.martinfowler.com/articles.html#N1003F) 외에는 없습니다. 그 이유를 나름대로 추론하자면 첫째는 BAFC에 대한 관심의 부족을, 두번째는 BAFC에 대해서 내세울만한 성과의 부족을, 세번째는 (업체들의) 그런 자료를 공개할 동기 부족을 들 수 있을 것 같습니다.



비즈니스 애플리케이션

ERP(Enterprise Resource Planning), CRM(Customer Relationship Management), SCM(Supply Chain Management), HRM(Human Resource Management) 등으로 대표되는 (영리 혹은 비영리) 비즈니스 업무 자동화와 정보 제공 및 분석을 위한 애플리케이션을 비즈니스 애플리케이션이라고 한다. 비즈니스 애플리케이션은 앞의 예처럼 패키지 형태의 솔루션일 수도 있고, 독자적으로 개발한 Custom-built 애플리케이션 형태일 수도 있다. 비즈니스 애플리케이션의 자세한 분류 체계는 PeopleSoft(http://www.peoplesoft.com/corp/en/products/ent/index.jsp) 혹은 SAP(http://www.oracle.com/solutions/index.html)을 참조한다.


Product Line

다양한 형태의 비즈니스 애플리케이션들은 공통점을 보유하고 있다.

첫 번째는 기술 플랫폼을 공유한다. J2EE(Java 2 Platform, Enterprise Edition)나 .NET과 같은 기술 플랫폼이 이에 해당한다. 물론 SAP 처럼 독자적인 기술 플랫폼을 보유하고 있는 업체도 있고, PeopleSoft 처럼 J2EE와 같은 표준 기술 플랫폼을 차용한 업체도 있을 것이다. 광의로 해석하면 운영 체제나 하드웨어까지도 이에 포함된다.

두 번째는 기술 프레임워크이다. 기술 프레임워크는 기술 플랫폼에 특화된 개발 표준으로 이해하면 된다. 물론 SAP 처럼 독자적인 기술 플랫폼을 지닌 업체에게는 기술 플랫폼과 기술 프레임워크의 구분이 불필요할 수 있다. 그러나 외부 표준 기술 플랫폼을 차용한 경우에는 이를 자신들에게 적합한 방식으로 가공한 기술 프레임워크가 있을 것이다. 예를 들어 Struts는 오픈 소스 진영의 J2EE에 대한 개발 표준(기술 프레임워크)이 된다.

세번째는 비즈니스 프레임워크이다. 애플리케이션의 유형과 독립적으로 존재 가능한 비즈니스 대상 혹은 프로세스의 설계 및 구현이 이에 해당한다. 예를 들면 화폐, 주문, 제품, 고객, 공급사, 직원, 결제 등이 이에 해당된다. 자세한 항목은 다음을 참조한다. (ftp://ftp.software.ibm.com/software/websphere/awdtools/businesscomponents/bcgtm.pdf) 이런 비즈니스적인 공통 요소에 대한 개발 표준을 BAFC로 이해하자.

수평적 통합에 기반한 솔루션 포트폴리오를 가지고 있는 업체들은 경쟁력 향상을 위해서 이 공통적인 요소들을 중복없이 공통적으로 관리하는데 관심을 갖게 된다. 이를 Product Line이라고 지칭할 수 있을 것이다.


비즈니스 애플리케이션 프레임워크 & 컴포넌트

현 시점에서 기술 플랫폼과 기술 프레임워크에 대한 성숙도는 상대적으로 높은 편이며 이제 관심의 초점은 BAFC로 넘어가고 있다. 이는 기술 플랫폼부터 애플리케이션까지 수직접 통합을 시도하는 IBM, MS, Oracle 등의 업체와 비즈니스 애플리케이션 개발 및 컨설팅에 집중하는 SAP, PeopleSoft, Siebel, webMethods 등의 업체들이 주도하고 있다.

(1) Microsoft Business Framework(이하 MBF)

MS 는 ERP, CRM 등의 제품 개발을 위한 Project Green(http://www.informationweek.com/story /showArticle.jhtml?articleID=15200123)을 진행하고 있다. MS가 이미 다양한 비즈니스 애플리케이션(http://www.microsoft.com/BusinessSolutions)을 보유하고 있기는 하지만 대부분이 M&A를 통해서 확보한 관계로 애플리케이션 사이에는 기술 플랫폼과 기술 프레임워크에서의 이질성이 존재한다. 이 이질성을 해소하기 위한 작업이 Project Green이다.

Project Green은 기술 플랫폼은 .NET, 기술 프레임워크는 Enterprise Library에 기반하고 있다. 그리고 동시에 애플리케이션 사이에서 공통적인 비즈니스 요소들을 MBF(http://www.gotdotnet.com/team/PDC/4121/DAT340.ppt)로 개발하고 있다. 따라서 Project Green을 통해서 개발될 애플리케이션은 MBF를 사용하여 구현될 것이다.

그러나 MBF는 WinFS나 Longhorn 등의 출시와 맞물리면서 그 진척이 주춤하고 있는 상태이다.(http://www.infoworld.com/article/04/09/01/HMlonghornmbf_1.html)

(2) IBM Business Components for WebSphere™ Application Server(이하 BC)

IBM은 ERP나 CRM 등의 솔루션을 직접 제공하고 있지는 않으며, 기술 플랫폼과 기술 프레임워크, 비즈니스 프레임워크 등을 제공한다.

기술 플랫폼은 J2EE(WebSphere), 기술 프레임워크는 Struts이다. 그리고 BC는 SanFrancisco 프로젝트와 연결되어 있다.

기 본적으로 Entity Bean을 포함한 EJB(Enterprise JavaBeans)를 중심으로 설계/개발되어 있는 BC는 비즈니스 영역에 구애받지 않고 공통적으로 사용할 수 있는 컴포넌트와 특정 영역에서만 사용 가능한 컴포넌트로 구분되어 있다. 전자는 Cross Domain Component(CDC)라고 하며 화폐, 달력, 계정, 고객, 파트너 등이 포함된다. 후자는 Business Domain Component(BDC)라고 하며 현재는 일반 회계, 주문 관리(Order Management), 창고 관리(Warehouse Management) 등의 영역에 해당하는 컴포넌트를 제공한다. 자세한 컴포넌트 목록은 다음을 참조한다.(ftp://ftp.software.ibm.com/software/websphere/awdtools /businesscomponents/basecomponentoverview.pdf)

(3) Oracle Application Development Framework(이하 ADF)

Oracle 의 ADF는 기술 프레임워크를 중심으로 비즈니스 프레임워크가 포함되어 있다. 그런데 ADF는 BC 혹은 MBF와는 상이하다. ADF는 라이브러리 혹은 컴포넌트 형태의 비즈니스 컴포넌트를 제공하는 것이 아니라 신속한 비즈니스 컴포넌트(BC4J)의 개발을 돕는 마법사 도구를 제공한다.


그 외에도 webMethods Composite Application Framework, SAP Composite Application Framework 등의 BAFC가 있다.


비즈니스 애플리케이션 프레임워크 & 컴포넌트의 특징

BAFC 는 일정한 Best Practices 및 디자인 패턴에 기반하여 설계되어 있다. 실질적으로 BAFC가 제공하는 재사용 가능한 컴포넌트 못지 않게 견고한 설계 기법 등이 더 중요한 역할을 할 수 있다. SanFrancisco 디자인 패턴이 대표적인 예이다.

Oracle의 JDeveloper, MS의 Visual Studio.NET 등 BAFC는 IDE(+ 모델링) 도구와 밀접하게 통합되어 있으며 일정 부분은 MDA(Model-Driven Architecture)를 지향하고 있다.

BAFC 는 다양한 트랜드와 연결되어 있다. SOA(Service Oriented Architecture), 웹 서비스, BPM(Business Process Management), BPEL(Business Process Execution Language), 포탈 등이 이에 해당한다.


시사점

성질 급한 A라는 고객을 가정하자. 어느날 A가 통상적으로는 6개월이 걸리는 B라는 애플리케이션을 4개월 안에 개발해 줄 것을 요청한다. 혹은 2개월일 수도 있다. 물론 A가 합리적이라면 그 댓가는 만족할 만한 수준일 것이다. 이는 A의 성질로 인한 것이 아니라 A가 속해있는 시장의 상황과 그 시장에서 경쟁적 우위를 확보하기 위한 불가피한 선택으로 받아들여야 한다.

우리는 A의 요구 사항을 총족 시킬 수 있는 역량을 갖추고 있는가? 혹은 그 역량을 확보하기 위해서는 어떤 부분에 투자하여야 하는가? 아마도 BAFC가 여러 많은 안 중의 하나임에는 분명해 보인다.

여기서 BAFC가 가치가 있는가에 대해서 논의하는 것은 무의미해보인다. 앞으로의 논의는 어떻게 BAFC를 우리의 것으로 만들 수 있는가가 초점이 되어야 한다.

How? Buy or Build?

2004-10-04

반복적(Iterative) 개발

무엇을 반복하는가?

광의로 반복적 개발이란 무엇인가를 반복하면서 시스템을 개발하는 걸 의미한다. 이렇게 넓은 의미에서 본다면 단순히 코딩/단위 테스트가 반복되는 개발도 반복적이다. 그래서 반복적 개발이 가치를 지니려면 반복의 대상이 되는 활동의 폭 혹은 수에 대한 협의의 의미 부여가 필요하다.

논의의 단순화를 위해 시스템 개발이 요구수항 수집, 요구사항 분석, 설계, 구현(단위 테스트를 포함한), 테스트, 배치 등의 활동으로 구성된다고 가정하자.

앞 에서 예로 든 반복은 구현이라는 단위 활동 내에서 이루어질 뿐이다. 반복적 개발이 가치가 있으려면 하나의 활동 내에서가 아닌 여려 활동들이 결합하여 반복되어야 한다. 이 때 활동들의 결합은 근접한 것(설계와 구현, 요구사항 수집과 요구사항 분석 등) 사이에서 이루어지는 것이 통상적이다.

따라서 반복적 개발이란 요구사항 수집, 요구사항 분석, 설계, 구현, 테스트, 배치 등의 활동이 둘 이상으로 결합되어 2회 이상 반복되는 형태를 지칭한다.


왜 반복하는가?

성공적인 시스템 구축을 위해서 반복한다. 자세한 설명은 Iterative Development(http://www.objectmentor.com/writeUps/IterativeDevelopment)를 참조한다.


반복의 강도

앞 에서의 정의를 빌려서 우리는 어떤 프로젝트가 반복적인 개발을 수행하고 있는지 아닌지를 판단할 수 있다. 그 다음으로는 반복의 강도를 계산해야 한다. 간단하게 반복의 강도는 결합되어 반복되는 개발 활동들의 수와 반복의 빈도를 통해서 파악한다.

반복의 강도 = 결합된 활동 수 X 반복의 빈도

[TODO] 반복의 강도와 프로세스 효율성의 상관 관계


반복하여 무엇을 개발하는가?

우리가 개발하는 시스템이 A, B, C 등의 서브시스템으로 분리되어 있다고 가정하자. 그리고 각각의 서브시스템(A)은 여러 기능(A1, A2, A3) 등으로 다시 분리된다고 보자.

이런 조건에서 무엇을 반복하여 개발하는가에 대한 질문에는 두개의 답이 있을 수 있다. 일단 반복 주기가 X, Y, Z 등의 3 주기로 구성된다고 가정하자.

첫번째는 (X-A), (Y-B), (Z-C) 등의 방식으로 개발하는 것이고, 두번째는 (X-A1, B1, C1), (Y-A2, B2, C2), (Z-A3, B3, C3) 등의 방식으로 개발하는 것이다.

모 든 서브시스템이 중요성, 복잡성 측면에서 동일하다면 어느 방식이든 문제가 없다. 단 이런 상황은 예외일 것이다. 따라서 중요하고 복잡한 서브시스템에 집중할 수 있어야 한다. 그리고 경우에 따라서는 프로젝트 중간에 특정 서브시스템을 개발 범위에서 함몰 비용을 최소화하면서 제외(포기)할 수도 있어야 한다. 결국 학습 효과를 충분히 발휘하는데에도 적합한 첫번째 방식이 바람직하다.

따라서 첫번째 개발 주기(X)에서 A, B, C 중 중요한 서브시스템을 먼저 개발한다. 중요한 것은 서브시스템이 사용자에게 제공하는 가치와 그것의 구현 위험도를 고려하여 결정하면 된다.

여기서 각 서브시스템의 중요도가 A, B, C 순이라고 가정하자. 그런데 기능 수준에서는 B의 기능 중 하나(B1)가 A의 기능 중 하나(A1)보다 중요도가 높다면 어떻게 무엇을 개발할 것인가?

이 때는 첫번째와 두번째 방식을 혼용해서 A2, A3, B1의 기능을 첫번째 반복 주기(X)에서 개발할 수도 있을 것이다.

[TODO] 첫번째 방식을 사용하여 효과를 극대화하려면 정교하게 고안된 인력 운영 기법을 갖추고 있어야 한다.


개발 속도(Velocity)

프로젝트 팀이나 개별 팀원의 개발 속도는 프로젝트 관리에 중요한 정보이다. 초기에는 개략적으로 개발 속도를 예측하고 반복을 진행하면서 그 속도를 실제적인 것으로 구체화해야 한다. 개발 속도의 단위는 반복 주기 단위로 한다.

개발 속도 = 하나의 반복 주기에 완료한 기능의 포인트

기능의 규모와 복잡성을 객관화하는 수단이 있어야 한다. 일단은 이를 추상화하여 기능의 단위라고 지칭한다. 실질적으로는 Function Point 등을 이용할 수 있을 것이다.


반복적 개발에 따른 이슈

(1) 고객의 참여

반복적 개발에는 (특히 요구사항 분석 활동이 반복에 포함된다면) 고객의 참여가 중요하다. 고객이 반복의 시작과 종료 시에 병목점이 될 여지가 높기 때문에 이를 고객의 적극적 참여를 통해서 해결해야 한다.

[TODO] 이번 반복에서 3개의 기능(A1, A2, A3)을 개발해야 한다. 그리고 이들 기능은 독립적인 서브팀(X, Y, Z)에 할당되었다. 각각의 기능에 대해서 요구사항을 내고 만들어진 기능에 대한 검증을 하는 고객이 독립적으로 존재한다면 갈등의 소지는 없다. 그런데 1명의 고객이 3개의 기능에 대해서 모두 총괄한다면 어떻게 할 것인가? 개발 팀의 대기 시간이 길어지는 명목 현상을 어떻게 해소할 것인가? 이전 반복에서 발생한 문제의 해결이나 미진한 기능의 추가 개발과 요구사항 분석 단계를 병행해서 대기 시간을 줄일 수 있을까? 혹은 각 서브팀별로 반복의 시작과 종료를 달리해서 대기 시간을 줄일 수 있을까?


(2) 짧은 반복 주기

반복에 요구사항 분석, 설계, 구현, 테스트 등의 활동이 포함된다고 가정한다. 반복주기는 최소 1주에서 최대 8주 이내에서 선택한다. 그리고 각 반복의 기간은 동일해야 한다. 그래야지만 평가 혹은 비교 기준으로 삼을 수 있다.

6 개월 이내의 프로젝트는 2 주 단위로 반복을 가져간다. 첫번째 1 개월과 마지막 1 개월은 요구사항 수집과 배치(인수 테스트 포함) 활동을 위해 사용한다고 하면 최대 8 차례의 반복이 가능하다.

12 개월 이내의 프로젝트는 4 주 단위로 반복을 가져간다. 첫번째 2 개월과 마지막 2 개월은 요구사항 수집과 배치(인수 테스트 포함) 활동을 위해 사용한다고 하면 역시 최대 8 차례의 반복의 가능하다.

대 략 XP(eXtreme Programming)는 1주 혹은 2주, Scrum은 4주(30일), RUP는 8주 이상의 반복 주기를 갖는다. 물론 Scrum을 제외하고 XP 혹은 RUP가 이를 공식화한 것은 아니다. 한 프로젝트에서 3 차례 이상의 반복이 가능하다면 반복 주기의 크기는 부차적이다. 반복 주기는 (고객에게) 의미 있는 가치를 제공하는 개발 팀의 속도를 고려해서 결정하면 충분할 것이다.


(3) Time-Box 준수

계획된 혹은 합의된 반복의 시작일과 종료일은 항상 준수한다.

정 해진 반복 주기 내에서 완료하기로 한 기능을 개발하지 못하는 상황이 왔을 때 개발 주기의 완료일을 연장하면 전체 반복 주기의 흐름이 깨진다. 개발 대상을 축소하더라도 개발 주기를 지키는 것이 현명하다. 기간의 연장은 이번 반복에서 (우리가) 실패했다는 사실을 은폐하는 도구로 사용될 가능성이 높으며, 이는 반성할 기회의 상실을 의미할 수 있다. 프로젝트 팀의 도덕성 유지를 위해서 Time-Box는 항상 준수한다.

[TODO] 앞의 서술에서 반복 주기를 서브시스템과 기능을 가지고 결정하는 듯한 입장을 명확하게 할 필요가 있다. 엄밀하게는 서브시스템과 기능을 가지고 Time-Box를 설계하는 것이 아니라 그 합의된 Time-Box에 서브시스템과 기능을 끼어 넣어야 한다. 닭이 먼저냐 달걀이 먼저냐의 문제로 비추어지기도 하겠지만 이는 반복적 개발에 대한 근본적인 문제이다.


(4) 반성과 학습

반복은 Time-Box 시간의 경과로 종료되지 않는다. 몇가지 질문들에 대한 대답과 다음 반복을 위한 준비 혹은 사색이 반복의 종료의 절대 기준이다.

이 번 반복에서 우리는 무엇을 했는가? 반복의 시작에 설정한 목표들을 총족시켰는가? 충족하지 못했다면 그 이유는? 그 이유에 대한 해결 방안은 있는가? 충족했다면 그 이유는? 일하는 방식은 적절했는가? 더 나은 방식이 있는가? 버려야(포기해야) 하는 것과 강화해야 하는 것은?

반복의 종료는 이렇게 간단한 다과와 함께 전체 프로젝트 팀원들이 참여한 미팅으로 종료되어야 한다.

[TODO] Scrum은 매일 아침 30분 이내의 회의를 갖는다. 이런 형태의 회의를 갖는 것이 바람직한가? 개발 주기가 짧다면 아침의 회의가 요식 행위가 되거나 반복 종료 미팅과 중복되지 않을까? 일일보고는?

[TODO] 대부분의 프로젝트에는 주간회의와 월간회의가 존재하는데 만일 반복 개발을 한다면 이를 Time-Box와 동기화 시켜야 한다.


(5) 기능 간의 의존성 관리

중 요한 기능을 먼저 개발한다라는 기준의 준수를 어렵게 하는 것이 기능 간의 의존성이다. 가령 중요도가 가장 높은 A1 기능은 중요도가 낮은 B1 기능에 의존하고 있다. 이런 상황에서 A1 보다는 B1을 먼저 개발해야 하는가? 이렇게 하면 가장 중요한 기능의 개발이 가장 뒤로 밀릴 것이다. 이를 극복하기 위해서 우리는 Mock 기법을 사용한다. 즉 B1 기능을 거짓으로 구현하는 것이다. 이 때는 B1 기능들의 인터페이스도 최소한으로 설계한다.


(6) 재사용

프로젝트가 시작한 후 얼마나 빠른 시간 내에 반복에 들어 갈 수 있는가? 이에 대한 대답이 프로젝트 팀의 역량에 대한 단적인 표상이 된다. 모든 것을 백지에서 시작한다면 반복에 들어가는 시간이 뒤로 밀려질 것이며 이는 최종적으로 반복 개발 자체를 불가능하게 한다.

반복은 프로젝트 팀이 일정 수준 이상의 역량을 확보하고 있을 때 가능하다. 반복적 개발이 역량이 낮은 팀의 생산성(시스템의 품질을 포함한)을 어느 수준 이상으로 높여 주지는 않는다.

예를 들어, 참조 아키텍처(Reference Architecture), 프로덕트 라인(Product Line), 애플리케이션 프레임워크, 컴포넌트, 개발 표준 등을 재사용할 수 있을 때 반복적 개발이 가능할 것이다.


참고자료

The Unified Software Development Process
반복적 개발은 프로젝트 위험에 대처하기 위한 것이라는 점을 잘 설명해준다.

Iterative Development
http://www.objectmentor.com/writeUps/IterativeDevelopment
왜 반복적 개발을 해야 하는가에 대한 짧은 대답.

Iterative and Incremental Development: A Brief History
http://www2.umassd.edu/SWPI/xp/articles/r6047.pdf
반복적 개발에 대한 역사를 간략하게 짚어준다.

A spiral model of software development and enhancement
http://www.sce.carleton.ca/faculty/ajila/4106-5006/Spiral%20Model%20Boehm.pdf
고전...