'게임개발공부/프로그래밍의 의견들'에 해당되는 글 5건

  1. 2014.07.30 사용자 스토리 & 유즈 케이스
  2. 2014.07.29 프로그래밍 설계상의 부채
  3. 2014.01.11 밸런싱 관련 의견.
  4. 2014.01.09 소프트웨어 개발 프로세스 모델.
  5. 2013.11.27 의견 1

  프로그래밍 설계적인 부분이지만 어찌보면 기획적인 부분과도 연계된다.

  예를 들자면 이런 것이다.


  게임을 개발하는데 아이템 인벤토리 기능을 만들게 되었다.

  그럼 다음과 같은 스토리를 생각해야 합니다.


  사용자 스토리


  1. 사용자가 인벤토리를 열었을때 정수 X 정수 만큼의 아이템아이콘이 뜬다.

  2. 사용자가 인벤토리에서 아이콘을 클릭해서 빈공간으로 옮겨놓으면 순서에 상관없이 옮겨진다.

  3. 사용자가 아이템아이콘을 클릭하여 다른 아이콘으로 옮겨넣으면 인벤토리 안에서 아이템의 순서가 변경된다.

  4. 사용자가 정렬 기능을 누르면 아이템의 이름순으로 아이템이 정렬 된다.

  5. 사용자가 인벤 바깥으로 아이템아이콘을 놓으면 아이템 버리기 창이 나온다.

  6. 이외 등등....


  말그대로 사용자의 입장에서 인벤토리를 어떻게 사용할가에 대한 스토리를 작성하면 되는 것이죠.


  이런 사용자 스토리를 정할때 권장되는 개념적인 조건들이 몇가지 있습니다.

  1. 독립적인 Independent

  2. 절충 가능한 Negotiable

  3. 가치 있는 Valuable

  4. 예상 가능한 Estimable

  5. 간단한 Small

  6. 테스트 가능한 Testable

  첫글자만 따보면


  INVEST -> 투자가 됩니다.


  유즈 케이스는 액터가 달성하고자 하는 목적을 설명하는 내용을 담는 것을 말합니다. 

  액터는 시스템 외부에 존재하는 엔티티로 사람이나 장치 또는 다른 소프트웨어와 같이 상호작용을 시작하는 단위를 의미합니다.


  1. 사용자가 인벤토리 버튼을 누른다.

  2. 사용자의 아이템데이터를 기반으로 인벤토리 UI에 아이템이 배열된 상태로 디스플레이 된다.

  3. 사용자가 아이콘을 조작할 수 있다.

  4. 아이콘의 조작에 따라서 몇가지 아이템데이터의 이동 삭제 분류 등이 일어난다.

  5. 인벤토리 시스템은 자신을 통해서 펼쳐지는 동작을 서버에 보고하여 플레이어 아이템의 변경을 통보한다.


  이렇게 간단하게 표현할수도 있고 UML 유즈 케이스 다이어 그램 처럼 시각적인 표현을 사용할수도 있습니다.

  유즈케이스 템플릿등으로 표현할수도 있습니다. 유즈캐케이스 템플릿은 이렇습니다.


  이름 : 인벤토리 시스템

  버전 : 1.0

  설명 : 인벤토리를 통해서 사용자가 자신의 아이템을 조작할수 있다.

  목표 : 아이템을 버리거나 아이템 교체 아이템 정렬 등의 기능을 수행한다.

  결과 소유자

  1. 유저들은 자신이 현재 소유하거나 획득한 아이템을 볼 수 있다.

  2. 쓸모없는 아이템을 버리거나 우선순위에 따라 재배열 할수 있다.

  기본 과정

  1. 인벤토리를 통해서 아이템아이콘들을 인벤토리에 담아서 보여준다.

  2. 아이템 아이콘을 클릭 & 드래그하여 인벤토리 내부에서 조작할수있다.

  확장

  a. 아이템 아이콘을 서로 교체하면 순서가 변경된다.

    a-1. 빈공간은 빈공간 아이템아이콘으로 판단하고 서로 교체된다.

    a-2. 아이템 아이콘끼리의 교환이 있을 수 있다.

  b. 아이템 아이콘을 인벤 토리 바깥에 드랍하면 아이템을 버리게 된다

    b-1. 아이템을 실제로 버리겠냐는 메세지를 출력한다.

    b-2. 아이템의 종류에 따라서 버릴수 없는 아이템이 존재하면 아이템을 버릴수 없다는 메세지를 출력한다.

  트리거 

    인벤토리 열기 키를 누른다.

  후속조건

    없음.

   

'게임개발공부 > 프로그래밍의 의견들' 카테고리의 다른 글

프로그래밍 설계상의 부채  (0) 2014.07.29
밸런싱 관련 의견.  (0) 2014.01.11
소프트웨어 개발 프로세스 모델.  (0) 2014.01.09
의견 1  (0) 2013.11.27
Posted by JJOREG

처음 코드를 작성하는 것은 빚을 지는 것과 같다. 그리고 코드를 개선하는 것은 빚을 갚는 활동이다. 

약간의 빚을 지고 있는 동안에는 빚을 갚기 위한 개발이 가속화된다.

진정한 위험은 채무가 상황되지 않을 때 발생한다. 올바르지 않는 코드에 시간을 쏟는 일은 빚에 이자를 더하는 것이다.

완성도 낮은 코드로 인해 전체 엔지니어링 조직은 빚더미에 쌓인다.


문제는 거의 언제나 항상 제품 출시일 때문에 발생한다. 

다시 돌아가서 문제를 해결할 시간이 없다는 말이 있듯이 출시를 위해서 당분간 필요한 코드를 이리저리 조금씩 붙여 나가다가 어늗덧 감당할수 없게 된다.


프로그램이 빚더미에 앉았을 때 다음과 같은 징후가 발견된다.


취약성 

시스템의 내부로직과 의존할 뿐 누가 봐도 관련 없어 보이는 부분의 상세 구현 내용이 노출되거나 예상치 못한 부작용이 발생할 때 취약점이 느러나며 그 결과 코드를 변경할 때는 연관성이 없어 보이는 코드에서 사이드 이펙트가 발생한다.


경직성

유연하지 못한 소프트웨어는 변화에 큰 걸림돌이다. 실제로 잘못된 설계로 인해 작은 코드 변경에도 많은 노력이 필요하며, 보통은 비싼 비용이나 많은 시간, 위험 부담이 높은 리팩토링 등이 발생하기 때문에 새로운 변경을 위한 노력은 한없이 늦춰진다.


부동성

유능한 엔지니어는 소프트웨어를 안정적이고 유지보수도 쉽게 만들기 위해서 코드를 재사용 할수 있는 부분들을 먼저 찾는다. 하지만 이러한 노력도 특정 상황에만 해당되서 그 외에 재사용 할 수 없는 코드를 만나면 그 노력은 무용지물이 되고 만다. 주변 코드와 딱 달라 붙어서 아주 밀접한 관계를 맺는 코드를 구현한다거나 아니면 특정 도메인에 한정된 로직을 하드코딩하는 경우가 여기에 속한다.


비 이동성

팀원 중 딱 한명의 엔지니어만이 시스템의 특정 부분을 감당 할 수 있는 경우를 일컬어 비 이동성이라고 한다. 어떤 업무를 담당하는 사람은 그 기능을 처음 개발한 개발자이거나 불행히도 그 코드를 좀더 개선하고자 시도했던 사람 일수도 있다. 수많은 대규모 프로젝트에서는 모든 엔지니어가 프로젝트 전체를 구체적으로 이해한다는 것은 불가능 하지만 그렇다고 다른 개발자가 쉽게 코드를 이해하지 못하거나 효과적으로 요구사항을 반영하지 못하도록 영역을 나누는 것도 프로젝트에 결코 도움이 되지 않는다.

'게임개발공부 > 프로그래밍의 의견들' 카테고리의 다른 글

사용자 스토리 & 유즈 케이스  (0) 2014.07.30
밸런싱 관련 의견.  (0) 2014.01.11
소프트웨어 개발 프로세스 모델.  (0) 2014.01.09
의견 1  (0) 2013.11.27
Posted by JJOREG

 

 

(스타크래프트2 의 밸런싱 공식이라고 한다.)

 

 

지금까지 너무 기획실패사례만 언급한것 같아서, 공유할만한 성공사례를 찾던중에 "밸런싱 성공사례" 를 찾을수 있었다. 일반적인 상식과는 다른 "역발상" 을 통해서 게임밸런스를 정상화 시킨 이례적인 성공사례인데 밸런싱작업 자체는 일반적인 사람들이 생각하는것과는 매우 다른 방식으로 이루어졌다.

 

 기획자가 밸런싱을 하는데 도통 밸런스가 잘 맞지 않았다. 기획자가 밸런싱경험도 없었고, STR,CON,DEX,INT,MEN 등등의 스탯을 연동하는 전투공식 경험도 전혀 없어서 애로사항이 많았다. 설상가상으로 기획자는 주로 PS3 나 PSP 같은 콘솔게임을 주로 좋아하지, 온라인게임에는 그다지 관심이 없었다. 게임의 밸런싱 상황은 크게 악화되어가고 있었다.

 

 게임내 밸런싱이 엉망으로 되어가는 상황에서 갑자기 운영툴과 컨텐츠작업을 하던 서버 프로그래머가, 자기가 밸런싱을 해볼수 있을것 같다면서 게임내 밸런싱을 자처했다. 원래는 멀티클라이언트를 띄워보면서 디버깅을 하다가 밸런싱 의견을 몇가지 제시하는 정도였는데, 예전부터 MMORPG 의 전투공식쪽에 경험이 약간 있어서 "밸런싱 할줄안다" 라고 말하는것이 아닌가?

 

 사실 처음에는 우려가 많았다. 서버 프로그래머가 밸런싱을 담당하는것은 정말로 어이없는 상황이였지만, 전에 경험도 약간 있었다고 하고, 말하는것을 보니 뭔가 믿는게 있어서 나서는것 같아서 서버 프로그래머에게 밸런싱을 맡기게 되었다.

 

 

 결과부터 말하지면 서버 프로그래머에게 밸런싱을 맡긴것은 최고의 선택이였고, 서버 프로그래머가 밸런싱을 담당한 이후로 게임내 밸런스는 매우 정교하고 안정적으로 변해갔다. 기획자에게 맡겼다면 정말로 힘들었을부분이 서버 프로그래머에게 맡겼기 때문에 정말로 쉽게 해결되었다.

 

 어떻게 서버 프로그래머가 기획자도 힘든 밸런싱을 완벽하게 할수 있었을까? 나는 이상하게 생각했지만 몇가지 비결이 있었다.

 


 

 

1. 운영팀과의 긴밀한 협력

 운영툴을 만드는 서버 프로그래머였기에 운영팀과 긴밀하게 협력하고 있었다. 운영툴에 원하는 데이터를 자동으로 리포팅하는 기능을 추가해서 데이터를 수집하였고, 운영팀과 소통할일이 많았기 때문에 밸런싱을 하는데 필요한 제반정보를 많이 가지고 있었다.

 

2. 기획자보다 더 풍부한 공식경험

 서버 컨텐츠 프로그래밍을 6년이상 해왔던 경험많은 서버 프로그래머였기 때문에 오히려 기획자보다 시스템기획에 대한 지식이 훨씬더 많았다. MMORPG 에서 사용되는 다양한 데미지 공식을 알고 있었고, 오히려 기획자보다 더 다양한 공식을 보여주었다.

 

Damage = Attack - Defense 같은 간단한 공식에서부터 Damage = Attack * (Attack * AttackFactor / Defense * DefenseAttribute ) * ( AttackerLevel / MonsterLevel ) * WeightRatio + BonusDamage + ClassAdjustment + BuffModifier + PassiveModifier; 와 같은 여러가지 복잡한 데미지 공식을 알고 있었다. 여러가지 MMORPG 게임을 개발하면서 얻은 다양하고 복잡한 공식들을 알고 있었는데, 이러한 지식은 웬만한 기획자를 능가하는 것이였다.

 

3. 로그파일분석 능력.

로그파일 분석능력이 기획자보다 뛰어났다. 밸런싱 작업은 방대한 통계분석이 수반되는데, 이러한 로그파일을 분석해서 이러한 통계작업을 해야하는데, 기획자중에서는 로그파일을 파싱해서 원하는 데이터를 추출하고, 가공해서 원하는 통계값을 뽑는것이 힘들다. 하지만 프로그래머에게는 매우 쉬운일이다.

 

 서버 프로그래머이니, 서버에서 로그파일을 가져와서 원하는 밸런싱 데이터모델을 만드는것은 정말로 쉬운일이였다. 만약에 로그파일에 원하는 정보가 없을경우 바로 서버코드에 추가하여 밸런싱에 반드시 필요한 정보를 로그파일을 남기도록 하였다.

 

이러한 작업은 서버 프로그래머가 아닌 기획자는 꿈도 못꾸는 작업들이다.

 

 


 

서버 프로그래머가 밸런싱을 하는 모습을 보고 가장 충격적이였던 부분은 기획자는 상상하기도 힘든 복잡한 문제를 프로그래머라는 능력을 사용해서 손쉽게 해결하는 그 과정이였다.

 

a. 워리어 1레벨부터 100레벨까지의 캐릭터가 STR,DEX,CON,INT,MEN 을 다양하게 찍었을때의 데미지 분포곡선이 어떻게 나타나는가?

 

b. "전설의 레이드몹" 을 66레벨 캐릭터가 공격한다고 할때, 40이상의 데미지를 줄수 있는 아이템은 어떤것들이 있는가?

 

c. 100레벨의 캐릭터가 1레벨 단검부터 100레벨 단검까지 다양한 아이템으로 공격할때 데미지가 어떻게 분포하는가?

 

d. 1레벨부터 100레벨까지의 캐릭터가, 1레벨부터 100레벨까지의 아이템을 차고, 1레벨부터 레이드몹까지 다양한 몬스터를 공격할때 나타나는 데미지 분포 패턴,

 

f. 특정 몬스터에게 60이상의 데미지를 가할수 있는 STR 과 아이템 조합 경우의 수.

 

이러한 문제들은 기획자가 풀기 위해서는 엄청난 노가다를 해야할것이다. 하지만 프로그래머는 쉽게 해낸다. 게임서버에 있는 캐릭터와 아이템테이블 시스템 소스코드를 뜯어내서 모듈화 시킨다음에, 테스트용 프로그램을 만들어, 수치 시뮬레이션을 돌려버린것이다.

 

기획자라면 2~3개월동안 노가다하면서 감으로 맞출 문제를 프로그래머는 간단하게 코딩 몇번으로 답을 찾아낸다. 정말로 놀라운 일이다.

 

 


 

서버 프로그래머가 밸런싱을 하는 모습은 이상하게 보일수도 있지만 결과적으로 말하자면 매우 성공적이였다. 기획자가 밸런싱을 할때는 밸런싱이 그야말로 "물넣고 소금넣고" 의 반복이였다. 어느 특정 스킬이 강하다고 생각되면 하향패치 하고, 유저들의 반응을 보고, 다시 조정하고 혹은 잘 사용되지 않는 스킬이 있으면 상향패치 하고, 유저들의 반응을 보고.

 

 밸런싱작업을 할때마다 유저들의 불만이 터져나오고, 적절한 밸런싱 모델이 찾을때까지 기획자는 이렇게 해보고, 저렇게 해보는 "감으로 숫자맞추기" 의 반복이였다. 손님에게 요리를 해주는데, 싱거우면 소금넣고, 짜면 물넣는 격이였다. 하지만 달리 방법이 없었다. 한방에 정확한 밸런싱모델이 안나오는데 무슨 방법이 있겠는가? 이리저리 쑤셔보는수밖에 없다.

 

 한가지 재미있는 점은 서버 프로그래머는 "게시판" 을 주된 밸런싱데이터로 생각하지 않았다. 유저들의 의견에 휘둘리다 보면 오히려 밸런싱이 쏠릴수 있다면서 자신만의 굳은 밸런싱 모델을 지켜나갔다. 이것이 기획자와 서버 프로그래머의 차이였다.

 

 

 한가지 안타까운점은 서버 프로그래머가 밸런싱자체는 양호한 수준으로 끌어 올렸지만, 이미 때는 늦었다. 유저들이 다 떠나간다음에 제대로된 밸런싱이 나왔지만 소 잃고 외양간 고친격이였다.

 

 애초에 처음부터 서버프로그래머가 밸런싱을 했다면, 이런일은 발생하지 않았을것이다. 지금 생각하면 아쉬움이 많이 남는다.

 

 서버 프로그래머가 밸런싱을 한다면 뭔가 이상하게 생각하는사람들이 많을것이다. 하지만 게임개발에 있어서 절대적인 법칙은 없다. 서버 프로그래머가 기획자보다 밸런싱을 더 잘할수 있다면 서버 프로그래머가 하는것이 더 좋을수 있다.

 

 실제로 나는 서버 프로그래머가 기획자보다 훨씬더 밸런싱을 잘하는것을 경험했고, 그것이 단순한 요행이 아니라, 프로그래머만이 가질수 있는 탄탄한 기반하에 이루어졌다는것을 알수 있었다.

 

 밸런싱은 기획자의 업무라고 굳게 믿는사람이 있다면 한번 생각을 바꾸는것이 어떨까? 비록 게임은 망했지만 내가 언급할수 있는 몇 안되는 "성공사례" 중 하나이다.

 


// 이분 블로그에 들어가보면 다양한 기획성공실패사례가 있는데... 내용을 보면 대체 어떤 정말 기획자복을 못받으신분 같다.

// 나도 한때는 기획자였고 지금 개발을 배우고 있지만 손님에게 요리를 해주는데, 싱거우면 소금넣고, 짜면 물넣는 격이였다. 도대체 어떤 기획자인데 일을 저런식으로 처리하는지 같이 일하면 암걸릴거 같은 기분이 들지도 모르겠다. 아니 기획 신입이라도 저런짓은 안한다. 내가 안했으니까.

// 나도 게임시작 컨셉을 정하기 위한 시장조사에 대해서는 회의적이다. 사람들이 캐쥬얼 게임많이하니 캐쥬얼게임 만들자 MMORPG시장이 현재 성장중이니 우리도 MMORPG를 만들자 라는 소리는 헛소리라고 생각한다. 일단 들어보고 재밌어보이면 찬성해야 한다고 생각하니까.

// 하지만 하나의 컨셉과 게임의 대한 세부내용이 나온상태에서는 절대적인 통계에 의지한 개발작업이 필요하다고 생각한다.

// 밸런스란 무엇인가? 게임시스템에 의해서 생성된 수치들을 통해서만 맞출수 있는거다. 여기에서 수치가 공격력 방어력 하나인가?

// 유저의 위치, 3차원 게임이라면 그에 맞는 거리. 시전시간 DPS 단순히 스킬의 컨셉에 의한 효과만이 아닌 스킬매커니즘에 따른 사용시의 용의함. 이런것들이 정해지고 이 또한 팩터로 맞춰져야 한다. 이런거다. 1분이 걸릴 전투에서 20초동안 주문을 외우고 한방에 상대의 MAXHP의 절반에 달하는 데미지를 주는 스킬이 있다고 치자. 1분이니 두번만 쓰면 무조건 그 유저는 이긴다. 하지만 여기에 캐스팅을 끊을수 있는 기술이 있다면? 혹은 입고있는 장비에 의해서 캐스팅시간이 길어지거나 짧아진다면? 버프에 의해서 공격력이나 방어력 혹은 캐릭터가 이동하면서 캐스팅을 할수 있다면? 스킬은 타겟팅인가 아니면 투사체를 확인하고 회피할수 있나? 등등의 수많은 변수고 단순한 데미지 공식만이 아닌 전체적인 내용적 조율이 필요하다.

// 위의 내용들은 컨트롤적인 내용이니 밸런스적으로 맞추기 힘들다고? 아니다. 움직이는 거리 스킬의 상성등도 결국에는 수치다.

// 게임은 결국 어떠한 값을 저장하고 그 저장된 값을 조작하여 동작하는 것이다.

// 밸런스는 그 값의 통계를 통해서 맞추는거다. 그 이상이하도 아니다. 절묘한 밸런스? 넘사벽의 컨트롤? 수치화 할 수 없다 예상할 수 없다? 한마디로 이야기하면 그렇지 않다.

// 즉 밸런스의 실패란 수치를 오판하는데서 오는 것이다(밸런스를 위한 항목이 모두 준비되어 있다면 언제든 밸런스는 조정이 가능하다 준비해 주는건 기획자와 프로그래머가 항상 협의해야 한다)

 

결론을 말하자면 모든 영향요소는 밸런스에 고려되어야 한다.

그것에 대해서 오판할 수 있다. 

 

예를 들자면 이런거다 인간의 반사신경으로 80% 정도의 적중률을 가질것으로 보이는 논타겟팅 스킬이라 공격력을 일반적인 데미지의 20% 가량 상승시켰다.

하지만 예상보다 스킬은 맞추기 쉬웠고 프로들의 경기에서는 95%가량의 적중률을 보였다.

일반인들도 90%는 적중시킨다.

어라 생각한것보다 데미지 팩터가 10%의 오차가 생겼다.

이에 의해서 약간의 데미지를 하향시켜서 밸런스를 맞춘다.

혹은 속력을 좀 늦춰서 더 피하기 쉽게 만든다. 공격력을 하향시킬까? 아니면 투사체의 속력을 하향시킬까는 혹은 판정을 좀 좁힐까? 이 모든게 밸런싱 담당자의 몫이다.

인간의 반사신경이나 투사체의 속력 유저의 실력 등의 통계가 밸런스에 영향을 미치는 것이다.

하지만 이미고려된 항목이라면 그때는 팩터만 변경해주면 된다. 오판한 수치에 대한 수정이 밸런스를 맞추는 것이다.

 

하지만 애초에 고려되지 않은 사항이라면? 투사체의 속력이나 유저의 실력 일반적인 통계가 항목에 고려되지 않았다면?

거기서부터 이미 밸런스시 고려해야할 항목에서부터 모든 요소(사거리, 데미지 공식, 방어, 유저의 컨트롤(반사신경, 판단력), 시야, 상대와의 조합등등등 고려될 수 있는 모든 요소!)를 감안하지 않은 시점에서부터 이미 기획자의 실책이라고 볼 수 있다.

Posted by JJOREG

프로세스 모형

개요

장점

단점

Waterfall Model

- 순차적 모델(Sequential Model) 또는 고전적 생명주기 라고도

계획, 분석, 설계, 코딩(구현), 시험, 유지보수의 순으로 관리되는 모형으로 단계의 완벽한 작업 종류를 전제로 하는 모델임

가장 널리 많이 사용

단계별로 정형화된 접근방식

체계적인 문서화, 단계별 산출물 체크를 통한 프로젝트 진행의 명확화

기술적인 위험이 없고 유사한 프로젝트를 경험이 있어서 비교적 정확한 비용 예측과

일정계획 하에 프로젝트를 추진 경우 적합

문서 중심의 개발 접근 방식으로 인한 개발자의 문서화에 대한 부담과 가중

고객의 요구사항과 불일치 가능성

피드백 과정이 없어 변경이 어려움

완벽한 분석이 요구됨

대기 상태 발생으로 인한 일정 지연 가능성

Evolutionary Development Model

반복적 개발 모델의 형태

시스템이 가지는 여러 구성요소의 핵심부분을 개발한 구성요소를 개선 발전시켜 나가는 방법

- 고객의 즉각적인 요구를 반영

- 프로세스가 보이지 않는다.

- 계속적인 변경에 의하여 구조가 훼손되어 시스템이 종종 제대로 구조화되지 못한다.

Prototyping Model

- 반복적인 시제품 개발로 사용자 요구사항 또는 기술적 타당성을 확인 본격적으로 개발하는 모델

결과가 가시적이고 이해가 쉬워서 관리가 용이

사용자의 요구사항을 빠르게 수용가능

사용자의 요구사항을 확인 가능

정적인 요구명세 문서화 방법대신 실질적으로 수행되는 물리적 모형 확인

최종 소프트웨어 제품을 완성하기 전에 시제품을 완제품으로 발전하게 가능성

사용자의 과도한 요구

시제품 폐기의 비경제성

반복적인 시제품 개발의 종료 시기 문제

Spiral Model

진화적인 소프트웨어 프로세스 모델로써, 시제품화 모델의 반복적인 개발이라는 특성과 폭포수 모델의 체계적인 관점지원 이라는 특성을 결합

대규모 시스템 개발에 대한 효율적인 접근으로 위험 분석 추가함

기존의 소프트웨어 생명주기 모형의 장점들의 선택적 수용을 허용

위험관리(Risk Management) 위주의 접근 방식

대규모 시스템 구축에 적합

모델 자체가 복잡하여 프로젝트 관리가 어렵고 고객을 설득시키기 어렵다

많은 고객을 상대로 하는 상업용 제품에 적용하기 힘들다.

상대적으로 새로운 접근 방법이며 많이 사용되지 않아 충분한 검증을 거치지 못함

많은 위험 평가 전문가 필요

주된 위험이 발견되지 않을 문제 발생

 

Incremental Development Model

폭포수 모델에 반복적 수행 개념을 결합

- 전반적인 프로젝트 요구사항을 리스크에 따라 우선순위를 정하여증분(increments)’으로 나누고, 이를 점진적으로 개발하여 순차적으로 기능의 일부를 릴리즈하는 개발 수명주기(life cycle) 모델

여러 개의 팀이 나누어 개발 하고자 유용

- 고객 서비스의 신속한 인도

- 사용자가 시스템 개발에 참여

- 완전한 시스템 명세서가 최종 산출물이 지정될 때까지 존재하지 않아 완전한 시스템 명세서가 시스템 개발 계약의 일부분인 경우 적용 불가능

Rapid Application Development Model

짧은 개발주기 동안 소프트웨어를 개발하기 위한 모델

불필요한 활동 작업을 제거하여 프로세스를 간결화

- 짧은 기간 동안에 개발 가능

- 테스트 기간이 짧음

- 검증된 컴포넌트의 재사용

- 4세대 언어 또는 비주얼 사용

- 대규모 프로젝트의 경우 충분한 인적자원 경영진의 지원요구

- 긴급한 활동을 위해 간부급의 위원회 조직 필요

- 기술적 위험이 크고 고성능이 요구되는 시스템에 부적합

V-Model

- 일반 폭포수 모델의 사례로 시험 계획이 시스템 명세서와 설계로부터 유도되어야 한다는 것을 보여주는 모델

- 실행 작업과 작업결과의 검증에 초점을 프로세스 모델

- 단계적 검증 절차를 갖기 때문에 Safety-critical System 적용 가능

- 테스트 단계의 오류 발견 요구명세, 분석, 설계, 구현으로 되돌아 있는 추적성 (Traceability) 보장

- 시험 계획 수립에 시간과 비용이 많이 소모됨

 

 

 

'게임개발공부 > 프로그래밍의 의견들' 카테고리의 다른 글

사용자 스토리 & 유즈 케이스  (0) 2014.07.30
프로그래밍 설계상의 부채  (0) 2014.07.29
밸런싱 관련 의견.  (0) 2014.01.11
의견 1  (0) 2013.11.27
Posted by JJOREG

1.   깨진 창문을 내버려 두지 말라.

=> 눈에 뜨일 때마다 나쁜 설계잘못된 결정좋지 않은 코드를 고쳐라

 

2.   큰 그림을 기억하라.

    => 주변에 무슨 일이 일어나는지 점검하는 일을 잊어버릴 정도로 세부사항에 빠지지 말라.

 

3.    DRY( Don’t Repeat Yourself) – 반복하지 마라.

=> 어떤 지식 한 조각도 하나의 시스템 안에서는 모호하지 않고권위 있고단 하나뿐인 표현을 가져야 한

   다.

 

4.    재사용하기 쉽게 만들라.

    => 재사용하기 쉽다면사람들이 재사용할 것이다재사용을 촉진하는 환경을 만들라.

 

5.     관련 없는 것들 간에 서로 영향이 없도록 하라.

    => 컴포넌트를 자족적이고독립적이며단 하나의 잘 정의된 목적만 갖도록 설계하라.

 

6.     목표물을 찾기 위해 예광탄을 써라.

    => 예광탄은 이것저것을 시도해보고 그것들이 목표와 얼마나 가까운 데 떨어지는지 보는 방법으로 목표를 정

       확히 맞추게 해준다.

 

7.     프로토타입을 통해 학습하라.

    => 프로토타이핑은 배움의 경험이다프로토타이핑의 가치는 만들어낸 코드에 있지 않고여러분이 배운 교

       훈에 있다.

 

8.     명령어 셸의 힘을 사용하라.

    => 그래픽 사용자 인터페이스로는 할 수 없는 일에 셸을 이용하라.

 

9.     가정하지 마라증명하라.

    => 진짜 데이터와 경계 조건이 있는 실제 환경에서 여러분이 내렸던 가정들을 증명하라.

 

10.   계약에 따른 설계를 하라.

    => 코드가 실제로 하기로 한 것을 문서화하고 검증하기 위해 계약을 사용하라.

 

11.   일찍 작동을 멈추게 하라.

    => 보통은 죽은 프로그램이 절름발이 프로그램보다 해를 훨씬 덜 끼친다.

 

12.   단정문을 사용해서 불가능한 상황을 예방하라.

    => 단정은 여러분이 세운 가정을 검증해준다확실한 것이 없는 세상에서 여러분이 코드를 보호하려면 단정

       문을 사용하라.

 

13.   시작한 것은 끝내라.

    => 가능하다면리소스를 할당한 루틴이나 객체가 해제도 책임져야 한다.

 

14.   모듈간의 결합도를 최소화하라.

    => 디미터 법칙을 적용하고 부끄럼 타는 코드를 작성해서 결합이 생기는 일을 피하라. 코드에는 추상화를,

       메타데이터에는 세부 내용을 프로그램은 최대한 일반화해서 만들고세부사항들은 가능하면 컴파일된 코

       드 기반 바깥으로 빼라.

 

16.   서비스를 사용해서 설계하라.

    => 서비스곧 잘 정의되고 일관성 있는 인터페이스를 통해 의사소통하는 독립적이고 동시성 있는 객체들의

       관점에서 설계하라.

 

17.   모델에서 뷰를 분리하라.

    => 애플리케이션을 모델과 뷰의 관점으로 설계해서 적은 비용만 들이고도 유연함을 얻어내라.

 

18.   우연에 맡기는 프로그래밍을 하지 마라.

    => 정말 믿을 만한 것만 믿어야 한다우발적인 복잡함을 조심하고우연한 행운을 목적의식을 가지고 만든

       계획과 착각하지 말라.

 

19.   일찍 리팩터링하고자주 리팩터링 하라.

    => 정원의 잡초를 뽑고 식물 배치를 조정하는 것과 똑같이코드도 필요할 때면 언제라도 다시 작성하고 다

       시 작업하고 다시 아키텍처를 만들라문제의 근원을 해결하라.

 

20.   소프트웨어를 테스트하라그렇지 않으면 사용자가 테스트하게 될 것이다.

    => 가차 없이 테스트하라사용자가 여러분을 위해 버그를 찾게 만들지 말라.

 

21.   요구사항을 수집하지 말고 채굴하라.

    => 요구사항이 지면에 놓여져 있는 경우는 퍽 드물다보통은 가정과 오해정치의 지층들 속 깊이 묻혀 있

       다.

 

22.   사용자처럼 생각하기 위해 사용자와 함께 일하라.

    => 시스템이 정말로 어떻게 사용될지 통찰력을 얻을 수 있는 가장 좋은 방법이다.

 

23.   구체적인 것보다 추상적이 것이 더 오래간다.

    => 구현 말고 추상에 투자하라추상은 서로 다른 구현이나 새로운 기술의 출현 때문에 빗발치듯 생기는 변

       화를 견뎌내고 살아남을 수 있다.

 

24.   일찍 테스트하고자주 테스트하라자동으로 테스트 하라.

    => 매번 빌드할 때마다 실행되는 테스트가 책꽂이의 테스트 계획보다 훨씬 효과적이다.

 

25.   모든 테스트가 통과하기 전엔 코딩이 다 된 게 아니다.

    => 뭐 더 할 말 있나?

 

26.   파괴자를 써서 테스트를 테스트하라.

    => 코드의 별도 복사본을 만들고그 복사본에 고의로 버그를 넣은 다음 테스트가 잡아내는 지 검증하라.

 

27.   한국어도 하나의 프로그래밍 언어인 것처럼 다루라.

    => 코드를 작성하는 것처럼 문서도 작성하라. DRY 원칙을 존중하고메타데이터를 사용하고, MVC 모델을 쓰

       고자동 생성을 이용하고 등등.

 

28.   문서가 애초부터 전체의 일부가 되게 하고나중에 집어 넣으려고 하지 말라.

    => 코드와 떨어져서 만든 문서가 정확하거나 최신 정보를 반영하기는 더 힘들다.

 

29.   사용자의 기대를 부드럽게 넘어서라.

    => 사용자들이 무엇을 기대하는 이해한 다음그것보다 약간 더 좋은 것을 제공하라.

 

30.   자신의 작품에 서명하라.

    => 옛날 장인들은 자신의 작업 결과물에 서명하는 일을 자랑스럽게 여겼다여러분도 마찬가지여야 한다.

Posted by JJOREG
이전버튼 1 이전버튼