엔터프라이즈 시스템의 개발 프로젝트는 고객의 요구사항으로 부터 그것을 서포트하는 실행 환경을 만들어 과저으로 정의할 수있다. 여기서 실행 환경은 단순한 바이너리 코드 뿐만 아니가 데이터베이스나 H/W처럼 바이너리가 구동할 수 있는 인프라까지를 포함한다
이중에서도 가장 많은 인원과 기간이 소요되는 것은 프로그래밍이다. 따라서 프로젝트가 성공하거나 실패하는 가장 중요한 기준 또한 프로그램 개발이 성공적이나 아니냐 일 것이다. 
나는 일견 당연한 듯한 요구사항->분석->설계->코딩의 일련의 과정들에 대한 몇가지 관점과 그로인해 생각해 보아야 하는 주제들에 대해서 의견을 말하고자 한다.

요구사항이 구동가능한 바이너리가 되기 위해서는 반복적인 Refine과 Translate을 거쳐야 한다.


  • Refine이란 내용이 상세화 되고 구체적으로 정제 된다는 것을 의미한다. 요구사항은 매우 불확실하고 가변적인 요소가 많다. 하지만 어떤 식으로든 구체적으로 결정되어야 실행코드에 반영이될 것이다. 따라서 요구사항은 실행 코드가 될때 까지 Refine되어야 한다.
  • Translate란 형태가 바뀐다는 것을 의미한다. 즉 구두나 텍스트 문서로 존재하던것이 마지막에는 프로그램 언어로 작성된 코드가 되는데 이렇게 형태가 바뀐다는 것을 말한다.
요구 사항은 실행코드에 반영될수 있는 수준으로 정제되어야 하며 프로그램 언어로 변경되어 프로그램되어야 한다.

그런데 요구사항은 너무 부정확하기 때문에 곧바로 프로그램 언어로 작성되기 어렵고 중간에 분석과 설계의 단계를 거치면서 Translate되어야 한다.

가장 일반적으로 거치는 중간 산출물이 분석 모델과 설계서이다.  

  • 요구사항은 인터뷰자료 혹은 사용중인 각종 서류등이 될 수 있으며 텍스트, 엑셀, 유스케이스 등으로 정리될 수있다.
  • 분석모델은 각종 S/W 아키텍처관점에서 개념뷰나 Logical View, 유스케이스 상세 스팩혹은 분석 다이어그램의 형태로 존재한다.
  • 설계 모델은 클래스 다이어그램 시퀀스 다이어그램 혹은 텍스트 그림 파일 등으로  이루어진다.
  • 실행코드는 프로그램 언어이다.
왜 Translate가 발생하는가? 왜 모델을 다른 형태로 작성하는가?
왜 요구사항은 텍스트나 엑셀등으로 정리하는데 분석/설계는 다른 다이어그램을 사용하는가? 어차피 프로그램 언어로 번역되어야 한다면 요구사항을 세세하게 정리하여 바로 프로그램 언어로 바꾸면되는것 아닌가?
그이유는 내용의 상세함 정도에 따라 효과적인 기술방식이 다르기 때문이다. 예를들어 텍스트로 프로그램 언어 수준의 명확하고 상세함을 정리할 수 없다.  요구사항이 정제될 수록 복잡도는 증가한다. 전체를 바라보면서도 세부적인 내용을 확인하는 것이 어렵다 따라서 이것을위한 UML과 같은 기술방식을 사용하는 것이다.

분석/설계는 과정이지 목표가 아니다
요구사항을 잘 정제하고 궁극적으로 프로그램으로 기술하기 위해 분석과 설계를 한다. 하지만 이것은 반대로 보면,요구사항이 비록 텍스트이지만 요구 내용이 명확하고 어떻게 프로그램해야 하는지  정확히 알 수 있다면 분석/설계 단계가 필요 없다는 말이 될 수 있다.
이런 현상은 동일 도메인에서 반복적인 프로젝트가 수행될때 많이 나타난다. 이전 프로젝트의 소스 코드와 기타 산출물을 기반으로 프로젝트 하는경우 고객 인터뷰 과정에서 이전과 다른 점만을 체크하고 이것을 프로그램을 하는 경우가 있다. 
또다른 상황으로 시간이 극히 부족한 경우이다. 내가 아는 모 방송사 프로젝트에서 이런 현상이 나타났는데 정부에서 먼저 발표를 한것이다. 무조건 한달만에 시스템을 오픈해야 하는 절체절명의 상황이 된것이다. 이런 경우에는 모험을 할 수밖에 없다. 분석/설계는 생략될 수밖에 없고 개발자는 고객의 요구를 텍스트로만 정리하고 바로 프로그램에 들어갔다. 그런데 불행인지 다행인지 시스템은 오픈되었고 그 시스템은 몇년이 지난 지금도  유지보수되면서 사용되고 있다.
이렇게 분석/설계가 무시되는 현상은 분석/설계는 프로젝트의 최종산출물이 아니기 때문에 나타나는 것이다. 하지만 많은 소프트웨어 공학에서 너무나 당연한듯하게 분석과 설계를 이야기 하는 것은 그만큼 요구사항을 곧바로 프로그램으로 Translate하기 어렵고 위험이 크기 때문이다. 시간을 가지고 적절한 Refine과 Translate를 단계적으로 수행해야만 그래도 안정적인 프로그램이 가능하다.

모든 산출물의 기술 방식(모델링/프로그램 언어)은 사람에 의존적이다.
모든 프로그램으로 가는 중간 산출물은 나름의 기술방식 혹은 형태는 그 시스템에 관련한 사람에 의존적이다. 이점을 간과하면 않된다. 예를 들어 코볼 개발자를 모아놓고 자바로 프로그램할 수는 없다. PHP개발자를 모아놓고 C++ 프로그램을 요구할 수는 없다. 또는 웹프로그램을 만들어야 하는데 어셈블리어로 개발할 수는 없다.(가능은 하겠지만)
이것은 당연한듯한데 이런 오류를 분석/설계 산출물을 작성할 때 범하는 경우가 많다. 순서도만 아는 사람들을에게 프로젝트에서 UML로 분석/설계하라고 요구하는 것은 잘못이다.
프로젝트 팀원과 고객담당자들이 어느정도 준비된 모델링 방법으로 요구사항을 정제되고 변환되어가야 한다.

실행 코드로 부터 설계서를 리버스 하는 것은 잘못이다.
아름다운 전원 주택을 짓고 싶었다. 그냥 통나무로 되는데로 만들었다. 그리고 나서 실물을 보면서 청사진을 그린다면 맞는 것인가? 혹시 나중에 리모델링할때 사용하려고?
설계서는 그만한 깊이로 정제되어야 한다. 그것이 프로그램 언어가 아니다. 
이런 오류는 기술 컴포넌트를 설계하는데 많이 나타난다. 예를 들어 "JDBC 컴포넌트 사용"이라고만 설계서에 기술하면 프로그래머는 어떻게 해야 하는지 안다.즉 그곳에 JDBC 클래스들간의 시퀀스다이어그램을 그릴 필요가 없는 것이다.
분석과 설계는 항상 적절한 상세 수준을 가져야 한다.

요구사항은 프로그램을 하는 순간까지 추가/수정될 수밖에 없다.
프로젝트 초기에 수집된 개략적인 요구사항이 프로그램하는 순간까지 변하지 않을 것이라고 믿는 것은 어리석은 생각이다. 반드시 추가되고 변화될 수밖에 없다. 
다만 우리는 전체모델을 흔드는 추가나 변화가 발생하지 않도록 노력할 뿐이다.
각 단계의 산출물들은 요구사항을 상세화 하는 것이고 프로그램이 가장 상세화된 요구사항의 표현이다. 따라서 이전단계에서 확인되지 않은 요구사항은 다음단계의 산출물에 포함될것이며 이과정에서 고객과 프로젝트에서 인지하지 못했던 내용이 나타날 것이다.

사람(혹은 조직)이 바뀌면 Refine이 최소화 되어야 한다.
개발 각 단계별로 Refine이 발생하는 것은 당연하다 하지만 사람이나 조직이 변경되면 이전단계 산출물에서 다음 단계의 산출물을 생성해 내는것이 쉽지 않다.
예를 들어 컨설팅 업체가 요구사항분석까지만 하고 나머지는 개발 업체가 진행하는 프로젝이 있다면 개발 업체는 컨설팅 업체로 부터 잘 정제된 요구사항을 받아야 한다.
즉 고객의 추가적인도움없이 분석산출물을 만들 수 있는수준의 요구사항 산출물을 받아야 한다.

일반적으로 요구사항으로 부터 고객의 도움을 받아 분석 산출물을 만든다 여기서 고객의 도움이 필요한 이유는 요구사항이 정제되는 과정에서 고객의 판단이 필요하기 때문이다. 하지만 업체가 바뀌는 상황에서는 가능한 정제된 요구사항이 개발업체로 전달되어야하면 그 요구사항은 추가적인 정제과정없이 분석 모델로 변경될 수 있는 수준이어야 한다.

많은 개발 프로젝트의 설계자들이 분석과 설계를 요구사항에서 프로그램으로 가는 과정으로 이해하기 보다는 분석/설계 산출물 자체의 화려함이나 정교함을 추구하는 경향이 있다 분석/설계서를 작성하면서 빈번한 COPY&PASTE가 발생한다든지 개발 코드로 부터 리버스엔지니어링을 통해서 만들어지고 있다면 뭔가 잘못되고 있다는 것을 의미한다.(필자의견)
Posted by sjokim
,
성능을 고려한 소프트웨어 아키텍쳐 설계에서 Monitorability는 중요한 품질 요소중에 하나이다. 다음은  Monitable한 프로그램 설계 시 고려사항이다.

명확한  서비스 명을 쉽게 추적할 수 있도록 설계 한다.
모니터링에서 서비스 명을 가장 중요한 기본 항목이다. 모든 서비스는 클라이언트 요청을 받아 결과를 리턴한다. 이때 이 처리를 트랜잭션이라 한다. 서비스는 요청 파라미터와 로직에 따라 다른 결과을 리턴할 수 있는데 심지어 전혀 다른 로직을 수행할수도 있다. 예를 들어 계좌 이체를 하는데 동일 은행 이체가 될 수도 있고 타행이체가 될 수도있다 이것은 전적으로 타겟 계좌의 은행과 계좌번호에 의해 분기된다. 둘사이의 로직은 전혀 다를 것이며 이 둘의 트랜잭션이 동일한 서비스 명으로 모니터링 된다면 성능 분석이 원할이 될 수 없다.
웹 애플리케이션에서 서비스명을 URL이 될 수 있지만 이것은 전적으로 프레임웍에 따라 달라진다. 따라서 프로그램 구조를 설계할때 정확한 서비스 명이 어떤것이고 어떻게 추출되어야 하는지를 명확히 해야 한다.

트랜잭션 시작부분을 단순화 한다.
서비스는 일반적으로 네트웍으로 부터 요청을 받아 리턴한다. 그렇다고 모든 서비스의 시작이 네트웍 소켓 모듈에서 시작한다고 정의할 수 없다. 그중에는 의미없는 요청이 있을 수도 있으며, 실제 구체적인 서비스 구분이 되지 않았기 때문이다. 웹 애플리케이션에서 서비스 시간은 JavaEE스팩에 의해 이미 결정되어있다. 하지만 통신 중계데몬이나 중계 프로세스의 시작은 불분명한 경우가 더러있는데 아키텍처 설계단계에서 그 시작점(클래스/메소드)을 명확히 정의해야 한다.

트랜잭션에서 의미있는 스텝과 외부 연결부를 단순화 한다.
스텝이란 트랜잭션의 로직 흐름에서 의미있는 지점을 말한다. 특히 외부 연결부가 별로 없는 트랜잭션에서는 적절한 위치를 고려해 두어야 한다. 하지만 외부 트랜잭션 호출이나 DB Access같은 외부 서비스을 호출하는 연결부(Junction)이 많은 경우에는 별도 스텝을 고려할 필요가 없다, Junction이 트랜잭션 스텝으로서의 역할을 같이 수행할 것이다.
스텝이나 연결부를 단순화 하기 위해서는  다음 패턴을 고려할 수 있다.
  • Facade 패턴: 복잡한 서브 클래스들을 묶어 명확한 진입점을 정의한다. 모니터링시 Facade클래스를 프로파일링함으로서 해당 구간의 로직의 성능을 판별한다.
  • Proxy 패턴 : 특히 외부 시스템과 연결된(JUNCTION) 부분은 반드시 단순화되고 명확한 Proxy 클래스를 정의하고 이것만 모니터링하면 외부 시스템의 성능을 판별할 수있도록 한다.
연결부의 이름 정보를 쉽게 추적할 수 있도록 설계한다.
턱시도 클라이언트 모듈에서 턱시도 서비스를 호출하는 경우 서비스명이 프로파일정보에 나타나야 한다. 이렇듯 모든 연결부(JUNCION)에서는 외부 서비스 명을 쉽고 정확하게 추출할 수 있도록 설계해야 한다. 특히 해당 연결부의 응답시간과 이름이 같이 모니터링 될 수 있어야 한다.
예를 들어 비동기 통신을 하는데 그데이터 내부에 의미있는 외부 서비스 명이 숨어 있다면 효과적인 모니터링이 어렵다.

내부 자원에 대한 모니터링을 고려한다.
모니터링이 필요한 프로세스 내부 로직컬 자원을 정리하고 그것으로 부터 정보를 추출할 수 있는 액세드 모듈을 정의해 둔다. 그래야만 모니터링 툴에서 그것을 다른 정보와 통합모니터링할 수 있다.

프로파일링이 가능하도록 설계한다.
자바나 .NET은 프로파일링이 가능하도록 프로그램 언어 레벨에서 지원한다. 하지만 C/C++등 기타 언어로 프로그램 되어있는 경우에는 기본 상태에서 프로파일링이 불가능하다. 이런 경우에 중요 스텝과 연결부를 정리하고 그곳에서 프로파일정보를 수집할수 있는 방안을 마련해 둔다면 보다 효과적으로 성능 모니터링이 가능하게된다.

크리티컬 이벤트를 모니터링할 수 있도록 설계한다.
일반적인 프로파일링이나 모니터링 툴에서는 비즈니스를 감안한 문제를 모니터링 하기는 어렵다. 하지만 중요 비즈니스 로직적 오류시 그것을 운영담당자가 인지하는 것은 필요하며 이런경우 그 이벤트를 추적할 수 있는 메커니즘을 설계해 둘 필요가 잇다.
간단하게  이벤트라는 클래스를 두고 프로그램 로직에서 중요 크리티컬한 로직 에러가 발생하면 그 내용과 시간을 셋팅하고, 툴은 그 값의 변화를 모니터링 하다고 경보하도록 구현할 수 있을 것이다.

Monitorability는 얼마나 쉽게 성능과 오류를 모니터링 할 수 있도록 설계했느냐 이다. 모니터링이 쉽다는 것은 그만큼 전체 성능의 정확한 상태나 프로그램 오류를 정확히 파악할 수 있고 개선하기 쉬워진다. 예를 들어 트랜잭션 전체에서 Exception Handling을 한곳에서 하도록 설계한다면  이곳만 관찰하면 트랜잭션의 성공과 실패 혹은 기타 문제를 정확히 알 수 있다 

모니터링은 데이터를 추룰하는것만 아니고 이것을 비쥬얼화 하는 것까지를 포함하기 때문에 솔류션 의존적인 면이 있다. 즉 모니터링을 위해서는 단순한 로깅 이상의 프로그램 기술이 필요하기 때문이다. 그래서 Monitability를 고려할때는 모니터링 솔루션의 기능을 고려해야 한다. 그리고 그것을 최대한 활용하도록 설계해야 한다. 하지만 특정 모니터링 툴이 그 시스템에서 제거되더라도 아무런 문제가 없도록 설계되어야 한다.


 


Posted by sjokim
,
Messaging & Queuing 방식
  • 비동기 처리(Asynchronous Processing)
  • 데이터 전달 보증(Assured Data Delivery)

업무 A 와 업무 B 가 통신을 할때,중간에 큐(Queue)라는 매개체를 놓고 간접 통신하는 방식이다.

메세지(데이터) 송/수신의 타겟이 큐(Queue)이며,큐(Queue)는 임시로 안전하게 데이터를 저장하는 장소이다.

큐(Queue)에 수신되는 데이터는 기본적으로 FIFO(First In First Out)방식으로 처리되나 목적에 따라 우선 순위를 적용하여 처리할 수 있다.

애플리케이션은 타켓이 되는 큐의 이름만 알고 있으면 되고,큐의 실제 위치나,네트워크 상황,수신 시스템의 상황등에 관계 없이 가동된다.

Posted by sjokim
,
기본 지식
synchonized, wait(), notify(), notifyAll()을 알아야 한다. 
멀티 쓰레드 패턴은 synchonized와 wait(), notify(), notifyAll()을 적절히 사용하는 방법을 제시한다.
public synchronized void put(Object o) {
queue.addLast(o);
this.notifyAll();
}
public void put(Object o) {
synchronized(this){
          queue.addLast(o);
    this.notifyAll();
      }
}
임의의 객체에 대한 wait(), notify(), notifyAll()을 호출하기 위해서는 반드시 해당 객체에 대한 lock(synchronized)을 획득해야 한다.

Guarded Suspension 패턴
쓰레드를 기다리게 하여 인스턴스의 안정성을 지킨다. Guarded wait, spin lock이라고도 불리운다.

public class GuardedQueue {
private final LinkedList queue = new LinkedList();
public GuardedQueue() {
        }

public synchronized Object get() {
while (queue.size() <= 0) {
try {
wait();
} catch (InterruptedException e) {
}
}
return queue.removeFirst();
}

public synchronized void put(Object o) {
queue.addLast(o);
notifyAll();
}
}

자원을 제어하는 Pool에 활용할 수 있다 Ex)DB/Socket Connection, Thread Pool등등

Producer Consumer 패턴
Guarded Suspension과 다르게 버퍼를 가지고 있다.
채널의 개념을 가지고 있다.

public class Channel {
private final Object[] buffer;
private int tail;
private int head;
private int count;
public Channel(int count) {
buffer = new Object[count];
this.count = count;
}
public synchronized void put(Object cake) 
                throws InterruptedException {
while (count >= buffer.length) {
wait();
}
buffer[tail] = cake;
tail = (tail + 1) % buffer.length;
count++;
notify();
}
public synchronized Object take()  throws InterruptedException {
while (count <= 0) {
wait();
}
Object cake = buffer[head];
head = (head + 1) % buffer.length;
count--;
notify();
return cake;
}
}

Read-Write Lock 패턴 
객체에 대한 Read Lock과 Write Lock을 효과적으로 제어한다.
고비용의 리소스 제어에 활용이 가능하다.
   Read  Write
 Read  OK  충돌
 Write  충돌  충돌

public class ReadWriteLock {
private int readingReaders = 0;
private int waitingWriters = 0;
private int writingWriters = 0;
private boolean preferWriter = true; 
public synchronized void readLock() 
              throws InterruptedException {
while ( writingWriters > 0 || 
       (preferWriter && waitingWriters > 0)
     ) {
wait();
}
readingReaders++;
}
public synchronized void readUnlock() {
readingReaders--;
preferWriter = true;
notifyAll();
}
public synchronized void writeLock() throws InterruptedException {
waitingWriters++;
try {
while (readingReaders > 0 || writingWriters > 0) {
wait();
}
} finally {
waitingWriters--;
}
writingWriters++;
}
public synchronized void writeUnlock(){
writingWriters--;
preferWriter = false;
notifyAll();
}
}
abstract public class SafeAccess {
private final Object[] buffer;
private final ReadWriteLock lock = new ReadWriteLock();
public SafeAccess(int size) {
buffer = new Object[size];
}
final public Object read() throws InterruptedException {
lock.readLock();
try {
return doRead();
} finally {
lock.readUnlock();
}
}
final public void write(Object value) throws InterruptedException {
lock.writeLock();
try {
doWrite(value);
} finally {
lock.writeUnlock();
}
}
abstract protected Object doRead(); 
abstract protected void doWrite(Object value); 
}

'코딩과 개발' 카테고리의 다른 글

Java Launcher만들기  (0) 2012.09.19
The GNU C Library Reference Manual  (0) 2009.10.30
Eclipse RCP 따라하기  (1) 2009.10.26
Java ClassLoader 이해하기  (0) 2009.10.26
Posted by sjokim
,
정보전략계획(ISP)은 대상 기업이 수립한 중장기 경영계획의 경영전략을 토대로 사업전개에 필요한 총체적인 정보체계를 제시하고 향후 단위 또는 통합 정보체계의 개발을 계획 및 통제함으로써 경영요구에 의한 정보기술체계를 구축하는 것이다.

1.계획단계 준비
정보전략계획 과정을 효율적으로 진행하기 위해 프로젝트 팀을 구성, 프로젝트 계획수립 
2.기업 환경 분석
기업내부의 경영환경과 기업외부 경쟁환경을 분석
3.정보기술 분석
기업이 현재 보유한 기술환경 현황을 파악하며 현 정보관리 조직을 분석하고, 최근 정보기술에 대한 추세를 조사
4.현 업무 분석
내부환경분석 결과를 토대로 각 조직별 현 업무를 조사
5.기업모형 개선
업무기능에 대한 가치, 중요도, 실행수준을 평가 하고, 프로젝트 기간을 고려하여 개선이 필요한 업무기능을 선정.
6.정보시스템 구조설계
정보기술 방향과 개선 기업모형을 토대로 정보 시스템의 전략방향을 수립하고 현 기업모형과 개선 기업모형을 통합하여 업무 아키텍쳐를 작성.
7.정보시스템 구축계획수립
정보시스템의 목표와 추진방향을 수립하고 분석 영역에 대한 시스템별 우선순위를 검토하여 프로젝트 범위를 확정.
8.정보전략계획의 평가
정보전략계획 수립단계에서 작성한 산출물에 대한 품질과 계획된 진도를 점검하여 프로젝트의 성공적인 완수를 지원.

Posted by sjokim
,

#1 Develop an Overall Model
A initial project-wide activity with domain and development members under the guidance of an experienced object modeler in the role of Chief Architect.
A high-level walkthrough of the scope of the system and its context is performed. Detailed domain walkthroughs are then held for each area to be modeled. After each domain walkthrough, small teams are formed with a mix of domain and development staff who then compose their own models in support of that domain walk-through. The teams each present their models for peer review and discussion. One of the proposed models, or a merge of the models, is selected by consensus thus becoming the model for that domain area. A merge of the domain area model into an overall model is performed, adjusting model shape as required.The object model is then iteratively updated with content by the Design by Feature process #4.
#2 Build a Features List
An initial project-wide activity to identify all the features to support the requirements.
A team usually comprising just the Chief Programmers from process #1 is formed to functionally decompose the domain into Subject Areas, the business Activities within them and the Steps within each business Activity, thus forming the categorized features list. The top-level categorization for the features list comes from the partitioning of the domain by the domain experts in process #1.
#3 Plan By Feature
An initial project-wide activity to produce the development plan.
The project manager, development manager and the chief programmers plan the order that the features are to be implemented, based on feature dependencies, load across the development team and also on the complexity of the features to be implemented. The main tasks in this process are not a strict sequence. Like many planning activities they are considered together, with refinements made from one or more tasks and then considering the others again. A typical scenario is to consider the development sequence, then consider the assignment of business activities to chief programmers and in doing so, consider which of the key classes (only) are assigned to which developers (remember a chief programmer is also a developer). When this balance is achieved and the development sequence and assignment of business activities to chief programmers is essentially completed, then the class ownership is completed (beyond the key classes that were already considered for ownership).
#4 Design By Feature
A per-feature activity to produce the feature design package.
A number of features are scheduled for development by assigning them to a Chief Programmer. The Chief Programmer selects features for development from his "inbox" of assigned features. He may choose multiple features that happen to use the same classes (hence developers). Operationally, it is often the case that "sets" of features are scheduled for development at a time by the Chief Programmer. Such a set is called a Chief Programmer Work Package.The Chief Programmer then forms a Feature Team by identifying the owners of the classes (developers) likely to be involved in the development of the feature(s) he selects for development. This team then produces the Sequence Diagram(s) for the assigned feature(s). The Chief Programmer then refines the Object Model based on the content of the sequence diagram(s). The developers then write class and method prologues. A Design Inspection is held.
#5 Build By Feature
A per-feature activity to produce a completed client-valued function (feature).
Starting with the design package, the development class owners implement the items necessary for their class to support the design for this feature. The code developed is then unit tested and code inspected ? the order of which is determined by the Chief Programmer. After a successful code inspection, the code is promoted to the Build. 

Six Key Project Roles( FDD )


The Chief Architect(CA) is responsible for the overall design of the system.
The Chief Architect (CA) is responsible for the overall design of the system. Although the Chief Architect has the last say in FDD, he or she is responsible for running workshop design sessions where the team collaborates in the design of the system. This is a deeply technical role, requiring excellent technical and modeling skills, as well as good facilitation skills.
The  Chief Architect resolves disputes over design that the Chief Programmers cannot resolve themselves. For projects with both a complex problem domain and complicated technical architecture, the role may be split into domain architect and technical architect roles. The Chief Architect has the last say on all design issues. He or she steers the project through the technical obstacles confronting the project.

Posted by sjokim
,
가) 목적
   배포 웍플로우의 목표는 제품을 최종사용자에게 전달하는 것이다. 배포 웍플로우는 다음과 같은 다양한 범위에 걸친 액티비티를 포함한다.
  • 소프트웨어의 완성된 외부용 릴리즈를 생산 및 조립
  • 소프트웨어의 포장
  • 소프트웨어의 유통
  • 소프트웨어의 설치
  • 사용자와 또는 영업사원의 교육
  • 사용자 지원
  • 베타 테스트의 계획과 수행
  • 기존의 소프트웨어 혹은 데이터의 마이그레이션
  • 공식적인 인수(Formal Acceptance)
    배포는 도메인과 비즈니스에 대단히 밀접하게 관련되어 있다. 따라서 알맞은 배포 웍플로우를 구성하기 위해서는 Rational Unified Process를 커스터마이즈하는 것이 필요하다.

나) 작업자와 산출물
               
배포 웍플로우의 작업자와 산출물의 관계

   배포 웍플로우에 관련된 작업자는 다음과 같다.
  • 배포 관리자(Deployment Manager) : 배포를 계획하고 조직화한다.
  • 구현 담당자(Implementer) : 릴리즈할 소프트웨어를 생성한다.
  • Technical writer : 사용자 매뉴얼, 설치 지침서 등을 작성한다.
  • 교육 개발자(Course Developer) : 교육 자료를 작성한다.
   배포 웍플로우의 주요 산출물은 다음과 같다.
  • 배포 계획(Deployment Plan)
  • 사용자 매뉴얼
  • 교육 자료 : 슬라이드, 온라인 튜토리얼, 컴퓨터를 이용한 교육(CBT : Computer-Based Training)을 위한 자료

다) 웍플로우
   배포 웍플로우에서 일어나는 일반적인 액티비티에는 다음과 같은 것들이 있다.
  • 소프트웨어의 생산 : 소프트웨어의 완제품에는 다음과 같은 산출물들이 포함되어 있어야 한다.
    • 테스트 완료된 제품
    • 설치 프로그램
    • 사용자를 위한 문서
    • Configuration Data
    • 데이터 변환과 같은 마이그레이션 작업을 위한 별도 프로그램
  • 소프트웨어의 포장
  • 소프트웨어의 유통 : 상자에 포장해서 유통하는 것으로부터 인터넷을 통한 유통 등 다양한 형태를 취할 수 있다.
  • 소프트웨어의 설치
  • 마이그레이션(migration) : 마이그레이션은 다음과 같은 작업을 포함할 수 있다. 경우에 따라서는 마이그레이션을 위한 별도의 프로그램을 개발할 필요가 있다. 물론 이때에도 주 제품을 개발할 때와 같은 프로세스를 사용할 수 있다.
    • 기존의 시스템을 신 시스템으로 대체
    • 기존의 데이터를 새로운 형식으로 변환
  • 사용자 지원(Providing Assistance to the Users) : 사용자 지원은 다음과 같이 다양한 방법으로 이루어질 수 있다.
    • 공식적인 교육
    • 컴퓨터를 이용한 교육(Computer-Based Training)
    • 온라인 지원
    • 전화를 통한 지원
    • 인터넷을 통한 지원
    • - 부수적인 자료 : 팁, 어플리케이션 노트, 예제, 마법사…
라) 요약
  • 배포 웍플로우는 최종 사용자와 마케팅, 유통, 영업을 담당하는 지원 조직에 전달될 모든 산출물을 다룬다.
  • 배포 웍플로우는 개발된 제품과 해당 비즈니스의 유형에 크게 의존한다. 따라서 Rational Unified Process를 채택한 조직에서는 반드시 배포 웍플로우를 커스터마이즈해야 한다.
본 글의 모든 저작권은 Rational에 있습니다.
Posted by sjokim
,
가) 목적
   환경 웍플로우의 목표는 프로세스와 도구를 통해 개발조직을 지원하는 것이다. 환경 웍플로우에서의 지원 내역은 다음과 같다.
  • 도구 선정과 획득
  • Toolsmithing : 도구를 조직에 맞게 커스터마이즈하고 필요에 따라 추가로 도구를 개발하는 것을 말한다.
  • 프로세스 구성(Process Configuration)
  • 프로세스 개선(Process Improvement)
  • 교육(Training)
  • 프로세스를 지원하기 위한 기술 서비스 : IT(Information Technology) 하부구조, 사용자 계정 관리, 백업…

나) 작업자와 산출물

환경 웍플로우의 작업자와 산출물의 관계

    환경 웍플로우의 주 작업자는 프로세스 엔지니어(Process Engineer)이다. 프로세스 엔지니어는 소프트웨어 개발 프로세스에 대한 책임을 지는 작업자를 말한다. 프로세스 엔지니어는 프로젝트 시작 전에 개발 프로세스를 구성하고 프로젝트 기간동안 프로세스를 계속해서 개선한다.

   환경 웍플로우의 주 산출물은 개발 케이스(development case)이며 이는 개별적인 프로젝트를 위해 알맞게 고쳐진 프로세스를 말한다.

   환경 웍플로우에서 프로세스 엔지니어는 프로세스의 지침(guideline)을 만들기 위해 다음과 같은 작업자의 도움을 필요로 한다.
  • 비즈니스 모델 분석가(Business Model Analyst) : 비즈니스 모델링 지침
  • 시스템 분석가(System Analyst) : 유스 케이스 모델링 지침
  • 사용자 인터페이스 설계자(User-Interface Designer) : 사용자 인터페이스 지침
  • 아키텍트(Architect) : 설계 지침
  • Technical writer : 사용자 매뉴얼 양식 지침
   또한 다음과 같은 작업자가 도구 환경(tool environment)을 설정하는 데 참여한다.
  • Toolsmith : 단조롭고 오류 발생의 소지가 높은 작업을 자동화하기 위해, 특별한 요구사항을 해결하기 위해, 또는 도구들간의 통합을 지원하기 위해 필요한 도구를 개발한다.
  • 시스템 관리자(System Administrator) : 하드웨어와 소프트웨어 개발 환경을 유지하며 사용자 계정 관리, 백업과 같은 시스템 관리 업무를 수행한다.
   환경 웍플로우의 주요 산출물은 소프트웨어 개발 환경(software development environment)이며 이는 하드웨어, 소프트웨어, 네트웍 자원, 소프트웨어 도구, 개발과 테스트 액티비티를 위한 소프트웨어 지원으로 구성되어 있다.

다) 웍플로우
   환경 웍플로우는 일반적으로 다음과 같은 액티비티로 구성된다.
  • 프로세스의 구성(Configuring the Process)
  • 프로세스의 구현
  • 도구의 선정과 획득
    • 모델링을 위한 도구
    • 요구분석을 위한 도구
    • 코드 개발을 위한 도구(편집기, 컴파일러, 디버거)
    • 형상관리와 변경요구 관리를 위한 도구
    • 테스팅을 위한 도구
    • 계획(planning)과 추적(tracking)을 위한 도구
    • 문서화 준비를 위한 도구
  • Toolsmithing
  • 개발 지원
  • 교육(Training)

라) 요약
  • 환경 웍플로우의 목적은 도구, 프로세스, 방법론(method)의 측면에서 개발조직에게 적절한 지원을 하는 것이다.
  • Rational Unified Process에서 많은 액티비티와 단계들은 래쇼날사의 여러 개발 도구 사용을 통해 자동화된다. 따라서 소프트웨어 개발과정에서 오류가 발생하기 쉽고, 인적 자원을 많이 요구하는 단조로운 작업 대부분을 피할 수 있게 해 준다.
본 글의 모든 저작권은 Rational에 있습니다.
Posted by sjokim
,
가) 목적
   형상 및 변경 관리 웍플로우의 목적은 프로젝트 진행과정에서 변화하는 프로젝트 자산의 무결성을 추적 유지하는 것이다. 개발주기 동안에 많은 가치 있는 산출물들이 생성된다. 이러한 산출물을 생성하는 데에는 많은 노력이 투입되고 따라서 가치 있는 투자 대상으로 생각할 수 있다. 그렇기 때문에 이러한 산출물은 보호되어야 하며 쉽게 재사용될 수 있어야 한다. 또한 이러한 산출물은 반복적인 개발과정에서 계속해서 발전되고 계속해서 업그레이드된다. 산출물을 담당하는 작업자가 있지만 사람의 기억에 의존하여 이러한 소중한 자산을 관리하는 것은 위험한 일이다.

   프로젝트 팀원은 산출물을 식별하고 접근할 수 있어야 한다. 이를 통해 알맞은 버전의 산출물을 선택할 수 있고, 산출물의 현재상태와 변경 사유를 설명한 변경이력을 볼 수 있으며, 현재 누가 산출물에 대한 책임을 지고 있는가를 파악할 수 있다. 동시에 프로젝트 팀은 제품의 발전과정을 추적하고, 다양한 곳으로부터 발생하는 변경요구를 수집하여 관리하고, 일관성 있게 산출물에 변경요구를 구현할 수 있어야 한다. 또한, 프로젝트 관리 웍플로우를 지원하기 위해 중요한 프로젝트 산출물에 대한 상태정보를 제공해야 하고 주요 산출물의 변경에 관련된 평가기준을 수집해야 한다.

나) 작업자와 산출물
   형상 및 변경 관리 웍플로우의 주요 작업자는 다음과 같다.
  • 프로젝트 관리자(Project Manager) : 전체 소프트웨어 개발 계획(SDP)의 한 요소인 형상 관리 계획에 대한 책임이 있다.
  • 형상 관리자(Configuration Manager) : 개발과 통합을 위한 작업공간(Workspace)을 정의하고 할당하는 것을 포함한 형상관리 시스템 구축에 대한 책임을 진다(형상 관리 시스템을 구축할 때에는 개발하는 시스템의 구조를 적절히 반영해야 한다.). 또한 형상 관리자는 프로젝트 관리자를 위해 상태 및 평가 보고서를 작성한다..
다음과 같은 작업자도 형상 및 변경 관리 웍플로우에 관련되어 있다.
  • 구현 담당자(Implementer) : 자신이 맡은 변경 사항을 구현하기 위해 필요한 산출물과 작업공간을 이용한다.
  • 통합 담당자(Integrator) : 통합 작업공간에서 변경 사항을 수용하여 제품을 빌드한다.
  • 임의의 작업자(any worker) : 변경 요구를 제출할 수 있다.
  • 아키텍트 : 구현 관점(Implementation View)을 통해 개발하는 시스템의 구조에 대한 정보를 제공한다.

   변경 제어 위원회(Change Control Board:CCB)는 프로젝트 관리자, 아키텍트, 형상 관리자, 고객 대표, 마켓팅 담당자 등과 같은 기술 및 관리적으로 관심을 갖는 다양한 인원으로 구성된 그룹이다. CCB의 역할에는 변경의 영향 평가, 우선순위 결정, 변경 승인 등이 있다.

   형상 및 변경 관리의 주요 산출물에는 다음과 같은 것이 있다. 
  • 형상관리 계획(Configuration Management Plan : CM Plan) : 형상관리 계획은 버전 관리, 작업공간 관리, 변경요구 관리, 빌드, 릴리즈와 같은 프로젝트의 형상관리 작업에 사용할 정책 및 실무를 기술한다.
  • 변경 요구(Change Requests) : 변경 요구는 문서상의 결함, 요구사항의 변경, 소프트웨어의 버그 등 매우 다양한 형태를 갖는다. 모든 변경 요구에는 제출자와 원인에 대한 정보가 포함된다. 추후의 영향 분석(Impact Analysis)은 연관된 산출물, 비용, 스케쥴 등의 관점으로 변경의 영향을 첨부한다. 변경 요구는 작업이 진행됨에 따라 상태가 변경된다. 이력 정보(특히 변경제어 위원회(CCB)의 결정사항)는 변경 요구에 첨부되어 관리된다.

   또한 다음과 같은 산출물도 형상 및 변경 관리 웍플로우에 포함된다.
  • 구현 모델(Implementation Model) : 형상관리자가 형상관리 환경을 구축하기 위해 필요한 개발하는 제품에 대한 정보를 제공한다.
  • 평가기준 및 상태 보고서(Metrics and Status Reports) : 상태 평가 보고서는 CM과 CRM 지원 환경으로부터 정보를 추출하여 작성한다.
   다음 그림은 형상 및 변경 관리 웍플로우에서 작업자와 산출물의 관계를 보여준다.


다) 웍플로우
   형상 및 변경 관리에는 두개의 서로 밀접한 관계를 갖는 웍플로우가 있다. 하나는 형상관리 측면의 웍플로우이고 다른 하나는 변경 요구 관점의 웍플로우이다. 형상 관리 측면에서의 웍플로우는 다음과 같다.
  1. 프로젝트 관리자는 프로젝트에 사용될 구체적인 CM 실무를 정립하여 CM 계획을 작성한다.
  2. 소프트웨어 아키텍처 문서(구현 관점 : Implementation View)의 정보에 기반하여 형상 관리자는 제품 구조를 확립하고, 개발자와 통합자에게 필요한 다양한 작업공간을 생성하여 할당한다.
  3. 작업자는 자신의 작업 공간에 접근하여 산출물을 수정한다. 특히, 자신에게 할당된 변경 요구를 구현한다.
  4. 통합자는 통합 작업공간에서 변경을 수용하여 제품을 빌드한다. 빌드한 제품은 테스트 대상이 된다.
  5. 새로운 기준버전(baseline)이 반복의 끝에서 생성된다.
              형상관리 측면에서 바라본 형상 및 변경 관리 웍플로우

   변경 요구의 관점에서 본 웍플로우는 약간 달라진다.
  1. 변경 요구 입력
  2. 변경 요구가 산출물, 비용, 스케쥴에 미치는 영향을 분석한다.
  3. 변경제어 위원회(CCB)는 영향 분석, 변경된 우선순위를 검토하여 변경요구를 승인한다.
  4. 변경 요구를 구현을 위해 작업자에 할당한다.
  5. 변경 사항을 새로운 빌드에 통합하여 테스트한다.
  6. 변경 요구가 종료

라) 도구 지원
   모든 변경을 관리하는 것은 대단히 어렵다. 변경 요구를 정확히 관리하는 것의 어려움은 시간이 지날수록, 팀의 크기가 커질수록, 제품의 크기(즉, 산출물의 수)가 커질수록, 팀이 지리적으로 분산되어 있을수록, 일정이 촉박할수록 기하급수적으로 커진다. 이처럼 변경요구 관리는 오류가 발생하기 쉽고, 많은 인적자원이 소모되는 작업이므로 도구의 지원을 통한 자동화로서 많은 이익을 얻을 수 있다. 래쇼날은 형상 및 변경 관리 웍플로우를 다음의 도구를 통해 지원한다. 

  • ClearCase는 형상 관리를 지원한다.
  • ClearQuest는 변경 요구 관리와 프로젝트의 상태 평가를 지원한다.

마) 요약
  • 형상 및 변경 관리 웍플로우의 목적은 변경요구를 처리하면서 발전(evolve)하는 과정에서 프로젝트 산출물의 무결성을 유지하는 것이다.
  • 형상관리는 제품의 구조, 구성요소의 식별, 구성요소의 유효한 형상, 그리고 작업공간을 다룬다.
  • 변경요구 관리는 일관성 있게 산출물을 변경하는 프로세스를 포함한다.
  • 상태와 상태 평가에 도움이 되는 평가기준(metrics)은 형상과 변경 관리 정보로부터 추출할 수 있다.
  • ClearCase와 ClearQuest같은 도구는 형상 및 변경 관리 웍플로우의 단조로운 작업 대부분을 자동화한다.
본 글의 모든 저작권은 Rational에 있습니다.
Posted by sjokim
,
가) 목적
   테스트의 목표는 제품의 품질에 대해 평가하고 보고하는 것이다. 테스트 웍플로우는 다음과 같은 액티비티를 포함한다.
  • 객체와 컴포넌트간의 상호작용을 검증
  • 소프트웨어를 구성하는 모든 컴포넌트가 올바르게 통합되었는가 검증
  • 모든 요구사항이 올바르게 구현되었는가 검증
  • 소프트웨어가 배포되기 전에 결함을 인식하여 해결
나) 작업자와 산출물
   테스트 웍플로우의 주요 작업자는 다음과 같다.
  • 테스트 설계자(Test Designer) : 테스트를 계획하고, 설계하고, 구현하고, 테스트의 결과를 평가하는 일을 담당한다. 테스트 설계자는 테스트 계획과 테스트 모델을 생성하고, 테스트 절차를 구현하며, 테스트의 효율성, 결과 등을 평가한다.
  • 시스템 테스트 담당자(System Tester) : 시스템 테스트를 담당한다. 시스템 테스트 담당자는 테스트를 위한 준비와 테스트 수행, 테스트 수행의 평가, 오류 처리, 테스트 결과의 평가, 발견한 결함의 보고와 같은 일을 수행한다.
    이외에 다음과 같은 작업자가 존재한다.
  • 성능 테스트 담당자(Performance Tester) : 성능 테스트를 담당한다.
  • 통합 테스트 담당자(Integration Tester) : 통합 테스트를 담당한다.
  • 구현 담당자(Implementer) : 테스트를 위해 driver나 stub같은 특별한 코드가 필요할 때 이를 구현한다.
  • 설계자(Designer) : 테스트를 위해 driver나 stub같은 특별한 코드가 필요할 때 이를 설계한다.
테스트 웍플로우의 작업자와 산출물의 관계

   테스트 웍플로우의 주요 산출물에는 다음과 같은 것이 있다.
  • 테스트 계획(Test Plan) : 테스트의 목적에 대한 정보를 수록. 테스트 계획에는 사용할 전략과 테스트를 구현하고 수행하는 데 필요한 자원에 대한 정보를 기술한다.
  • 테스트 모델(Test Model) : 테스트 항목(Test Case)과 테스트 절차(Test Procedure), 테스트 스크립트(Test Script)로 구성된다.
  • 워크로드 모델(Workload Model) : 워크로드 모델은 성능평가를 위해 사용된다. 워크로드 모델에는 시스템의 실제 특성과 최종 사용자가 사용할 기능, 실제 작업부하 등을 시뮬레이션하는 성능 테스트에서 사용할 변수와 변수의 값에 대한 정보가 정의되어 있다.
  • 결함(Defects) : 실패한 테스트로부터 생성되고 하나의 변경요구로 등록된다.
   이외에도 다음과 같은 산출물들이 존재한다.
  • 테스트를 위한 패키지와 클래스
  • 테스트를 위한 서브시스템(Subsystem)과 컴포넌트(Component)

다) 웍플로우


   앞의 그림은 일반적인 테스트 웍플로우이다. 이는 다음과 같은 액티비티를 포함한다.
  • 테스트 계획(Plan Test) : 테스트 설계자는 테스트 요구사항, 필요자원 그리고 테스트 전략 등에 대한 상세한 요구 사항을 식별하여 이를 테스트 계획으로 문서화한다.
  • 테스트 설계(Design Test) : 테스트 설계자는 테스트 대상을 분석하여 테스트 모델과 성능 테스트를 위한 워크로드 모델을 개발한다. 
  • 테스트 구현(Implement Test) : 테스트 설계자는 테스트 모델에서 정의된 테스트 절차를 자동화 도구를 사용하여 테스트 스크립트로 레코딩하거나 수작업으로 프로그램화한다. 만약 테스트 수행을 위해 드라이버나 스텁(stub)과 특별한 코드가 필요한 경우 테스트 설계자는 설계자나 구현 담당자와의 공동 작업을 통해 이를 구현한다.
  • 테스트 수행(Execute Test) : 테스트 담당자는 테스트 대상에 대하여 테스트를 수행한다. 테스트의 수행에는 테스트 절차(수동 수행시)나 테스트 스크립트(자동 수행시)를 이용한다. 테스트가 완료되면 테스트담당자는 결과를 검토한다. 검토 과정을 통하여 테스트가 적절하게 실행되었는지를 파악한 후 결과를 문서화하고 결함이 발견되면 이를 등록한다.
  • 테스트 평가(Evaluate Test) : 테스트 설계자는  테스트 결과를 평가하여 정량화할 수 있는 측정값을 제공한다. 이를 통해 테스트 설계자는 테스트 대상의 품질과 테스트 프로세스의 효율성을 결정할 수 있다.

라) 도구 지원
   테스트는 개발주기동안 반복적으로 여러 번 수행된다. 테스트의 효과를 극대화하기 위해서는 테스트 자동화를 위한 도구를 사용하는 것이 반드시 필요하다. 특히 테스트에 수천대의 기계가 필요하고 또한 이들 장비의 동기화가 필요한 부하 테스트의 경우에는 테스트 자동화를 위한 도구가 절대적으로 필요하다.

   Rational사는 다음과 같이 테스트 자동화를 위한 다양한 도구를 제공한다.
  • RequisitePro : 테스트 요구사항을 추적하고 관리한다.
  • Purify : 신뢰성 테스트 도구로 런타임 에러를 찾아 준다.
  • Quantify : 소프트웨어 실행시의 타이밍 정보를 측정하고 이를 통해 병목지점을 찾아 준다.
  • PureCoverage : 테스트 수행시의 코드 커버리지 정보를 제공한다. 커버리지 정보는 테스트의 완전성(Completeness)을 평가할 때 유용하게 사용된다.
  • TeamTest : 소프트웨어의 기능 테스트를 위해 필요한 도구들을 제공한다.
  • PerformanceStudio : 시스템의 부하 테스트를 위해 필요한 도구들을 제공한다.
  • ClearQuest : 결함을 추적, 관리하기위해 사용한다. 또한 ClearQuest는 프로젝트 진척상황에 대한 다양한 보고서를 제공한다.
   이외에도 Rational Unified Process는 이러한 도구를 효과적으로 사용하는 방법에 대한 정보를 제공한다.

마) 요약
  • 제품의 품질은 제품을 구성하는 모든 요소의 품질과 생산된 최종 제품의 품질을 말한다.
  • 프로세스의 품질은 프로세스 자체의 구현과 프로세스, 표준, 지침에 대한 준수여부에 대한 측정으로 표현될 수 있다.
  • 품질은 모든 사람의 책임이다.
  • 테스트 웍플로우는 컴포넌트간의 상호작용, 통합, 기능, 성능의 관점에서 제품의 품질을 평가하는 데 주 목적이 있다.
본 글의 모든 저작권은 Rational에 있습니다.
Posted by sjokim
,