• 개요

    스테이트차트 다이어그램은 "하나의 객체를 대상으로 생존기간 동안 가질 수 있는 객체 상태의 변화를 분석한 다이어그램"입니다.

     

    스테이트차트 다이어그램은 객체 상태와 함께 객체 상태 변화를 유발하는 이벤트와 동작 (Action/Activity)도 함께 정의합니다. 이러한 요소가 정의된 스테이트차트 다이어그램을 통해 "객체 O는 이벤트 E에 의해 상태 S로 변화하고 그 상태에서 A라는 행위를 한다" 라는 식의 분석을 수행할 수 있습니다.

  • 목적

    스테이트차트 다이어그램을 작성하는 목적과 용도는 다음과 같습니다.

    • 객체의 상태변화를 상세히 분석합니다.

      스테이트차트 다이어그램은 객체 하나를 대상으로 생성-소멸기간중에 다양하게 가질 수 있는 상태(State)를 분석하는 목적으로 작성됩니다. 정보시스템에서 많은 객체는 생성되어 소멸될 때까지 간단한 상태를 가지지만 일부는 매우 복잡한 상태로 변화하면서 존재합니다. 스테이트차트 다이어그램은 이렇게 객체의 동적 상태변화를 정의하고 분석하는 목적으로 사용합니다.

    • event에 의한 객체의 반응을 분석합니다.

      스테이트차트 다이어그램은 객체 상태 변화를 유발하는 이벤트를 정의하고 분석하는 목적으로도 작성됩니다. 객체의 상태는 그냥 변하는 것이 아니라 이벤트에 의해 변화합니다. 이러한 객체의 상태변화를 유발하는 이벤트를 식별하고 상세히 정의합니다.

    • 객체의 속성이나 오퍼레이션을 검증합니다.

      스테이트차트 다이어그램은 객체가 가지는 속성과 오퍼레이션을 검증하는 목적으로 작성되기도 합니다. 스테이트차트 다이어그램에서 분석대상인 객체의 상태는 속성의 값으로 정의되고, 이벤트는 대부분 객체의 오퍼레이션으로 정의됩니다. 따라서 클래스 다이어그램 등에서 정의된 클래스의 속성과 오퍼레이션의 적합성을 검증할 수 있습니다.

       

  • 구성

    스테이트차트 다이어그램의 구성요소는 다음과 같습니다.



    • 시작상태(Initial state), 종료상태(Final State)
       

      표기

      의미

      시작 상태

      시각점은 속이 꽉 채워진 원으로 표기

      시작 상태는 객체의 상태변화가 시작되는 곳을 의미합니다. 보통 객체의 생성시점이 시작상태가 됩니다.

      종료 상태


      속이 채워진 원에 바깥의 또 다른 원이 둘러싸고 있는 모양으로 표기

      종료 상태는 객체 상태변화가 종료하는 곳을 의미합니다.

      보통 객체의 소멸시점이 종료상태가 됩니다.

       

    • 상태(State)
      • 상태의 의미
        • 상태란 객체가 가질 수 있는 조건이나 상황입니다.
        • 생명주기 동안 객체의 상태는 변화하며, 상태는 객체의 특정한 속성의 값으로 표현됩니다.
        • 예) 자동차 객체의 상태 : "주차" , "주행" , "정차" , "수리"
      • 표기법

기본형 표기

상세형 표기

- 모서리 둥근 사각형으로 표기

- 상태 명은 심볼 내에 표기

- 수평으로 구분된 모서리 둥근 사각형으로 표기

- 상태 명은 위쪽부분에, 동작과 그 외의 부분은 아랫 부분에 표기

 
 

 

  • 진입 동작(Entry Action)

    상태에 들어올 때 수행되는 동작을 정의합니다.

  • 탈출 동작(Exit Action)

    상태에 나갈 때 수행되는 동작을 표기합니다.

  • 내부전이(Internal Transition)

    현재 상태에서 처리할 수 있는 이벤트가 발생할 경우 상태를 떠나지 않고 해당 사건을 처리하는 경우입니다.

  • 활동(Activity/Action)

    현 상태에서 수행할 동작을 표현합니다.

  • 지연 사건 (Deferred event)

    현 상태를 빠져 나갈 때 발생한 것처럼 그 효과를 지연시킨 이벤트입니다. 위 예에서 Tracking 상태에서 selfTest 이벤트가 발생하면 이것을 메시지 큐에 저장 했다가, Tracking 상태에서 벗어나는 순간 이벤트가 활성화 됩니다.

     

  • 전이(Transition)

    전이란 하나의 상태에서 다른 상태로 변화하는 것이며 상태 간의 관계를 의미합니다.

    • 표기법
      • 전이는 상태와 상태 사이에 화살표가 달린 실선으로 표기합니다.
      • 선 위에는 촉발사건(Event Trigger), 조건(Condition), 동작(Action)이 차례로 표기됩니다.
      • 위 세 가지 표기내용은 각각 생략될 수 있습니다.

         

         

         

    • 원래 상태(Source State)

      전이가 실행되기 전의 객체 상태

    • 촉발 사건(Event Trigger)

      전이를 촉발시키는 사건

    • 전이 조건(Condition)

      전이 촉발 시에 검토되는 Boolean 식 (참일 경우에만 전이가 수행됨)

    • 동작(Action)

      전이 도중 실행되는 행위 또는 오퍼레이션

    • 목표 상태(Target State)

      전이가 완료된 후의 객체 상태

     

  • 주의사항
    • 객체 하나에 대한 상태 변화를 표현합니다.

      스테이트차트 다이어그램의 작성 중에 상태에 집중하다 보면 객체라는 한계를 벗어나는 경우가 종종 있습니다. 객체 하나의 상태변화와 여기에 관계된 이벤트들을 모델링하다는 본질에서 벗어나면 안됩니다.

    • 블랙홀 상태(State)를 주의합니다.

      스테이트차트 다이어그램에 표현된 상태는 들어오는 전이와 나가는 전이가 모두 정의되어야 합니다. 만약 들어오는 전이만 있고, 나가는 전이가 없을 경우, 그 상태는 블랙홀이 됩니다. 이런 실수를 하면 객체가 종료 상태에 이르지 못하고 무한 루프를 수행하는 오류를 범하게 됩니다. 항상 모델을 끝내면 이런 실수가 있지 않나 검증해야 합니다.

    • 클래스 다이어그램 및 시퀀스 다이어그램과의 일관성에 유의합니다.

      스테이트차트 다이어그램을 작성 완료한 후 새롭게 정의된 오퍼레이션과 속성은 클래스 다이어그램와 시퀀스 다이어그램에 반영되어 일관성을 유지해야 합니다. 그런 작업을 하지 않을 경우, 모델들을 전체적으로 신뢰할 수 없게 됩니다.

'소프트웨어공학 > UML이야기' 카테고리의 다른 글

6. Deployment Diagram  (0) 2009.05.26
3. B Usecase Discription  (0) 2009.05.26
5. Sequence Diagram  (1) 2009.02.06
4. Class Diagram  (0) 2008.10.26
3. A. Usecase Diagram  (0) 2008.06.23
Posted by 서오석
,
  1. 개요

    디플로이먼트 다이어그램은 "시스템을 구성하는HW 자원 간의 연결 관계를 표현하고, HW 자원에 대한SW 컴포넌트의 배치 상태를 표현한 다이어그램." 입니다.

    그리고 디플로이먼트 다이어그램은 시스템의 설계 단계의 마지막에 작성합니다. 즉, 모든 설계가 거의 마무리되어 SW 컴포넌트가 정의되고, 시스템의 HW 사양도 확정된 후 디플로이먼트 다이어그램이 작성될 수 있습니다. (항상 그런 것은 아니고 상황에 따라 변경이 됩니다.)

     

  2. 목적

    디플로이언트 다이어그램 작성하는 목적은 다음과 같습니다.

    1. SW시스템이 배치, 실행될 HW자원들을 정의합니다.

      디플로이먼트 다이어그램은 다른 UML 다이어그램들과는 달리 HW자원들을 명시적으로 정의하는 용도로 작성됩니다. 그러나 이렇게 HW를 정의하는 목적이 HW 자체의 사양을 정의하고 설명하기 위한 것은 아닙니다. 오히려 SW 시스템이 탑재되어 동작하는 매개체로서, HW자원을 정의한다라는 관점에서 정의합니다.

       

    2. SW 컴포넌트가 어떤 HW 자원에 탑재되어 실행될지 정의합니다.

      디플로이먼트 다이어그램은 실행모듈(컴포넌트)을 분산된 HW자원에 적절히 배치하여 원하는 성능과 효율을 낼지를 정의하는 목적으로 작성됩니다. 따라서 디플로이먼트 다이어그램에는 SW자원과 HW자원이 동시에 표현됩니다.

       

    3. HW 자원의 물리적인 구성을 정의합니다.

      SW컴포넌트가 탑재된 HW자원들은 적절한 성능을 내기 위해 물리적인 연결을 가지고 있어야 합니다. 디플로이먼트 다이어그램은 어떤 HW자원간에 연결이 있는지, 그 연결은 어떠한 성능을 가진 연결인지를 정의합니다.

       

  3. 구성요소

    디플로이먼트 다이어그램의 구성요소는 다음과 같습니다.

    1. Things 혹은 심볼 : 노드(Node), 컴포넌트(Component)
    2. Relationships : Connection, Dependency

     

    1. 노드

      노드는 직육면체로 표기하며, 노드 명은 심볼 내에 표기합니다.

      노드는 SW 컴포넌트가 탑재되어 처리되는데 관련된 HW 자원을 의미합니다. 주로 연산능력(computing power)이 있는 HW 즉, SW를 탑재하여 운용할 수 있는 능력을 가진 하드웨어가 표현됩니다. 그러나 표현할 수 있는 HW 자원의 종류가 제한된 것은 아니고, 아래와 같은 다양한 장비들이 노드로 정의될 수 있습니다.

      [HW 장비들의 예]

      Sensor, Printers ,Card readers, Communication devices, Mechanical processing resources

      [노드의 예]

      Web Server, DB Server

       

    2. 컴포넌트

      컴포넌트는 탭이 달린 직사각형으로 표기하며, 컴포넌트 명은 심볼 내에 표기합니다.

      컴포넌트는 독립적으로 배포되고 교체되며 재사용될 수 있는 SW조각를 의미합니다. 보통의 경우 실행모듈을 말하지만, 실제 통용되는 컴포넌트라는 용어는 항상 실행모듈만을 가리키지는 않습니다. 컴포넌트가 가끔은 아주 광의로 사용되어서 소스코드나 UI(User Interface), 분석, 설계 산출물들을 포함한 것을 의미하기도 합니다. 컴포넌트라는 용어의 의미는 문맥에서 말하는 사람의 의도를 생각해서 받아 들여야 합니다.

      [컴포넌트의 예]

      결재 시스템에서 결재, 사원 등, 전자 상거래 시스템에서 우편번호 검색, 신용카드 결재 등

       

    3. 연결

      Connection의 표기

      노드를 연결하는 실선으로 표기하며, 연결의 물리적 특성을 Stereo type으로 표기할 수 있습니다.

       

      Connection의 정의

      두 노드 사이의 물리적인 연결을 의미합니다. 두 노드 사이의 물리적인 연결 특성을 설명합니다.

       

    4. 의존관계

      Dependency의 표기

      점선 화살표로 표현하고 필요에 따라 선 위에 설명을 붙이기도 합니다.

       

      Dependency의 정의

      객체나 컴포넌트가 다른 객체나 컴포넌트의 실행을 요청하는 경우, 즉 사물간의 실행 혹은 참조관계를 표현합니다.

      Class와 Class, Package와 package, Component와 Component에 주로 사용되는 관계이고, 때로는 Class-Package-Component 상호 간에도 사용되는 관계입니다.

       

  4. 주의사항
    1. 목적을 전달할 수 있는 명확한 의미의 명칭을 부여해야 합니다.
    2. 노드 명과 스테레오 타입으로 정의하는 하드웨어 특성등은 표현 방식에 기준이 없습니다. 하지만 시스템과 관련없는 제 3 자가 보더라도 그 의미를 이해 할 수 있게 쉽고, 명확한 용어를 사용하여 명칭을 정의하야 합니다. 모호한 명칭으로 정의하면 혼란만 야기 시키는 결과가 됩니다.
    3. 문제 영역의 H/W에 대한 명쾌한 추상 개념을 제공하도록 작성합니다.
    4. SW 자원이 탑재되어 운영되는 보조적인 용도 뿐 아니라, 디플로이먼트 다이어그램은 시스템의 하드웨어 구성을 개념적으로 보여주는 훌륭한 도구가 됩니다. 이러한 용도를 살려 HW 자원의 구성에 대한 좋은 모델이 되도록 정의합니다.
    5. Model을 만든 목적을 전달하기에 필요한 수준까지만 분해되어 있습니다.
    6. 디플로이먼트 다이어그램에 모든 HW 장비가 나타날 필요는 없습니다. 오히려 이러한 시도는 다이어그램을 장황하고 복잡하게 만들어서 의미를 파악하기 힘들게 합니다. 목적과 용도에 부합하는 요소들만 정의하면 충분합니다.

'소프트웨어공학 > UML이야기' 카테고리의 다른 글

7. State chart Diagram  (1) 2009.05.27
3. B Usecase Discription  (0) 2009.05.26
5. Sequence Diagram  (1) 2009.02.06
4. Class Diagram  (0) 2008.10.26
3. A. Usecase Diagram  (0) 2008.06.23
Posted by 서오석
,
  1. 정의

    유즈케이스 정의서는 "유즈케이스 다이어그램의 각 유즈케이스에 대해 처리 흐름을 상세히 정의한 문서"입니다. 이 문서는 통상 자연어로 기술됩니다. 그러나 자연어로 기술하라는 것이 정해진 것은 아닙니다. 문서의 내용이 유즈케이스의 처리 흐름을 정의한 것이기 때문에 그 목적을 만족하는 것이라면 형태에 구애 받지는 않습니다.

    즉, 수학적인 표식이어도 되고, 처리 흐름을 알 수 있는 도표로 표현되어도 됩니다. 단, 혼자만 알 수 있는 표현이면 안 되고, 모든 사람, 특히 전산지식이 없는 사람도 쉽게 이해할 수 있는 표현이어야 하고, 표준화가 전제되어야 합니다.

    유즈케이스 정의서는 UML을 적용하는 대부분의 현장에서 작성하고 있으며, 이 산출물을 작성하는 것을 당연한 것으로 생각하고 있습니다.

  2. 목적

    유즈케이스 다이어그램은 SW 시스템의 외부환경과 SW 시스템간의 교류를 표현하는 다이어그램입니다. 유즈케이스 다이어그램은 사용자의 관점으로 작성하고, SW 지식이 깊지 않은 사용자라도 이해해야 하기 때문에 그 형식과 내용이 매우 간결하게 표현됩니다. 이런 점 때문에 유즈케이스 다이어그램이 전달하고자 하는 내용은 부족한 점이 많습니다. 유즈케이스 다이어그램에서는 단지 교류가 있음을 나타내고 있을 뿐 시스템 내·외부간 교류의 세부적인 사항은 유즈케이스 다이어그램에서는 정의되지 않습니다. 따라서 보다 정확한 시스템의 이해를 위해서는 유즈케이스 다이어그램을 보완하여 내부의 자세한 처리 내용을 기술하여 정의하는 것이 필요합니다. 바로 유즈케이스 정의서는 이러한 필요성에 따라 유즈케이스의 처리 흐름을 상세하게 정의하는 문서인 것입니다.

     

작성목적

 
 
  1. 유스케이스 별 처리 흐름을 기술함으로써 SW 시스템간에 대한 기능적 요구사항을 더욱 명확히한다.

  1. 유스케이스 모델링 이후 계속되는 분석 작업의 기준을 세운다.
  2. 유스케이스 정의서 작성과정에서 공통 서비스를 발견함으로써 유스케이스 모델을 완전하게 한다.
  3. SW 시스템 개발 후 사용자가 요구한 대로 개발되었는지를 테스트하는 기준을 정의한다.

 

 

  1. 구성
    1. 목차

      유스케이스를 정의하는 기본 목차는 다음과 같다.

       

      Use Case 명 : 유즈케이스 정의서 개요

       

      이벤트흐름 : 기본흐름, 선택흐름

      사전 조건 : 유스케이스를 진행하기 전에 이미 실행, 정의되어야 하는 조건

      사후 조건: 유스케이스가 끝나고나서 실행, 정의되는 조건

      참조 요구사항 : 유스케이스를 그리기 위해 참조한 요구사항을 기술

       

       

    2. 양식

      유즈케이스 정의서의 표준 양식은 없다고 할 수 있습니다. UML의 사양을 정의한 공식문서인 "OMG Unified Modeling Language Specification"에는 유즈케이스 정의서(Use case Specification)에 대한 표준은 언급하고 있지 않기 때문입니다

 

  1. 구성 내용
    1. Use Case 명

      유즈케이스 정의서의 제목 부분에 해당합니다. 유즈케이스 정의서는 유즈케이스 하나마다 작성됩니다. 따라서 유즈케이스 정의서가 어떤 유즈케이스에 대한 것인지를 명시합니다. 이 내용 후에는 유즈케이스가 하는 일에 대한 간략한 개요를 기술합니다.

    2. 이벤트 흐름

      유즈케이스는 액터의 이벤트로 그 동작을 개시합니다. 이벤트란 응답을 유발하는 사건을 의미합니다. 예를 들면, "상품정보 요청" 이벤트는 시스템으로부터 상품정보를 제공하는 응답을 유발합니다. 이렇게 SW시스템 외부의 이벤트와 그 이벤트에 대한 시스템의 응답을 알면 시스템이 하는 일을 알 수 있습니다. 이렇게 이벤트 흐름(Flow of events)부분은 액터와 유즈케이스 사이의 이벤트 흐름, 즉 처리 흐름을 상세하게 정의하는 부분입니다.

       

      기본흐름(Basic flow)

      이 유즈케이스가 실행되면 반드시 발생하는 기본적 처리 흐름을 기술합니다. 즉, 경우에 따라서 조건에 따라서 실행되는 처리 흐름이 아닌 무조건적으로 실행하는 처리 흐름이 기술되어야 합니다. 또한 처리 흐름 중에 반드시 하나를 선택해야 할 경우에는 대표적인 선택과 그에 따른 처리 흐름을 기술합니다. 이벤트 흐름이므로 기술되는 방식은 외부 이벤트글, 그에 대한 유즈케이스의 응답이 쌍으로 기술되도록 합니다.

       

      선택흐름(Alternative flow)

      기본 흐름과는 달리 조건과 상황에 따라 추가적으로 혹은 달리 실행되는 처리 흐름에 대하여 기술하는 부분입니다. 유즈케이스가 액터의 선택 결과에 따라 다른 처리 흐름으로 진행해야 할 경우가 있을 때 기술합니다. 선택 흐름은 기본 흐름에서 가지 쳐 나온 처리 흐름입니다.

 

  1. 사전 조건

    유즈케이스가 실행되기 위한 전제 조건을 명시하는 부분입니다. 이 사전 조건을 만족하지 못하는 한 유즈케이스는 실행될 수 없습니다. 사전 조건은 다른 유즈케이스가 행된 후에 만족하는 경우가 많습니다. 이 부분도 자연어로 기술되고 사전 조건이 여러 개인 경우 번호를 붙여 나열합니다

 

  1. 사후 조건

    유즈케이스가 실행한 후의 시스템 상태가 변화한다면 이를 명시하는 부분입니다. 시스템의 상태가 변화한다는 것은 다른 유즈케이스의 실행에 영향을 주는 변화를 의미합니다. 이러한 사후 조건을 기술하는 유즈케이스는 많지 않습니다

 

  1. 참조 요구사항

    유즈케이스가 실행될 때 기능 외의 특별한 요구사항을 기술하는 부분입니다. 특별 요구사항에 정의될 수 있는 것들은 다음과 같습니다.

    1. 표준에 관한 요구사항(어플리케이션 표준)
    2. 품질과 관련된 요구사항(성능, 신뢰성 등)
    3. 기술관련 요구사항(OS, 호환성, 기타 설계 제한사항) 등

 

  1. 주의사항
    1. 유즈케이스 정의서 작성 시 간결하고 명료한 표현을 사용해야 합니다. 불 필요하게 장황한 설명을 하거나 처리 흐름을 명확하지 않게 표현해서는 안됩니다.
    2. 유즈케이스 정의서는 액터와의 상호작용에 초점을 맞추어 기술해야 합니다. 즉, 액터의 요구(이벤트)와 유즈케이스의 응답의 관점에서 기술합니다.
    3. 물리적인 구현 관점의 용어가 언급되지 않도록 주의해야 합니다. 유즈케이스 정의서는 구현 사양을 기술한 것이 아닙니다. 이후 어떤 구현 환경으로도 구현될 수 있다는 생각으로 정의해야 합니다. 또한 유즈케이스 정의서는 SW 지식이 없는 사람도 이해할 수 있어야 합니다.
    4. 모호한 용어나, 지나치게 추상화된 처리 흐름으로 기술하지 말아야 합니다. 유즈케이스 정의서 작성 도중 유즈케이스 다이어그램을 수정해야 할 경우에는 바로 수정합니다. 단 수정의 결과로 기능의 변경으로 인해 사용자와 합의가 필요한 경우, 합의를 먼저 득한 후 수정합니다.

'소프트웨어공학 > UML이야기' 카테고리의 다른 글

7. State chart Diagram  (1) 2009.05.27
6. Deployment Diagram  (0) 2009.05.26
5. Sequence Diagram  (1) 2009.02.06
4. Class Diagram  (0) 2008.10.26
3. A. Usecase Diagram  (0) 2008.06.23
Posted by 서오석
,

이건 졸업 프로젝트로 진행 중이었던 항공물류 시스템 개발 프로젝트이다.
대한항공에서 관심을 가졌던 프로젝트이지만.. 중간에 XLogic Middlware Framework 프로젝트가 시작되어 때려쳤다..--;;
그래서 해당 자료가 얼마 없지만 뭐 필요하면 가져가서 맘껏 보시길 바란다..ㅋ

비젼기술서
AIRCIS의 경우는 이거 프로젝트 시작할 때 꽤나 나름 RFID 사업이 커질 것이란 기대로 지금의 항공 물류관리를 개선할 수 있을 거란 기대가 있었다. 뭐 그런 잡스런 이야기가 들어있다..ㅎ;;


시나리오 기술서
이 프로젝트는 다른 플젝과 다르게 시나리오가 있다. 이유인 즉 대상이 명확하지 않아서이다. 범위를 산정해야하는데 도데체 어디까지 해야하는지 팀원끼리 말이 많아서 결국은 시나리오를 만들고 거기까지 하자고 결론이 났었다..

물류 용어사전
이건 물류관련 용어사전이다. 만드는데 참 어려웠다..
이게 왜 필요했냐면 우리 학교가 항공대가 아니라서 물류관련 학과가 없다보니 우리 팀이 SCM까지 알아야 했다..
문제는 아무리 SCM을 하더라도 결국 정규 코스로 공부를 한게 아니기 때문에 결국 용어사전까지 만들게 된 비운의 뒷이야기가..

ULD 카테고리 사전
이건.. 뱅기에서 사용하는 카테고리가 뭐가 있는지 정리한 것.

SRS
사실 이거 너무 만들기 싫었다..--;;
요구사항 정의서에서 기능이 200개 이상이 나와서 결국 상세 요구사항 정의서로 빼내고 다른 부분들도 워낙 양이 많아서 그냥 다 빼내고 보니 문서가 껍데기 뿐이 남지 않았다..ㅎㅎ;

UseCase 정의서
나름 Detail Usecase 정의서라고 하지만.. 별로 디테일하지 않은 Usecase 정의서..ㅋ

요기 유스케이스까지 만들고 플젝팀의 급격한 목표 변경으로 남아있는 문서는 이거뿐이 없다. 다음에는 이거에서 급격한 목표변경으로 만든 XLogic Framework에 산출물을 올려야겠다..ㅎ

Posted by 서오석
,

표기법

이 글은 UML 다이어그램에 대한 첫 번째 글이기 때문에 UML 2 다이어그램의 표기법에 추가된 부분, 즉 프레임이라고 하는 표기법 엘리먼트를 먼저 다뤄야겠다. 이 프레임 엘리먼트는 UML 2의 다른 많은 다이어그램 엘리먼트의 기초로 쓰이지만, 처음에 대부분의 사람들은 이 프레임 엘리먼트를 다이어그램의 그래픽 영역이라고 생각한다. 프레임 엘리먼트는 다이어그램의 레이블을 위한 지정된 장소를 제공하고, 다이어그램의 그래픽 영역을 제공한다. 프레임 엘리먼트는 UML 다이어그램에서는 선택 사항이다. 그림 1과 2에서 보듯, 다이어그램의 레이블은 프레임의 "네임박스(namebox)" 라고 부르게 될 왼쪽 코너의 상단에 놓인다. 실제 UML 다이어그램은 더 큰 직사각형 안에서 정의된다.

그림 1: 비어있는 UML 2 프레임 엘리먼트

 

시각적으로 경계선을 표시하는 것 외에도 이 프레임 엘리먼트는 인터랙션을 설명하는 다이어그램(시퀀스 다이어그램)에서도 중요한 기능도 한다. 시퀀스 다이어그램에서 시퀀스에 대한 인커밍 메시지와 아웃고잉 메시지(인터랙션)는, 이 메시지들을 프레임 엘리먼트의 경계선에 연결하여 모델링 된다. (그림 2). "기초를 넘어서" 섹션에서 설명하도록 하겠다.

그림 2: 인커밍 메시지와 아웃고잉 메시지가 있는 시퀀스 다이어그램

 

그림 2에서, 다이어그램 레이블이 Sequence Diagram을 의미하는 "sd" 로 시작한다는 것에 주목하라. 다이어그램을 위한 프레임 엘리먼트를 사용할 때 다이어그램의 레이블은 다음 포맷을 따라야 한다.

 

Diagram Type Diagram Name

 

UML 스팩은 다이어그램 유형마다 특정 텍스트 값을 준다. (sd = Sequence Diagram, activity = Activity Diagram, use case = Use Case Diagram).

 

 

 

기초

시퀀스 다이어그램의 주요 목적은 어떤 결과를 만들어내는 이벤트 시퀀스를 정의하는 것이다. 메시지 보다는 메시지가 발생하는 순서에 초점이 더 맞춰진다. 대부분 시퀀스 다이어그램은 system 객체들 간 어떤 메시지들이 보내지는지, 그리고 어떤 순서로 발생하는지를 나타낸다. 다이어그램은 이 정보를 수직적 측면과 수평적 측면으로 전달한다. 수직 측면에서는 탑다운(top down) 방식으로 메시지/호출이 발생한 시간 순서를 나타내고, 수평 측면에서는 왼쪽에서 오른쪽으로 메시지가 보내진 객체 인스턴스를 보여준다.

 

Lifelines

시퀀스 다이어그램을 그릴 때 Lifeline 표기법 엘리먼트는 다이어그램 상단에 놓인다. Lifeline은 모델링되는 시퀀스에 개입된 역할 또는 개게 인스턴스들을 나타낸다.

1 Lifeline은 박스의 아래쪽 중심에서 대시(dash) 라인을 그리며 내려간다. (그림 3). 이 Lifeline의 이름은 박스 내부에 있다

그림 3: 인스턴스 이름이 freshman인 Student 클래스 예제

 

Lifeline의 UML의 네이밍 표준은 다음 포맷은 따른다.

Instance Name : Class Name

 

그림 3의 예제에서, Lifeline은 Student 클래스의 인스턴스를 나타낸다. 이것의 인스턴스 이름은 freshman이다. Lifeline 이름 밑에 그어진 밑줄에 주목하라. 밑줄이 사용될 때는 Lifeline이 한 시퀀스 다이어그램에서 클래스의 특정 인스턴스를 나타낸다는 것을 의미한다. 특정 종류의 인스턴스(예를 들어, '역할')가 아니다. 구조 모델링에 대해서도 살펴볼 것이다. 지금까지 누가(BillFred) 그 역할을 수행하는지를 지정하지 않은 시퀀스 다이어그램에는 buyerseller 등의 역할이 포함되어 있다는 것을 알 수 있다. 이런 경우 다이어그램은 다른 정황에서도 재사용된다. 시퀀스 다이어그램에 역할 이름이 아닌 인스턴스 이름에 밑줄을 긋는다.

그림 3의 Lifeline 예제는 네임드 객체이다. 하지만 모든 Lifeline이 네임드 객체를 나타내는 것은 아니다. 대신 익명 또는 이름없는 인스턴스를 나타내는데도 Lifeline이 사용될 수 있다. 시퀀스 다이어그램에 이름없는 인스턴스를 모델링 할 때, Lifeline의 이름은 네임드 인스턴스와 같은 패턴을 따른다. 그러나 인스턴스 이름을 주는 대신에, Lifeline의 이름의 부분이 공백으로 된다. 그림 3을 다시 보자. 만약 이 Lifeline이 Student 클래스의 익명 인스턴스를 나타낸다면, Lifeline은 " Student." 이다. 또한 시퀀스 다이어그램은 프로젝트의 디자인 단계에서 사용되기 때문에 유형이 지정되지 않은 객체를 갖고 있는 것이 맞다. 예를 들어 "freshman."이 바로 그것이다.

 

메시지

시퀀스 다이어그램의 첫 번째 메시지는 언제나 상단에서 시작하고 다이어그램의 왼쪽에 위치한다. 뒤따르는 메시지들은 이전 메시지보다 약간 낮게 다이어그램에 추가된다.

메시지를 또 다른 객체에 보내는 객체(lifeline)를 나타내기 위해서 수신 객체에 실선 화살표(동기식 호출일 경우)를 긋는다. 또는 (비동기식일 경우) 막대 화살표를 긋는다. 메시지/메소드 이름은 화살표 위에 놓인다. 수신 객체로 보내지는 메시지는 수신 객체의 클래스가 구현하는 작동/메소드를 나타낸다. 그림 4의 예제에서, analyst 객체는 ReportingSystem 클래스의 인스턴스인 system 객체를 호출한다. analyst 객체는 system 객체의 getAvailableReports 메소드를 호출한다. system 객체는 secSystem 객체에 userId의 인자와 함께 getSecurityClearance 메소드를 호출한다. 이것이 바로 SecuritySystem 클래스 유형이다.

 

그림 4: 객체들 간 보내지는 메시지 예제

 

시퀀스 다이어그램에 대한 메시지 호출을 보여주는 것 외에도 그림 4 다이어그램에는 리턴 메시지가 포함되어 있다. 이 리턴 메시지들은 필수요소는 아니다. 리턴 메시지는 원래 lifeline을 향하도록 점선 화살표로 그려지고 그 위에 리턴 값을 배치한다. 그림 4에서, getSecurityClearance 메소드가 호출될 때 secSystem 객체는 system 객체에 userClearance를 리턴한다. 이 system 객체는 getAvailableReports 메소드가 호출되면 availableReports를 리턴한다.

다시 말하지만, 리턴 메시지는 시퀀스 다이어그램의 선택 사항이다. 리턴 메시지의 사용 여부는 모델링되는 것의 상세함 정도에 달려있다. 리턴 메시지는 보다 상세한 것을 원할 때 유용하다. 하지만 호출 메시지로도 충분하다. 개인적으로는 값이 리턴될 때마다 리턴 메시지를 삽입한다.

시퀀스 다이어그램을 모델링 할 때, 객체가 자신에게 메시지를 보내야 할 때가 있다. 언제 객체가 자기자신을 호출할까? 순수주의자들은 객체는 메시지를 객체 자신에게 보내서는 안된다고 주장한다. 하지만 자신에게 메시지를 보내는 객체를 모델링 하는 것도 어떤 경우에는 유용하다. 그림 5는 그림 4를 개선한 것이다. 그림 5는 determineAvailableReports 메소드를 호출하는 system 객체를 보여준다. 그 system 객체에 "determineAvailableReports," 메시지를 보여줌으로써 모델은 이 프로세스가 system 객체에서 발생한다는 사실에 주목할 수 있다.

자기자신을 호출하는 객체를 그리기 위해서는 정상적인 방법으로 메시지를 그리되 또 다른 객체로 연결하는 대신, 메시지를 다시 객체 자신으로 연결한다.

그림 5: determineAvailableReports 메소드를 호출하는 system 객체

 

그림 5의 예제 메시지는 동기식 메시지이다. 하지만 시퀀스 다이어그램에서는 비동기식 메시지도 모델링 할 수 있다. 비동기식 메시지는 동기식 메시지와 비슷하게 그려지지만 메시지 라인은 막대 화살표로 표시된다. (그림 6)

그림 6: instance2로 보내지는 비동기식 메시지를 나타내는 시퀀스 다이어그램

 

가드(guard)

객체 인터랙션을 모델링 할 때 객체로 보내지는 메시지 조건이 부합해야 할 때도 있다. 가드(guard)는 흐름을 제어하는 UML 다이어그램에서 쓰인다. UML 1.x 와 UML 2.0 모두 가드를 언급했다. UML 1.x에서 보호는 하나의 메시지에만 할당될 수 있었다. UML 1.x의 시퀀스 다이어그램에 가드를 그리려면 보호되고 있는 메시지 라인 위, 메시지 이름 앞에 guard 엘리먼트를 둔다. 그림 7은 메시지 addStudent 메소드에 대한 가드가 있는 시퀀스 다이어그램이다.

그림 7: 가드가 포함된 addStudent 메시지

 

그림 7에서 가드는 텍스트 "[pastDueBalance = 0]" 이다. 이 메시지에 가드가 있기 때문에 addStudent 메시지는 시스템 계정이 [pastDueBalance = 0]을 리턴할 경우에만 보내진다.

[Boolean Test]

 

예를 들어,

[pastDueBalance = 0]

 

Combined fragments (대안, 옵션, 루프)

대부분의 시퀀스 다이어그램에서 UML 1.x "in-line" 가드는 모델링 되는 시퀀스에 필요한 로직을 핸들하기엔 조금 부족했다. 그러한 기능이 부족하다는 점이 UML 1.x에서 문제가 되었다. UML 2는 "in-line" 가드를 없애고, Combined FFragment라고 하는 표기법 엘리먼트를 추가하여 이러한 문제를 다루고 있다. Combined Fragment는 시퀀스 다이어그램에서 조건의 흐름을 보여주기 위해 메시지들을 하나로 그룹핑하는데 사용된다. UML 2 스팩은 Combined Fragment에 11 개의 인터랙션 유형을 정의하고 있다. 이 중 세 가지는 "기초" 섹션에서 다룰 것이고, 두 가지 유형은 "기초를 넘어서" 섹션에서 설명할 것이다. 나머지 여섯 개는 다음 기회에 다루고자 한다. (나는 책을 집필하는 것이 아니다. 오늘 안으로 이 글을 마무리 해야 한다.)

 

대안

대안은 두 개 이상의 메시지 시퀀스들간 상호 배타적인 선택을 나타낼 때 사용된다.

3 대안은 전통적인 "if then else" 직 (만일 내가 세 개의 아이템을 구매하면 구매금액의 20%를 할인 받는다; 그 외에는 10%의 할인을 받는다.)의 모델링이 가능하다.

그림 8에서 보듯, 대안 엘리먼트는 프레임을 사용하여 그려진다. "alt" 라는 단어는 이 프레임의 네임박스 안에 놓인다. 더 큰 직사각형은 피연산함수로 나누어진다.

4피연산 함수는 대시(dash) 라인으로 분리된다. 각 피연산 함수에는 가드가 주어지고 이 가드는 lifeline 상단에 피연산 함수의 왼쪽 상단 부분을 향해 배치된다.

5피연산함수의 가드가 "true,"로 되면 그 피연산함수를 따라야 한다.

그림 8: 대안 Combined Fragment를 포함하고 있는 시퀀스 다이어그램

 

대안이 어떻게 읽혀지는지를 보여주는 예제로서 그림 8은 상단에서 시작하는 시퀀스를 보여준다. check amount와 account의 balance 정보가 있는 bank 객체가 있다. 이 부분에서 대안이 사용된다. 가드 "[balance >= amount]" 때문에 account의 balance이 보다 크거나 같을 때 시퀀스는 addDebitTransaction과 storePhotoOfCheck 메시지를 account 객체로 보내는 bank 객체를 사용하여 시퀀스를 지속시킨다. 하지만 balance가 amount 보다 작거나 같을 때 시퀀스는 addInsuffientFundFee와 noteReturnedCheck 메시지를 account 객체로 보내고, returnCheck 메시지를 자기 자신에게 보내는 bank 객체로 처리한다. "[else]" 가드 때문에 balance가 amount 보다 작거나 같을 때 두 번째 시퀀스가 호출된다. 대안을 사용하면 "[else]" 가드가 필요 없다. 하지만 피연산함수가 이것에 대한 명확한 가드를 갖고 있지 않다면 "[else]" 가드가 필요하다.

대안은 "if then else"에만 국한되지 않는다. 필요한 만큼 대안 경로를 취할 수 있다. 더 많은 대안이 필요하면 시퀀스의 가드와 메시지를 포함한 직사각형에 피연산함수를 추가하면 된다.

 

옵션

옵션 Combined Fragment는 특정 상황에서 발생하는 시퀀스를 모델링 할 때 사용된다. 다른 경우, 이 시퀀스는 발생하지 않는다. 이 옵션은 간단한 "if then"문장을 모델링 하는데 쓰인다. (찬장에 5개 미만의 도넛이 있다면 24개 이상의 도넛을 만든다.)

옵션 표기법은 대안과 비슷하다. 단 한 개의 피연산 함수를 가져야 하고, "else" 가드가 전혀 없다는 것을 제외하고는 말이다. 옵션을 그리려면 프레임을 그려야 한다. "opt" 텍스트가 이 프레임의 네임박스 안에 배치되고, 이 프레임의 콘텐트 영역에 옵션의 가드가 lifeline의 상단에, 왼쪽 상단 코너를 향해 배치된다. 그런 다음 옵션의 메시지 시퀀스가 나머지 영역에 배치된다. (그림 9)

 

그림 9: 옵션 Combined Fragment

 

옵션 Combined Fragment는 읽기 쉽다. 그림 9는 그림 7의 시퀀스 다이어그램을 재구성 한 것이다. 하지만 여기에서는 student의 과거 해당 balance가 0일 경우 보내져야 하는 메시지가 더 많기 때문에 옵션을 사용한다. 그림 9의 시퀀스 다이어그램을 보면, student의 과거 balance가 0 이면 addStudent, getCostOfClass, chargeForClass 메시지들이 보내진다. student의 과거 balance가 0이 아니라면 시퀀스는 어떤 메시지도 보내지 않는다.

그림 9의 시퀀스 다이어그램에는 이 옵션용 가드가 포함되어 있다. 하지만 이 가드는 필수 엘리먼트는 아니다. 추상 시퀀스 다이어그램에서는 이 옵션의 조건을 지정한다. 이것이 옵션 fragment 라는 것을 가리키면 된다.

 

루프(loop)

가끔 반복적인 시퀀스를 모델링 해야 할 때도 있다. UML 2에서 반복되는 시퀀스의 모델에 루프 Combined Fragment를 사용한다.

루프는 외형상 옵션과 매우 흡사하다. 프레임을 그리고 그 프레임의 네임박스에 "loop"라고 쓴다. 프레임의 콘텐트 영역 안에서 루프의 가드는

6 lifeline의 상단에, 왼쪽 상단 코너 쪽을 향하여 놓인다. 그런 다음 루프의 메시지 시퀀스는 프레임의 나머지 콘텐트 영역에 배치된다. 루프에서 가드는 두 가지 특별한 조건을 가질 수 있다. 이 특별 가드 조건들은 "minint = [the number]" ("minint = 1")라고 하는 최소 반복과 and maximum iterations written as "maxint = [the number]" ("maxint = 5")라고 하는 최대 반복이다. 최소 반복 가드를 사용하여, 루프는 지정된 최소한의 수만큼 실행해야 하고 최대 또한 마찬가지이다.

그림 10: loop Combined Fragment

 

그림 10(

크게 보기)에서, 루프는 reportsEnu 객체의 hasAnotherReport 메시지가 false를 리턴할 때까지 실행된다. 이 시퀀스 다이어그램의 루프는 루프 시퀀스가 실행되는지를 확인할 때 부울 테스트를 사용한다. 이 다이어그램은 위에서부터 읽어 내려간다. 루프에 다다르면 hasAnotherReport 값이 true 인지를 확인하기 위해 테스트가 실행된다. HasAnotherReport 값이 true 면 시퀀스는 루프로 간다.

 

 

 

기초를 넘어서

 

지금까지 시퀀스 다이어그램의 기초를 설명했다. 다음 섹션에서는 수준 높은 표기법에 대해서 알아보자.

또 다른 시퀀스 다이어그램

시퀀스 다이어그램을 만들 때, 개발자는 기존 시퀀스 다이어그램을 재사용하는 경우가 많다.

7 UML 2부터, "Interaction Occurrence" 엘리먼트가 도입되었다. Interaction Occurrence가 추가되었다는 것은 UML 2의 인터랙션 모델링의 가장 중요한 혁신이다. Interaction Occurrence는 기본적인 시퀀스 다이어그램을 복잡한 시퀀스 다이어그램으로 만드는 기능이다. 이것을 사용하여 간단한 시퀀스를 조합(재사용)하여 보다 복잡한 시퀀스를 만들 수 있다. 보다 복잡하고 완벽한 시퀀스의 가능성이 커진 것이다.

Interaction Occurrence 엘리먼트는 프레임을 사용하여 그려진다. "ref" 텍스트가 프레임 네임박스 안에 놓이고 참조되는 시퀀스 다이어그램의 이름이 프레임의 콘텐트 영역 내부에 놓인다. 여기에 더불어 시퀀스 다이어그램에 대한 매개변수도 함께 배치된다. 참조되는 시퀀스 다이어그램의 표기법은 다음 패턴을 따른다.

sequence diagram name[(arguments)] [: return value]

 

두 가지 예제를 보자.

1. Retrieve Borrower Credit Report(ssn) : borrowerCreditReport

또는

2. Process Credit Card(name, number, expirationDate, amount : 100)

예제 1에서, 이 신택스는 Retrieve Borrower Credit Report라고 하는 시퀀스 다이어그램을 호출하여 이를 ssn 매개변수로 보낸다. Retreive Borrower Credit Report 시퀀스는 borrowerCreditReport 변수를 리턴한다.

예제 2에서는 Process Credit Card 라고 하는 시퀀스 다이어그램을 호출하고 이를 매개변수인 name, number, expiration date, amount로 전달한다. 하지만 예제 2에서 amount 매개변수는 100이 될 것이다. 예제 2에 레이블이 붙은 리턴 값이 없기 때문에 시퀀스는 값을 리턴하지 않는다. (모델링되는 이 시퀀스는 리턴 값이 필요 없다.)

그림 11: 두 개의 다른 시퀀스 다이어그램을 참조하는 시퀀스 다이어그램

 

그림 11은 시퀀스 다이어그램 "Balance Lookup"과 "Debit Account."를 참조하는 시퀀스 다이어그램이다. 이 시퀀스는 왼쪽 상단에서 Customer가 메시지를 teller 객체로 보내는 것으로 시작한다. 이 teller 객체는 theirBank 객체로 메시지를 보낸다. 그 지점에서 Balance Lookup 시퀀스 다이어그램이 매개변수로서 전달된 accountNumber와 함께 호출된다. Balance Lookup 시퀀스 다이어그램은 balance 변수를 리턴한다. 그런 다음, 이 옵션의 가드 조건은 balance가 amount 변수보다 큰 지를 확인하기 위해 검사된다. balance가 amount 보다 클 경우 Debit Account 시퀀스 다이어그램이 호출되면서 이것을 accountNumber로 보내고 매개변수로서 amount를 전달한다. 시퀀스가 완료된 후에 withdrawCash 메시지가 customer에게 cash를 리턴한다.

그림 11에서, theirBank의 lifeline은 "Balance Lookup" 인터랙션 뒤에 숨겨진다. 인터랙션이 이 lifeline을 숨기기 때문에 theirBank lifeline은 "Balance Lookup" 시퀀스 다이어그램에서 참조된다. 인터랙션 발생에서 lifeline을 숨기는 것 외에도 UML 2는 lifeline이 "Balance Lookup" 시퀀스에 같은 theirBank를 갖도록 지정한다.

인터랙션 발생에서 참조되지 않는 lifeline들을 중첩하는 시퀀스 다이어그램을 모델링 할 때가 있다. 이 같은 경우, lifeline은 정상적인 lifeline으로 나타나고 인터랙션 발생에 의해 숨겨지지 않는다.

그림 11에서 이 시퀀스는 "Balance Lookup" 시퀀스 다이어그램을 참조한다. "Balance Lookup" 시퀀스 다이어그램은 그림 12에서 볼 수 있다. 이 예제 시퀀스는 매개변수들과 리턴 값을 갖고 있기 때문에 다이어그램의 네임박스에 있는 레이블은 특정 패턴을 따른다.

Diagram Type Diagram Name [(Parameter Type : Parameter Name)] :

 

 

[: Return Value Type]

 

예제

1. SD Balance Lookup(Integer : accountNumber) : Real

또는

2. SD Available Reports(Financial Analyst : analyst) : Reports

그림 12는 예제 1을 설명하고 있다. Balance Lookup 시퀀스가 accountNumber 매개변수를 이 시퀀스의 변수로서 사용하고, 시퀀스 다이어그램은 리턴되는 Real 객체를 보여준다. 이 같은 경우 시퀀스가 객체를 리턴하는 곳에서, 리턴되는 객체에는 시퀀스 다이어그램의 인스턴스 이름이 부여된다.

그림 12: accountNumber의 매개변수를 취하고 Real 객체를 리턴하는 시퀀스 다이어그램

 

그림 13은 시퀀스가 매개변수를 취하고 객체를 리턴하는 예제 2를 묘사하고 있다. 그림 13에서, 이 매개변수는 시퀀스의 인터랙션에 사용된다.

그림 13: 인터랙션에 매개변수를 사용하고 Reports 객체를 리턴하는 시퀀스 다이어그램

게이트(Gate)

 

이전 섹션에서는 매개변수와 리턴 값을 통해 정보를 전달하여 또 다른 시퀀스 다이어그램을 참조하는 방법을 설명했다. 그러나 시퀀스 다이어그램들 간 정보를 전달하는 또 다른 방법이 있다. 게이트(gate)는 시퀀스 다이어그램과 내용들 간 정보 전달을 모델링 할 수 있는 쉬운 방법이다. 게이트는 시퀀스 다이어그램의 프레임의 끝에 연결된 한쪽 끝과 lifeline에 연결된 또 다른 끝으로 설명되는 메시지이다. 게이트를 사용하여 그림 11과 12를 다시 만들어 그림 14와 15로 변형시켰다. 그림 15의 예제 다이어그램은 accountNumber의 매개변수를 취하는 getBalance라고 하는 엔트리 게이트를 갖고 있다. getBalance 메시지는 엔트리 게이트이다. 다이어그램의 프레임에 연결된 화살표가 lifeline을 향하기 때문이다. 이 시퀀스 다이어그램에는 종료 게이트도 있다. 이것은 balance 변수를 리턴한다. 종료 게이트는 lifeline에서 다이어그램의 프레임으로 연결된 리턴 메시지이기 때문에 인식된다. 화살표는 프레임으로 향한다.

그림 14: 게이트를 사용한 그림 11

 

그림 15: 게이트를 사용한 그림 12

 

Combined Fragment (중지(break)와 병렬(parallel))

이 글 도입부에서 다루었던 "기초" 섹션에서 "대안", "옵션", "루프"로 알려진 Combined Fragment를 다루었다. 이 세 가지 Combined Fragment는 대부분의 사람들이 가장 많이 사용하는 것들이다. 하지만 더욱 유용한 Combined Fragment 두 가지가 더 있다. 바로 중지(break)와 병렬(parallel)이다.

 

중지(break)

중지는 거의 모든 면에서 옵션(option)과 동일하다. 두 가지 예외를 제외하고는 말이다. 우선, 중지의 프레임에는 네임박스가 "옵션" 대신 "중지"이다. 둘째, 중지의 메시지가 실행될 때 끝내기 인터랙션의 나머지 메시지들은 시퀀스가 끝내기 인터랙션에서 정지되기 때문에 실행되지 않는다. 이러한 방식으로 중지는 C++ 또는 Java 같은 프로그래밍 언어의 중지 키워드와 흡사하다.

그림 16: 그림 8의 시퀀스 다이어그램 재구성- 대안(alternative) 대신 중지 사용

 

중지는 예외 핸들링을 모델링 할 때 사용된다. 그림 16은 그림 8을 재구성 한 것이다. 이것은 balance < amount 조건을 대안 플로우 대신 예외로 처리한다. 그림 16을 읽는 방법은 시퀀스의 왼쪽 상단 코너부터 읽어 내려간다. 이 시퀀스가 리턴 값 "balance," 에 다다르면 balance가 amount 보다 적은지를 확인한다. balance가 amount 보다 작지 않으면 그 다음 메시지가 addDebitTransaction 메시지로 보내지고, 이 시퀀스는 지속된다. 하지만 balance가 amount 보다 작으면 이 시퀀스는 중지로 들어가고 해당 메시지가 보내진다. 중지의 모든 메시지들이 보내지면 이 시퀀스는 남아있는 메시지(addDebitTransaction)를 보내지 않고 종료된다.

중지는 마무리 인터랙션의 시퀀스를 종료한다. 그 다이어그램에 설명된 모든 시퀀스를 종료하지는 않는다. 중지가 대안 또는 루프의 일부일 경우 오직 대안 또는 루프만 종료된다.

 

병렬(Parallel)

현대적 컴퓨터 시스템은 더 복잡해지고 때때로 동시 태스크도 수행한다. 복잡한 태스크의 일부를 종료하는데 드는 프로세싱 시간이 생각 보다 길 때 어떤 시스템은 프로세싱의 일부를 병렬(parallel)로 처리한다. 병렬 엘리먼트는 병렬 프로세싱 작동을 보여주는 시퀀스 다이어그램에 사용한다.

병렬은 프레임을 사용하여 그려지고 프레임의 네임박스에 "par"로 표시한다. 프레임의 콘텐트 섹션을 점선으로 구분된 수평 피연산 함수로 나눈다. 이 프레임의 각 피연산 함수는 병렬로 수행되는 실행 쓰레드이다.

그림 17: 두 가지 태스크를 병렬로 수행하는 객체 예제

 

그림 17에는 병렬로 작동하는 객체 예제로서 그다지 훌륭한 것은 아니지만 이해하기는 쉽다. 이 시퀀스는 이렇게 진행된다. hungryPerson이 cookFood 메시지를 oven 객체로 보낸다. oven 객체가 그 메시지를 받으면 두 개의 메시지를 nukeFood와 rotateFood로 동시에 보낸다. 이들 메시지 모두 실행된 후에 hungryPerson 객체에 oven 객체에서 yummyFood가 리턴된다.

 

   

 

결론

이 시퀀스 다이어그램은 시스템 요구사항들을 문서화하고 시스템 디자인을 한꺼번에 볼 수 있는 좋은 다이어그램이다. 시퀀스 다이어그램이 유용한 이유는 인터랙션이 발생하는 시간 순서로, 시스템의 객체들간 인터랙션 로직을 보여주기 때문이다.

 

   

 

참조

  • http://www.omg.org/cgi-bin/doc?ptc/2003-08-02
  • UML 2 Sequence Diagram Overview
  • http://www.agilemodeling.com/artifacts/sequenceDiagram.htm
  • UML 2 Tutorial
  •  

     

    1 완전히 모델링 된 시스템에서 이 객체들(클래스의 인스턴스들)도 시스템의 클래스 다이어그램에서 모델링 된다.

    2 분석가가 이 시퀀스 다이어그램을 읽을 때 이 시스템에 이미 로그인 된 것으로 간주한다.

    3 다양한 대안 피연산 함수에 첨부된 두 개 이상의 가드 조건들을 동시에 true로 만드는 것이 가능하다. 하지만 대부분의 경우, 피연산 함수가 런타임 시 실제로 발생하는 피연산 함수는 단 한 개이다. (대안 "wins" 는 UML 표준으로 정의되지 않았다.)

    4 피연산 함수가 고속도로의 차선(lane)처럼 보이겠지만, 그렇다고 해서 차선으로 부르지 않는다. 수영 레인(swim lane)이 액티비티 다이어그램에 사용되는 UML 표기법이다. The Rational Edge's

    액티비티 다이어그램을 참조하라.

    5 가드가 부착된 lifeline은 가드 식에 포함된 변수를 갖고 있다.

    6 옵션과 마찬가지로 루프 역시 가드 조건이 배치될 필요가 없다.

    7 어떤 유형의 시퀀스 다이어그램도 재사용 가능하다.

    출처: 한국 IBM

    '소프트웨어공학 > UML이야기' 카테고리의 다른 글

    6. Deployment Diagram  (0) 2009.05.26
    3. B Usecase Discription  (0) 2009.05.26
    4. Class Diagram  (0) 2008.10.26
    3. A. Usecase Diagram  (0) 2008.06.23
    2. UML의 구성  (0) 2008.06.16
    Posted by 서오석
    ,

    이 문서들은 내가 예전에 소프트웨어 설계 프로젝트를 할 때 초안으로 만든 문서이다.

    프로젝트의 주제는 파일 관리 시스템을 만드는 것으로 시스템 구축에 필요한 요구사항 정의 및 설계까지가 목표였다.

    대략 내용들의 흐름이 잘 이어지지 않지만 프로젝트 수행 중 문서화에 대하여 익숙치 않은 분들을 위해 나름 대학을 다닐 때 만들었던 문서들을 공유하려고 이렇게 올린다. 문서의 목차만 봐도 소프트웨어 공학을 공부하는데 도움이 될 것이라 생각된다.
    (문서는 프로젝트 정의, 설계까지이고 구현한 구현물은 어따뒀는지 사라져 버렸다..--;; 문서 초안만 남아서 있는 것만 모아서 올린다..;;)

    아래 번호는 대략적인 순서에 맞게 작성한거라 프로젝트 진행에 순서가 다른 경우도 있다. 순서에 너무 신경쓰지 말 것!


    프로젝트 정의단계

    1.  Software Guide Line 
         프로젝트 수행을 위한 가이드라인을 제시한 문서이다.(코딩표준은 제외)

    2.  Software Project Management Plan 
        프로젝트가 수행되기 위한 각종 계획 및 기간을 설정한다. 수행 단계마다 나와야 하는 문서들도 정의하고
        시스템구축의 초기모형도 설정한다.
    3.  Software Requirement Specification (SRS)
         프로젝트가 시작이 되면 고객(Client)로부터 해당 프로젝트가 가져야할 다양한 기능들에 대하여 요구사항을
         뽑아내어야 한다. 이때 요구사항은 잘 정리해서 문서화해야만 설계 및 구현 단계에서 문제가 발생하지 않는다.
         요구사항정의서는 해당 내용이 방대한 경우 Sub 문서로 분류하기도 하는데 해당 문서의 경우 Glossary 및 상세
         요구사항정의서를 Sub 문서로 만들었고 간략한 유스케이스 기술서를 요구사항정의서에 포함시켰다. 
         본 문서는 EEE standard의 SRS 표준을 따르고 있다.
    4. Glossary
       SRS Sub의 문서로 문서에 사용되는 각종 단어를 정의한 문서이다. 단어사전 같은 것이다.

    5. Use Case Modeling 
       요구사항을 분석하여 해당 기능을 유스케이스로 나타낸다. 유스케이스는 starUML로 그렸고 규모가 작아서
       시퀀스 다이어그램을 포함 시켰다. 규모가 큰 프로젝트의 경우 시퀀스 다이어그램만 따로 빼내서 문서화 한다.
     
    프로젝트 설계 단계

    6. Architecture Specification 
       시스템이 구축되기 전에 시스템 전체의 구성을 정의한다. 서버 구성 및 Layer 구성들을 표기한다.
    7. Statement Designed
        상태다이어그램이라고 시퀀스 다이어그램을 그리면서 작성하는 문서가 있는데 파일이 초안도 안남아 있어서
        올리지는 못했다.;;

    8. Component Design
       요구사항에 따른 프로젝트의 세부 컴포넌트를 설계하는 단계이다.
       (문서에 있는 설계는 잘못 설계되었다..ㅡ.ㅡ;; 그냥 참고만 부탁..)
     
    10. Class Design
         실제 코드를 개발하기 위한 인터페이스를 기술하는 문서로 Java Doc과 같이 클래스와 메소드에 대한 주석들을
         모아놓은 문서라고 생각하면 쉬울 것 같다.

    11. Screen Design
        이건 UI 기술서인데 요구사항에 대한 스토리보드라고 생각하면 된다. 미리 프로토타입을 만드는 경우도 있고
        디자인만해서 개발의 UI를 가시화 시키려는 경우도 있다.
     
    12. DataBase Design
       말 그대로 데이터베이스를 기술한 문서이다. 물리설계 및 논리설계를 ERD로 표기하고 각 테이블에 대한 정보를
       기술한다. 그리고 해당 테이블이 어떤 유스케이스과 관계가 있는지(혹은 시퀀스와 관계가 있는지) 표기한다.


    대략 12개의 파일로 구성되었고 원래 잘 만들어진 소프트웨어 프로젝트는 각 프로젝트 문서가 서로 연결이 되어야 한다. 즉 설계 문서를 보다가 해당 내용이 어디서 나온 건지 모르면 요구사항 정의 문서에서 찾을 수 있게 되어 있어야 하는 것이다. 문서화의 목적이 프로젝트 수행에 이루어지는 다양한 변화를 반영하여 이를 문서화 하므로 후에 유지보수가 쉽도록 하기 위한 것이기 때문이다. 너무 어렵거나 난해한 말로만 기술하여 이해를 하는 사람이 적거나 결과물과 차이를 보인다면 그 문서는 어딘가 잘못된 것이다.
     위의 12개 문서의 경우 사실 연결관계가 잘 설정되지는 않았다. 해당 문서의 요구사항 코드 및 분류 번호가 제대로 들어가지 못했기 때문이다. 만약 이 글을 보는 유저는 충분히 저 문서들 보다 나은 문서를 만들 것이라 생각하며 마치겠다.  




     

     
    Posted by 서오석
    ,

    이건 소프트웨어 공학에서 말하는 계획단계에 있는 녀석이다.

    요구사항을 정의 한 후 프로젝트르 어떻게 수행할 것인지 리스크는 어떻게 관리할 것인지에 대한 정보가 적혀 있으며 수행 과제에 대한 기본적인 정보도 포함하고 있다.

    별첨도 있는데 귀찮아서 안 올린다..--;;


    목차는 아래와 같다.

    1.0 Project purpose 7
    1.1 Introduction 7
    1.2 Definitions 7
    1.3 Person 7
    1.4 Plan 7
    1.5 Project Productions 7
    1.6 References 9
    1.7 Glossary 9
    2.0 Project Overview 10
    2.1 Project purpose, scope 10
    2.2 Assumptions and Dependencies 10
    2.3 Functional requirements 10
    3.0 Project Organization 10
    3.1 Organizational Structure 10
    3.1.1. System Architecture Guidelines 11
    3.1.2 Hardware/Software Structure 12
    3.2 Process Modeling 12
    3.2.1 Delvelopment Process 12
    3.2.2 Process Model 12
    3.3 Development Environment 14
    4.0 Management Process 14
    4.1 Priority 14
    4.1.1 Priority Standard 14
    4.1.2 Priority Metrix 15
    4.2 Configuration Management 15
    4.2.1 Configuration Identifying Category 16
    4.2.2 Version Management 16
    4.3 Quality Control 17
    4.3.1 Purpose 17
    4.3.2 Scope 17
    4.3.3 Quality Control Plan 17
    4.3.4 Quality Control Activity 18
    4.4 Risk Control 18
    4.4.1 Core substance 18
    4.4.2 Risk generalization table 18
    4.4.3 Risk Detail Analysis Content 19
    4.4.3.1 Risk Type – Resource 19
    4.4.3.2 Risk Type – Scope 19
    4.4.3.3 Risk Type – Plan 20
    4.4.3.4 Risk Type – Cost 20
    4.4.3.5 Risk Type – Quality 21
    4.4.4 Risk Monitoring Cycle Plan 21
    5. Functional Process 21
    5.1 Methodology Tool 21
    5.2 Repeat Gradual Development Procedure 21
    5.3 Project Tool and Technique 22
    5.4 Each Step Propulsion Procedure 22
    6. Scheduling 23
    6.1 Task 23
    6.2 Task Dependence Relation 23
    6.3 Resouce consumption Plan 24
    6.3.1 Project formation 24
    6.3.2 Project Execute Duty 24
    6.3.3 Business Conference 25
    6.3.4 Communication 25
    6.4 Budget Plan 26
    6.4.1 Event List 26
    6.4.2 FP 26
    6.5 Scheduling Plan 27
    7.0 Test Plan 27
    8.0 Maintenance Plan 28
    8.1 Maintenance Summary 28
    8.2 Application Software Maintenance 29
    9.0 Education Training Plan And Technique Transform Plan 29
    9.1 Education Training Plan 29
    9.1.1 Education Scope 29
    9.1.2 Education Training Plan 30
    9.2 Technique Transform Plan 30
    9.2.1 Technique Transform Substance 30
    9.2.2 Technique Transform method 31

    계획을 세우고 나서는 마일스톤과 WBS를 작성하게 되는데 아래 우리 프로젝트에 대한 WBS를 작성한 것을 올려놓겠다.

    Posted by 서오석
    ,

    이건 Food website의 요구사항 정의서이다. 목차는 IEEE stardand를 거의 따랐다. 번역은 우리 플젝할 때 의석이형이 해주었다..ㅎ (유일한 유학파..-0-;;) 어쨋든 뭐 보면 다들 이해하리라 믿는다..ㅋ


    Table of Contents 3
    1.0 Purpose 5
    1.1 Introduction 5
    1.2 Scope 5
    1.3 Glossary 5
    1.4 References 5
    1.5 Document overview 5
    2.0. General Description 6
    2.1. Product Functions 6
    2.2. User Characteristics 6
    2.3. Constraints 6
    2.4. Assumptions and Dependencies 6
    3.0 Specfic requirements 7
    3.1 Explanation of category ID and Inscription rule 7
    3.2 Functional requirements 7
    3.2.1 Functional requirements definitions 7
    3.2.2 The core functional requirements deduce 7
    3.2.3 Functional requirements table 8
    3.2.3.1 System requirements 8
    3.2.3.2 User requirements 9
    3.2.3.3 Information requirements 10
    3.3 Non-functional requirements table 10
    3.3.1 Non-functional requirements definitions 10
    3.3.2 Non-functional requirements 10
    3.4 Use cases modeling 13
    3.4.1 System use cases 13
    3.4.2 Use cases summary 13
    3.4.3 Detail Use cases scenario 14
    3.4.3.1 UC_Sign_up 14
    3.4.3.2 UC_Login/logout 14
    3.4.3.3 UC_Total_member_management 15
    3.4.3.4 UC_Information 17
    3.4.3.5 UC_Board_management 18
    3.5 Sequence Diagram 19
    3.5.1 UC_Sign_up 19
    3.5.2 UC_Login/logout 20
    3.5.3 UC_Total_member_management 21
    3.5.4 UC_Information 23
    3.5.5 UC_Board_management 23
    3.6 Function description 24
    3.7 ERD 25
    3.7.1 E-R Diagram 25
    3.7.2 Table list 26
    3.7.3 Table description 26
    3.7.3.1 UC_Login/logout 26
    3.7.3.2 UC_Information 27
    3.7.3.3 UC_Board_management 27
    4.0 External interface requirements 29
    4.1 User Interfaces 29
    4.1.1 Link 29
    4.1.2 Main page 29
    4.2 Hardware Interfaces 30
    4.3 Software Interfaces 30
    4.4 Communication Interfaces 30
    Posted by 서오석
    ,




    이 프로젝트는 학교 주변 먹거리 관련 홈페이지를 만드는게 목적이었다. 정확히 내가 소프트웨어 공학을 처음 입문할 때 한 프로젝트라고 해야하나..? 음.. 각 문서가 연결이 되지 않는 치명적인 단점이 있지만..-0-;; 목차나 제안서와 견적서등은 결코 회사에서 사용하는 것보다 뒤지지 않는다고 말하고 싶다. ㅋ

    Myfood2007.pptx는 제안서이다. RFP가 어따 놨는지 없어서 그냥 제안서만 올린다..--;;
    그리고 CBD20070313.xls는 프로젝트 견적서이다.
    Posted by 서오석
    ,




    이 문서는 프로젝트의 ERD와 각 Table 명세가 되어 있는 DB 명세서라고 생각하면 된다.

    뭐 이대로 만들어도 별로 무리가 없을 것이긴 한데 시나리오를 기반으로 구축하였기 때문에 일반적인 도서관과 구조 자체가 다를 수 있다.

    목차이다.

    1.0 ER Diagram 5
         Logical Review 5
         Physical Review 5
    2.0 Table Detail Design 6
    3.0 DDL CREATE SQL 10
        3.1 저자 10
        3.2 도서 위치 정보 10
        3.3 출판사 정보 10
        3.4 도서 정보 11
        3.5 저자 서적 분류 11
        3.6 회원 직급 11
        3.7 대출 권한 12
        3.8 회원 12
        3.9 대출 정보 12
        3.10 블랙리스트 13
    4.0 Data loading 13
        4.1 저자 13
        4.2 도서 위치 정보 14
        4.3 출판사 정보 14
        4.4 도서 정보 16
        4.5 저자 서적 분류 18
        4.6 회원 직급 21
        4.7 대출 권한 21
        4.8 회원 21
        4.9 대출 정보 22
        4.10 블랙리스트 23
    5.0 Grant SQL 23

     

    Posted by 서오석
    ,


     UML의 다이어그램 중 어느 한 다이어그램이 중요하지 않다 말할 수는 없지만 클래스 다이어그램은 그 중 중요하다 할 수 있는 다이어그램이다. 필자가 시스템을 구축하면서 느낀 점을 보태어서 말한다면 만들어진 시스템의 정적구조가 엉망이라면 시스템의 구축이나 기능확장의 어려움이 막대하다 할 수 있다. 반면에 잘 만들어진 구조를 가졌다면 시스템 구축자체에서나 기능의 확장에 있어서 무리 없이 가능해진다.  물론 이렇게 잘 된 정적 구조의 중요성을 실감하기 위해서는 실제 시스템의 만들어보고 잘못된 구조로 인한 피해를 느껴봐야만 할 것이다.
    만약 이 글을 읽는 독자 중에 시스템의 정적인 구조를 처음 설계하려는 사람이 있다면 되도록이면 빠른 싸이클로 반복을 하기 바란다.  왜냐하면  설계에 대한 충분한 경험을 가지고 있지 않고는 처음 설계한 구조가 시스템을 구축하기에 완벽하게 만족시키지 못하기 때문이다.  빠른 싸이클의 반복은 잘못된 구조의 수정 기회를 늘인다.
    이제 클래스 다이어그램에 관한 내용을 알아보도록 하자. 실제 클래스 다이어그램의 내용은 한 회에 다 실을 수 없을 만큼 양이 많다.  글의 제목에서도 느낄 수 있는 것과 같이 클래스 다이어그램을 2내지3회의 분량으로 할 계획이다. 클래스 다이어그램이 이렇게 분량이 많은 이유는 클래스 다이어그램이 프로그래밍 언어들과 가장 직접적으로 연관을 맺고 있고 또한 아주 많은 부분에서 객체지향의 이론이 녹아들어가 있기 때문이다. 이번 호에서는 클래스 다이어그램의 가장 기본이 되는 요소들과  그 의미를 알아보도록 할 것이다.
     
    1.클래스
     
    그림 1 - 클래스의 표기
    클래스의 표기는 그림1에서의 표기와 같이한다. 그림1의 좌측에 있는 것은 Attribute와 Operation이 축약되지 않은 표기이고 나머지는 축약된 표기이다.
    클래스의 의미는 일반적으로 객체지향 언어에서 사용하는 클래스의 의미와 유사하다. 클래스라는 것은 시스템에서 동작하게 되는 하나의 개념의 추상화 도구로써 사용되며 추상화의 단계에 따라 클래스의 의미가 약간씩 차이가 생긴다. 만약 설계 당시에 추상화가 아주 높은 단계에서 이러한 클래스는 시스템에서 사용되는 하나의 역할로서의 의미를 가진다. 하지만 구현단계와 같은 추상화 단계가 아주 낮은 상태에서는 실제 객체를 생성하기 위한 클래스의의미를 가지게 된다. 이러한 단계의 구별은 사용자의 의도에 따라 적당히 사용하면 될 것이다.
     
    2.Attribute와 Operation
    Attribute와 Operation 의 표기 또한 추상화 단계에 따라 표기의 방법이 달라 질 수 있다. 예를 들어 구현단계에 근접하여 클래스 다이어그램을 도시하려 한다면 구현하기위한 언어에 밀접한 형태의 Attribute와 Operation 으로 나타내어야 하지만 추상화 단계가 높을 경우는 대략적인 의미 전달을 할 수 있을 정도로 표기하여도 된다. Attribute의 UML1.1 표준형식은 다음과 같다.
    visibility name : type-expression! = initial-value { property-string }.
    구조에 대한 설명은 프로그래밍 언어를 사용하여 본 사람이라면 쉽게 이해할 수 있을 것이다. Operation의 UML1.1표준형식은 다음과 같다.
    visibility name ( parameter-list ) : return-type-expression! { property-string }
    Attribute와 마찬가지고 구조는 쉽게 이해될 것이다. 여기서 한가지 짚고 넘어가야 할 부분이 Visibility부분이다. 언어에서 Visibility를 private와 protect, public으로 구분하듯이 여기서도 이러한 구분을 표시할 수 있다. 즉 private는 '-'로 protected 는 '#'로 public은 '+'로 표기함을 알아두어야 할 것이다.
     
    3.클래스와 클래스의 상속관계(Generalization Relationship).
    그림 2  - 상속관계
    상속관계의 표기는 그림 2와 같이 닫혀져 있는 머리를 가진 화살표로 나타낸다.
    상속의 의미는 일반 언어에서의 상속의 의미와 유사하게 상위클래스의 모든 특징과 행위를 하위의 클래스가 모두 이어받게 된다. 즉 다양한 클래스들의 나열에서 동일한 행위나 특징을 가진 여러 클래스들이 존재할 때 공통되는 부분을 상위 클래스로 만들 수 있다.

    4.클래스와 클래스의 연관관계(Association Relationship)
    그림 3 - 연관관계
    연관관계의 표기는 그림 3과 같이 실선으로 표기하게 된다. 연관관계의 의미는 두 클래스가 서로 어떠한 연관을 가지고 있다는 의미이다.  예를 들어 회사와 사원은 어떤 식으로든지 연관을 가지고 있다. 이것을 표현하기 위해서 연관의 관계를 사용한다. 물론 이러한 연관을 사용하기 위해서 UML에서는 표기의 확장으로 여러가지 장식(Adornments)들을 사용한다 여기서 사용되는 장식들로는 연관의 이름, 다중성(Multiplicity), 역할이름(RoleName) 등이 있다. 각 장식에 대하여 알아보면 먼저 연관의 이름은 어떠한 연관인지를 명시적으로 나타내게 된다. 다중성의 의미는 연관된 상대의 수를 표시하게 된다. 마지막으로 역할이름은 연관을 맺은 상태에서 상대 클래스에서 사용되어지게 되는 역할의 이름을 나타낸다.
     
    5.클래스와 클래스의 집합연관관계(Aggregation Relationship)
    그림 4 - 집합연관관계
    집합연관관계의 표기는 그림 4와 같이 속이 빈 마름모 머리를 가진 실선으로 표기하게 된다. 집합연관관계는 연관관계의 일종으로 연관관계에서 쓰이는 모든 장식들이 다 쓰일 수 있다.집합연관관계를 쓰는 경우는 클래스와 클래스의 관계가 부분과 전체의 관계를 가질 때 표시할 수 있다. 예를 들면 자동차와 바퀴는 전체와 부분의 관계가 될 수 있다.
     
    6.클래스와 클래스의 복합연관관계(Composition Relationship)
    그림 5 -복합 연관관계
    복합연관의 표기는 그림 5에서와 같이 속이 찬 마름모머리를 가진 실선으로 표기하게 된다. 복합 연관관계는 집합연관관계와 유사하게 전체와 부분의 관계를 나타내게 된다. 하지만 엄연한 차이점이 존재한다. 집합연관관계에서는 부분 클래스가 전체 클래스와 같은 생명시간을 가진다는 것이다. 즉 전체의 클래스의 객체가 소멸될 때 부분 클래스의 객체 또한 소멸되는 것이다. 예를 들어 우리가 흔히 말하는 윈도우를 전체로 보고 그 안에 들어가는 버튼을 부분으로 보면 이해가 쉬울 것이다.
     
    7.클래스와 클래스의 의존관계(Dependency Relationship)
    그림 6 - 의존 관계
    의존관계은 그림 6에서와 같인 열려진 머리의 화살표를 가진 점선으로 표기한다.
    의존관계의 의미는 한 클래스의 변화가 다른 클래스에 영향을 미칠 때 사용한다. 이러한 의존의 관계는 여러가지 관계에서 나타날 수 있다.  

    8. 클래스에서 사용자 정의 구역(User-defined compartment)

    그림 7 - 사용정의 구역 (user-defined compartment)
    클래스를 구성하는 부분으로 이름구역, Attribute구역, Operation구역이 있음을 우리는 알고 있다. 이러한 클래스를 구성하는 세가지 부분은 UML에서 미리 정의하는 부분이고 이외에 사용자가 정의하여 작성할 수 있는 새로운 구역을 첨가할 수 있다. 이러한 사용자 정의 구역은 툴이 제공하는 환경에 따라 다양하게 제공된다. 만약 독자 여러분이  UML Modeling툴을 만든다면 사용자 정의 역역을 이용하여 순공학이나 문서화 등의 툴의 부가적인 기능을 돋보이게 할 수 있을 것이다.

    9. Type and Implementation Class

    그림8 - type and implementation class
    지금부터 언급하는 내용은 클래스 다이어그램에 적용함에 있어서 스테레오타입(Stereotype)이나 컨스트레인트(Constraint)를 이용하여 기존 클래스의 의미를 확대하는 부분이다. 이러한 의미의 확대는 실제 업무에서 사용되는 개념과 좀 더 근접시키기위해 UML에서 표준으로 지정하고 있다.
    먼저 Type의 경우 스테레오타입으로 'type'을 가진다. 이것은 객체가 가지는 Specification만을 표시한다. 그러한 이유로 실제로 언어에 바인딩되는 attribute나 method를 적는 것이 아니라 specification상에 나타나는 attribute나 operation이 반영된다. 반면에 Implementation class의 경우 실제 물리적인 언어에 바인딩되게 표현을 한다. Implementation class의 경우 스테레오 타입을 'implementationClass'를 기입하게 된다. Type과 iplementation class의 차이는 type을 실체화(Realization) 시킨 것이 Implementation class가 된다.

    10. Interface

    그림 9 - Interface
    인터페이스 클래스의 경우 스테레오타입을 'interface'로 가지며 객체지향 언어인 java에서 사용되는 인터페이스의 의미와 동일하게 클래스의 행위만을 확정하고 있다. 이러한 인터페이스는 구현을 가지지 않으므로 abstract operation을 가지게 된다.

    11. Parameterized Class (Template Class)
    그림 10 - Parameterized Class
    Parameterrized Class의 표기는 위의 그림과 같이 표기하고 그 의미는 객체지향언어 C++에서 사용되는 Template와 동일하다.

    12. Utility
    그림 11 -  Utility Class
    Utility class의 표기는 스테레오타입을 'utility'로 가진다. 그 의미는 일반적인 클래스의 의미가 아니라 프로그램의 편리를 위해 만들어진 클래스이다. 프로그램을 하면 반드시 Global로 만들어야 할 프로시져나 변수들이 존재하게 된다. 이를 기능적으로 분리하기 위해 utility class를 사용한다. Utility class 내부에 존재하는 attribute나 operation의 경우 Global 변수나 프로시져로 인식하면 된다.

    13. MetaClass
    MetaClass의 표기는 스테레오타입을 'metaclass'로 가지는 클래스이다. 이것은 metaclass의 인스턴스가 클래스가 되는 클래스를 의미한다.

    14. Enumeration
    Enumeration Class의 경우 스테레오타입을 'enumeration'으로 가지는 클래스이다. Enumeration Class의 의미는 프로그램언어에서 사용되는 일반적인 enumeration type과 의미가 유사하다. 정확한 Enumeration Class의 의미는 이 클래스의 인스턴스는 반드시 사용자가 정의한 특정 문자의 집합이어야 한다는 것이다. 이러한 문자는 상대적인 순서를 가지게 된다.

    15. Stereotype
    Stereotype Class의 경우 UML에서 사용되는 의미확장의 도구인 stereotype을 UML에서 지정한 것 이외에 사용자 정의 스테레오타입을 만들기위해 사용되는 클래스이다. Stereotype Class의 표기는 스테레오타입을 'stereotype'으로 가진다.
     
    16. Class Pathname

    클래스를 표기함에 있어서 UML에서 패키지(Package)를 같이 붙여 클래스의 범위를 지정할 수 있다. 패키지는 UML에서 Namespace역할을 한다. 패키지에 대한 자세한 설명은 차후 다이어그램에서 공통으로 사용되는 요소를 설명할 때 하기로 한다. 패키지속에 패키지가 포함 될 수 있으므로 패키지 path를 다 적용하여 클래스의 Pathname을 표기하기도 한다.
    지금까지 클래스 다이어그램에서 정의하는 확장된 의미의 표기를 살펴보았다. 참고로 이러한 모든 내용에 대하여서 자세히 알고 싶다면 UML Spec을 보는 것이 도움이 될것이다.
    실무에서는 시스템을 구성하는 클래스를 뽑아내고 그것의 역할을 지정하고 연관을 맺는 것이 가장 힘든 일일 것이다. 이것에 대한 정확히 정립된 방법은 존재하지 않는다. 약간이나마 정형화된 클래스를 뽑아내는 시점에 관하여 적어보면 통상 시스템 구축에 있어서 유스케이스 다이어그램을 그려서 시스템의 큰 기능을 만들고 그 유스케이스의 흐름을 가지고 시퀀스나 콜레버레이션 다이어그램에서 객체와 객체사이의 인터렉션을 정의하게 된다. 여기서 사용되는 객체의 행위와 속성을 가지고 클래스의 구체적 형상을 뽑아낼 수 있을 것이다. 물론 여러 번의 반복을 통한 클래스이 확정이 필요할 것이다.



    '소프트웨어공학 > UML이야기' 카테고리의 다른 글

    3. B Usecase Discription  (0) 2009.05.26
    5. Sequence Diagram  (1) 2009.02.06
    3. A. Usecase Diagram  (0) 2008.06.23
    2. UML의 구성  (0) 2008.06.16
    1. UML이 무엇이며 왜 중요한가.?  (0) 2008.06.16
    Posted by 서오석
    ,


    이건 내가 대학교 2학년 때 프로젝트로 제출 했던 도서관 요구사항 정의 Doc이다.

    요구사항 정의는 IEEE standard 의 기본을 따랐다. 안에는 웃기긴 하지만 시나리오도 같이 정의 되어있다.

    만약에 누군가 받아간다면 아주 아주 소프트웨어 공학을 공부하는데 유용한 자료가 될 듯 하다.

    그리고 수준이 딱 대학교 2학년 수준이라 각 항목마다 다를 수

    도 있다..^^;;

    목차는 다음과 같다.

    Table of Contents. 3

    1.0 Purpose. 4

    1.1 Introduction. 4

    1.2 Scope. 4

    1.3 Glossary. 4

    1.4 Team Member 4

    1.5 References 4

    2.0. General Description. 4

    2.1. Product Functions 4

    2.2. User Characteristics 5

    2.3. Constraints 5

    2.4. Basic Scenario. 5

    3.0 Specific requirements 7

    3.1 Explanation of category ID and Inscription rule. 7

    3.2 Functional requirements 7

    3.2.1 Functional requirements definitions 7

    3.2.2 The core functional requirements deduce. 7

    3.2.3 Functional requirements table. 8

    3.3 Non-functional requirements table. 9

    3.3.1 Non-functional requirements definitions 9

    3.3.2 Non-functional requirements 9

    3.4 Use cases modeling. 11

    3.4.1 System use cases 11

    3.4.2 Use cases summary. 11

    3.4.3 Detail Use cases scenario. 12

    3.5 Information Level Designed. 21

    3.5.1 Well Formed. 21

    3.5.2 Requirement Tracking Document 21

    3.5.3DBDL. 22

    4.0 External interface requirements 26

    4.1 User Interfaces 26

    4.2 Hardware Interfaces 26

    4.3 Software Interfaces 26

    4.4 Communication Interfaces 26



    어렵나..--;;

     

     

    Posted by 서오석
    ,
     
     

    지난 회에서 우리는 UML의 전체 구성에 대하여 알아보았다. 전체적인 구성을 보았으니 앞으로 각 다이어그램을 하나씩 보도록 하자.  이번 회에는 유스케이스 다이어그램에 관하여 알아보도록 하겠다.  많은 다이어그램 중에 왜 유스케이스 다이어그램을 가장 먼저 설명을 하는가에 대한 의문이 일것이다.  물론 필자의 마음일 수도 있지만 이 보다도 더 명확한 이유가 존재한다.  독자 여러분이 어떠한 방법론을 배우고 있다 하더라도 프로젝트를 수행함에 있어서 가장 먼저 수행되는 일이 동일할 것이다. 그것은 프로젝트가 무엇인지에 대한 기술이다. 프로젝트가 무엇인지 모르고 어떻게 프로젝트를 수행하겠는가?  이렇게 프로젝트가 무엇인지에 대해서 알아보는 것이 요구분석(Requirement Analysis)이다.  글의 흐름으로 보아 유스케이스 다이어그램이 요구분석을 위한 다이어그램이라는 것을 유추할 수 있을 것이다.  결국 유스케이스 다이어그램은 프로젝트 수행시 가장 먼저 나오는 다이어그램이고 다른 다이어그램의 배경이 되는 중요한 다이어그램이다.  이제부터 유스케이스 다이어그램을 자세히 알아보도록 하겠다.
     
    1. 표기(Notation)과 의미(Semantics)
    (1) 유스케이스(Usecase)
    사용자 삽입 이미지
    그림 1. 유스케이스

    유스케이스의 표기는 그림 1에서와 같이 타원으로 표시하고 이름을 속에 명시하게된다.
    (2) 유스케이스의 의미.
    유스케이스는 말 그대로 쓰임새를 나타낸다. 다시 말해 한 프로젝트의 결과물이 작동하여 사용되는 쓰임새를 분류하여 나타내는 것이다. 예를 들어 우리가 늘 상주하는 집을 들면 집이 사용되어지는 예를 들 수가 있다. 집은 식사를 위한 장소를 사용되어질 수 있고 아니면 휴식을 위한 장소 아니면 수면을 취하기 위한 장소.. 등등 여러가지 용도의 사용 예를 들 수 있다. 결국 이러한 여러 사용 예들이 집의 구조를 결정하는 사항이 될 것이다.
    (3) 액터(Actor)
    사용자 삽입 이미지

    그림 2 - 액터
    사용자 삽입 이미지

    그림 3 - 스테레오 타입이 액터인 클래스
    액터의 경우 그림 2에서 보는 바와 같이 스틱맨으로 표시하고 그 하단에 액터의 이름을 명시한다.  또한 그림 3와 같이 스테레오타입(Stereotype)을  'Actor' 로 가지는 클래스로 표기하기도 한다.
    (4) 액터의 의미
    액터는 구축해야할 시스템과 상호 교류하는 어떠한 사람이나 어떤 것이 될 수 있다. 예를 들어 입출금할 수 있는 ATM기계를 보면 입출금을 하는 행위자인 손님의 경우 하나의 액터가 될 수 있다. 그리고 ATM기계가 입출금의 처리를 위해 연결하는 은행의 주 전산망 또한 하나의 액터가 될 수 있다. 이렇듯이 구축하고자 하는 시스템의 쓰임새와 교류하는 외부적인 것들의 추상적인 역할을 액터라고 한다.
     
    2. 액터들간의 관계(Relationship)
    (1) 일반화(Generalization) 관계의 표기
    사용자 삽입 이미지

    그림 4 -액터와 액터 사이의 일반화 관계
    (2) 일반화 관계의 의미
    일반화 관계는 객체지향의 상속의 의미와 유사하다. 일반화된 액터의 모든 특성을 특수한 액터가 모두 가지게 된다. 그림 4에서와 같이 고객 액터의 모든 특성을 상업고객이 모두 포함하게 된다.
     
    3. 액터와 유스케이스, 유스케이스와 유스케이스 사이의 관계
    유스케이스와 유스케이스사이의 관계를 말하기에 앞서 알아두어야 할 사항이 있다. 현재 UML의 표준화된 버전은1.1 이다. 하지만 현시점에도 계속 버전업을 위한 수정이 가해지고 있다. 결과적으로 현재 1.3 RTF라는 표준화되지 않은 버전 또한 나와 있다.  유스케이스와 유스케이스와의 관계에서 1.1버전과 1.3버전의 차이점이 존재함을 유념하기 바란다.  필자는 표준인 1.1 을 대상으로 설명을 하도록 하겠다.
    (1) 통신(Communicates) 관계
    사용자 삽입 이미지

    그림 5 - 통신(Association) 관계
    (2) 통신 관계의 의미
    통신관계의 의미는 이러한 관계로 묶인 두 개체가 상호 작용을 한다는 의미이다.  그림 5에서와 같이 현금자동출납기계의 시스템에서 그 사용자와 사용자확인의 유스케이스는 상호작용을 하게 된다. 이를 관계로 표시한 것이 통신 관계이다. 참고로 UML1.3 RTF의 경우 통신관계는 연관(Association) 관계로 대체되어 사용되게 된다.
    (3) 확장(Extends) 관계
    사용자 삽입 이미지

    그림 6 - 확장(Extends) 관계
    (4) 확장 관계의 의미
    확장(Extends)관계는 유스케이스가 어떤한 조건이 만족할 경우 확장할 수 있는 확장시점(Extention Point)를 가지고 그 때 연관된 유스케이스를 포함하는 관계이다 예를 들면 그림 6에서와 같이 추가 요구시라는 확장시점에서 카탈로그요구의 유스케이스가 주문접수의 유스케이스에 포함되게 된다.
    (5) 사용(Uses) 관계
    사용자 삽입 이미지

    그림 7 - 사용(Uses) 관계
    (6) 사용 관계의 의미
    사용관계는 특정한 유스케이스가 다른 유스케이스를 포함하고 있는 경우를 나타낸다. 그림 7에서는 고객확인의 유스케이스가 주문접수의 유스케이스와 주문조사의 유스케이스를 모두 포함하게 되는 경우이다. UML 1.3 RTF에서는 Uses의 관계가 include의 관계로 이름이 바뀌어서 사용되게 된다.
    (7) 일반화(Generalization) 관계
    사용자 삽입 이미지

    그림 8 - 일반화(Generalization) 관계
    (8) 일반화 관계의 의미
    일반화 관계는 액터 사이의 일반화 관계와 동일하게 객체지향의 상속의 개념과 유사하다.
     
    4. 액터와 유스케이스의 추출법.
    실제로 시스템을 구축하기 위해 유스케이스 다이어그램을 그릴 때 액터와 유스케이스를 만들기가 막막할 것이다. 물론 정확한 액터와 유스케이스를 추출하기 위해서는 여러 번의 반복이 필요하지만 처음으로 추출할려는 사람은 다음과 같은 대충의 지표 등을 통해 추출해보는 것도 좋다.
    (1) 액터의 추출법
    1. 시스템의 주기능을 사용하는 사람은 누구인가.
    2. 누가 시스템으로부터 업무 지원을 받는가?
    3. 누가 시스템을 운영, 유지 보수하는가?
    4. 시스템과 정보를 교환하는 외부 시스템은 무엇인가?
    5. 시스템이 내어놓은 결과물에 누가 관심을 가지는가?
    (2) 유스케이스 추출법
    1. Actor가 요구하는 시스템의 주요 기능은 무엇인가?
    2. Actor가 시스템의 어떤 정보를 수정, 조회, 삭제, 저장하느가?
    3. 시스템이 Actor에게 주는 어떠한 Event가 있는가?,  Actor가 시스템에는 어떠한 Event가 있는가?
    4. 시스템의 입력과 출력으로 무엇이 필요한가? 그리고 입력과 출력이 어디에서 오고 어디에로 가는가?
    5. 시스템의 구현에서 가장 문제가 되는 점은 무엇인가?
     
    5. 시나리오
    유스케이스 다이어그램을 그리면서 빠뜨려서는 안될 내용이 시나리오이다. 유스케이스 다이어그램을 완성하였다면 유스케이스 다이어그램의 명세가 필요하게 된다. 즉 유스케이스 다이어그램이 무엇을 해야하고 어떻게 해야하는가에 같은 부연 설명이 필요한 것이다. 유스케이스는 순서에 의해 배열이 가능하고 이러한 순서를 일반적인 자연어 문장으로 표현하되 외부인이 보아도 알기쉬운 정도로 쉽게 기술하여야 한다.
    마무리?
    유스케이스 다이어그램은 다른 다이어그램을 그리기 위한 바탕이 되는 다이어그램이다. 즉 유스케이스 다이어그램이 잘못 되었다면 결과물은 잘못된 것일 수밖에 없다. 유스케이스 다이어그래이 잘 되었다면 이후 그려나갈 다른 다이어그램이 원래의 목적에 맞게 그릴 수 있는지 비교할 수 있는 좋은 바탕이 될 수 있다.
    참고로 유스케이스 다이어그램을 잘 그리기 위해 다음의 단계로 넘어가는 것을 주저하지 말기 바란다. 프로젝트를 잘 수행하기 위해서는 여러 번의 반복적 개발을 통해 오류의 수정 과정이 필요하고 이에 유스케이스 다이어그램을 수정하는 일도 포함된다. 즉 어느 정도 유스케이스 다이어그램이 완성되면 다음의 다이어그램을 진행하길 바란다.

    '소프트웨어공학 > UML이야기' 카테고리의 다른 글

    3. B Usecase Discription  (0) 2009.05.26
    5. Sequence Diagram  (1) 2009.02.06
    4. Class Diagram  (0) 2008.10.26
    2. UML의 구성  (0) 2008.06.16
    1. UML이 무엇이며 왜 중요한가.?  (0) 2008.06.16
    Posted by 서오석
    ,
    심원도
    E-mail:wideeye@www.plasticsoftware.com
    플라스틱 소프트웨어
    Homepage:www.plasticsoftware.com


    앞회에서 UML이 무엇이며 UML이 어떻게 만들어졌는지 대략적으로 알아보았다. 이번 호에서는 UML의 전반적인 구성에 대해서 알아보도록 하겠다.
    1. UML과 방법론의 차이
    UML의 구성을 알아보기에 앞서 먼저 UML과 방법론의 차이를 알아야 한다. 필자는 UML을 공부하는 초기에 UML을 하나의 방법론으로 착각하는 오류를 하였다. 물론 똑똑한 독자는 이러한 오류를 범하지 않으리라 생각하지만 혹시나 하는 마음에 먼저 언급하려고 한다.
    방법론이란 말그대로 어떠한 작업을 할 때 이러저러한 절차를 가지고 작업을 하면 된다라고 하는 것을 이론적으로 정립을 하여놓은 것이다. 소프트웨어공학에서 많은 방법론이 있어왔고 현재도 수많은 방법론이 존재한다. 사실 프로그램을 하는 모든 사람은 나름대로의 방법론을 가지고 있다. 그러한 나름의 방법론이 작업을 얼마만큼 효과적으로 만드는지에 따라 좋은 방법론인지 아닌지 결정 날 것이다.
    그럼 UML은 무엇인가?  UML은 이러한 방법론을 적용할 때의 결과물을 나타내기 위한 도구이다.  예를 들면 모든 소프트웨어를 설계 할 때 어떠한 표준적인 규칙을 가지고 설계도를 그려야한다. 이때 설계의 표준이 되는 것이 UML이다.  건축도면에서 나오는 건물 내부의 여러가지 표준적인 표기라 보면 될 것이다.  즉 각자 다양한 방법론을 자기의 프로젝트에 적용하더라도 UML을 공통적으로 적용할 수 있다.
    2. UML의 구성
    이제 UML이 어떻게 구성되어있는지 알아보도록 하겠다.  전체 UML은 8가지 다이어그램으로 나타난다. 시스템의 정적인 면을 나타내는 클래스 다이어그램(Class Diagram)이 있고 동적인 면을 나타내는 콜레버레이션 다이어그램(Collaboration Diagram), 시퀸스 다이어그램(Sequence Diagram), 상태 다이어그램(Statechart Diagram), 액티비티 다이어그램(Activity Diagram), 디플로이먼트 다이어그램(Deployment Diagram), 컴포넌트 다이어그램(Component Diagram)으로 구성되어져 있다.
    이외로 유스케이스 다이어그램(Usecase Diagram)이 존재한다. 유스케이스 다이어그램을 두 부류로 나누지 않은 이유는 다른 모든 다이어그램을 그리기 위해 기반이 되는 다이어그램이기 때문이다.이제 각 다이어그램이 시스템의 어떠한 면을 반영하는지 간단하게 알아보도록 하자.
    (1) 유스케이스 다이어그램 (Usecase Diagram)
    유스케이스 다이어그램은 유스케이스를 그려놓은 다이어그램이다. 여기서 유스케이스란 말 그대로 컴퓨터 시스템과 사용자가 상호작용을 하는 하나의 경우이다. 예를들어 보험처리 프로그램의 경우에 "고객이 보험증권에 sign한다.",  "보험 판매원이 판매통계량을 종합한다." 등이 use case가 된다. 이러한 유스케이스 다이어그램은 시스템 구축의 초기에 이 시스템이 어떠한 일을 하는지에 대한 부분을 사용자 입장에서 이해할 수 있을 정도로 기술을 하여야 한다. 이러한 유스케이스 다이어그램은 사용자와의 대화수단으로 그리고 앞으로 구축해 나갈 때의 밑바탕이 되는 것이다.
    사용자 삽입 이미지

    그림 1 - 유스케이스 다이어그램
    (2) 클래스 다이어그램 (Class Diagram)
    클래스 다이어그램의 경우 시스템 내부에 존재하는 클래스들을 선별하여 나타내고 각 클래스들의 속성(Attribute)과 행위(Behavior)를 기입한다. 여기서 클래스들 사이에 여러가지 관계(Relationship)를 가질수 있다. 예를 들어 연관관계(Association)은 클래스와 클래스가 어떠한 연관을 가지고 있음을 나타내고 여기서 세부적으로 복합연관(Composition)과 집합 연관관계 (Aggregation) 등으로 나뉘어 질 수 있다. 이외에 상속관계(Generalization), 의존관계(Dependency)가 나타날 수 있다. 클래스 다이어그램을 그리고자 할 때 항상 추상화 단계를 고려하여서 그리도록 하여야 할 것이다. 추상화의 단계가 높은 경우 대충의 속성과 행위를 기입하고 대충의 관계를 기입하여도 충분할 것이다. 이 단계에서 너무 상세한 내용을 찾고 기입하다 보면 클래스 다이어그램 내부에서 구현의 단계에서 이루어져야 할 일이 이루어지는 오류를 범하게 된다. 이러한 오류는 실제 구현 단계에서 커다란 위험의 요소를 내재하게 된다.
    사용자 삽입 이미지

    그림 2 - 클래스 다이어그램
    (3) 시퀸스 다이어그램 (Sequence Diagram)
    시퀸스 다이어그램은 콜레버레이션 다이어그램과 함께 시스템의 동적인 면을 나타내는 대표적인 다이어그램이다. 시스템이 실행시 생성되고 소멸되는 객체를 표기하고 객체들 사이에 주고 받는 메시지를 나타내게 된다. 콜레버레이션 다이어그램 또한 메시지의 흐름을 나타내지만 시퀸스 다이어그램 만의 특징이라면 횡축을 시간축으로 하여 시간의 흐름을 나타내어 메시지의 순서에 역점을 두고있다.
    사용자 삽입 이미지

    그림 3 - 시퀀스 다이어그램
    (4) 콜레버레이션 다이어그램 (Collaboration Diagram)
    콜레버레이션 다이어그램 또한 시퀸스 다이어그램과 함께 메시지의 흐름을 나타낸다. 하지만 콜레버레이션 다어그램은 객체와 객체들 사이의 관계 또한 표기하게 된다. 실제 UML에서 클래스의 인스턴스인 객체를 표기하는 다이어그램이 명시적으로 존재하지 않는다. 이러한 객체들 사이의 관계를 나타내기 위해 별도로 오브젝트 다이어그램(Object Diagram)을 사용하여도 되지만 오브젝트 다이어그램은 클래스 다이어그램과 크게 차이점이 없는 관계로 UML의 표준에는 포함되어있지 않다. 갑자기 이러한 오브젝트 다이어그램을 여기서 언급하는 이유는 객체들 사이의 관계를 표기하기 위해 클래스 다이어그램과 거의 동일한 오브젝트 다이어그램을 그리기 보다는 특별히 클래스 다이어그램과 차이점이 되는 부분을 여기 콜레버레이션 다이어그램에 기입하는 것이 좋을 것이다.
    사용자 삽입 이미지

    그림 4 - 콜레버레이션 다이어그램
    (5) 상태 다이어그램 (Statechart Diagram)
    상태 다이어그램은 한 객체의 상태 변화를 다이어그램으로 나타낸 것이다. 시스템의 실행시 객체의 상태는 메시지를 주고 받음으로써 또한 어떠한 이벤트를 받음으로써 많은 변화가 있을 수 있다.  실제 시스템에서 실행시 많은 객체가 생성되고 소멸된다. 이렇게 무수한 객체의 상태 전부를 모두 다이어그램으로 나타내는 것은 불가능하다.  결국 상태 다이어그램은 특별히 관심을 가져야 할 객체에 관하여 그리고 특정 조건에 만족하는 기간동안의 상태를 표시하여야 한다.
    사용자 삽입 이미지

    그림 5 - 상태 다이어그램
    (6) 액티비티 다이어그램 (Activity Diagram)
    액티비티 다이어그램은 플로우챠트가 UML에 접목이 되었다면 가장 이해가 빠를 것이다.  시스템 내부에 존재하는 여러가지 행위들 그리고 각 행위의 분기, 분기되는 조건 등을 모두 포함 하게 된다. 이러한 액티비티 다이어그램에서 기존 플로우 챠트와 다른 점은 어떠한 행위에 따라 객체의 상태를 표기할 수 있다는 것이다. 이러한 점을 제외하고 기존 플로우챠트와 표기법과 의미가 약간씩 달라질 뿐 크게 다르지 않다라고 보아도 좋다.
    사용자 삽입 이미지

    그림 6 - 액티비티 다이어그램
    (7) 디플로이먼트 다이어그램 (Deployment Diagram) 과 컴포넌트 다이어그램 (Component Diagram)
    이 두 다이어그램은 시스템의 물리적인 부분의 구성을 나타낸다. 디플로이먼트 다이어그램은 실제 하드웨어적인 배치와 연결상태를 나타낸다. 그리고 컴포넌트 다이어그램은 소프트웨어의 물리적 단위(Exe, dll 등 기타 library)의 구성과 연결상태를 나타내게 된다.
    사용자 삽입 이미지

    그림 7 - 디플로이먼트 다이어그램
    사용자 삽입 이미지

    그림 8 - 컴포넌트 다이어그램
    3. 이외의 사항들
    지금까지 UML의 다이어그램적인 구성에 대하여 알아보았다. 하지만 UML은 이러한 다이어그램적인 사항이 아닌 확장을 위한 여러가지 도구들을 준비되어있다. 예를들어 스테레오타입(Stereotype)이나 컨스트레인트(Constraint) 등의 의미적 변환을 위한 도구가 있다. 그리고 UML은 의미적인 무결성을 위해 메타모델을 위해 준비해 두었다. 이제 전체적인 UML의 구성이 어떻게 되어있는지 알수 있을 것이다.  다음 회부터 본격적으로 UML의 세부적 사항을 요목조목 알아보도록 하겠다.

    '소프트웨어공학 > UML이야기' 카테고리의 다른 글

    3. B Usecase Discription  (0) 2009.05.26
    5. Sequence Diagram  (1) 2009.02.06
    4. Class Diagram  (0) 2008.10.26
    3. A. Usecase Diagram  (0) 2008.06.23
    1. UML이 무엇이며 왜 중요한가.?  (0) 2008.06.16
    Posted by 서오석
    ,


     



    현재 많은 회사에서 소프트웨어에 대한 전략적인 가치가 증가됨에 따라 산업계에서는 소프트웨어
    생산의 자동화, 소프트웨어의 시간과 비용을 절감, 소프트웨어의 질을 향상시킬 수 있는 기술을
    모색하고 있다. 이러한 기술들로 현재 부상하고 있는 것이 컴포넌트 기술, 시각적(Visual) 프로그
    래밍, 패턴(Pattern)과 프레임워크(Framework) 등이 있다.

    업무의 처리과정에서 그 업무의 범위와 규모가 커짐에 따른 시스템의 복잡성을 처리할 필요성을
    느끼게 되었다. 특히 물리적인 시스템의 분산, 동시성(Cuncurrency), 반복성(Replication), 보안,

    결점보완, 시스템들의 부하에 대한 균등화(Load balancy)와 같은 반복해서 발생하는
    구조적 문제 대한 처리가 필요하게 되었다.

    추가적으로 웹의 발전에 따라 시스템을 만들기는 쉬워졌으나 이러한 구조적 문제는 더욱 악화되었다.  
    UML은 이러한 모든 필요성에 의해 만들어졌다.

    UML은 소프트웨어 시스템이나 업무 모델링(Business Modeling) 그리고

    기타의 비 소프트웨어 시스템등을 나타내는 가공물(Artifact)을 구체화(Specifying)하고,

    시각화(Visualizing)하고, 구축(Construction)하고, 문서화(Documenting)하기 위해 만들어진 언어이다.

    UML은 복잡하고 거대한 시스템을 모델링함에 있어 성공적으로 증명된 공학적인 경험들을 포함하고 있다.

    UML은 Rational Software와 그의 동료 회사에 의해 개발되었다.

    UML은 OMT, Booch, OOSE/Jacobson에서 발견되는 모델링 언어의 장점을 계승하였다.

    그리고 대부분의 회사들이 표준으로 제정된 UML을 가지고 그들의 개발 프로세스에 적용하고 있다.

    이러한 개발 프로세스들은 업무의 모델링과 요구의 관리, 분석과 디자인, 프로그래밍과 테스트를

    모두 포함하고 있다.

    ▶ 모델링의 중요성.
    강력한 소프트웨어 시스템을 만들기 위해 구축(Construction)하고 개선(Renovation)하기에 앞서
    모델을 만드는 것이 건물을 만들기 위한 청사진 만드는 것과 같이 핵심적인 요소이다.

    잘 만들어진 모델은 프로젝트 팀간의 통신수단으로써 그리고

    구조적인 문제를 해결하기 위한 수단으로써 핵심적인 것이다.

    시스템의 복잡성이 증가함에 따라 좋은 모델링을 하기 위한 기술은 더욱 중요하게 되었다.

    성공적인 프로젝트에서의 성공요소는 여러가지가 존재하지만 표준적이고 엄격한 모델링 언어를

    가지는 것이 핵심적이다.

    ▶ 모델링 언어가 반드시 포함하여야 하는 것.
    모델 요소(Model elelements) -> 기본적 모델링 개념과 의미
    표기(Notation) -> 모델요소의 시각적인 그림
    Guideline -> 관용적인 사용방법.
    시스템의 복잡성이 증가함에 따라 시각화(Visualization), 모델화(modeling)가 핵심적인 사항이
    되어가고 있다. UML은 이러한 필요성에 부응하기 위해 잘 정의되어져 있고 넓은 범위를 수용하도
    록 되어있다. 결과적으로 객체지향 시스템과 컴포넌트 기반 시스템을 구축하기 위해 시각적 모델
    링 언어를 선택하는 것도 필연적이다.

    ▶ UML의 목적
    UML로 디자인함에 있어서 최우선 목표는 다음과 같다.

    사용자에게 즉시 사용가능하고 표현력이 강한 시각적 모델링 언어를 제공함으로써 사용자는 의미
    있는 모델들을 개발하고 서로 교환할 수 있다.
    핵심적이 개념을 확장할 수 있는 확장성과 특수화 방법을 제공한다.
    특정 개발 프로세스와 언어에 종속되지 않는다.
    모델링 언어를 이해하기 위한 공식적인 기초를 제공한다.
    객체 지향 툴 시장의 성장을 장려한다.
    콜레버레이션(Collaboration), 프레임워크(Framework), 패턴(Pattern)과 Component와 같은 고수준
    의 개발 개념을 제공한다.


    ▶ OMG-UML의 범위
    UML은 소프트웨어가 중심이 되는 시스템을 나타내는 가공물(Artifact)을 구체화되고 시각화하고,
    문서화하기 위한 언어이다. 이러한 특징을 가진 UML의 범위를 다음의 세가지로 요약할 수 있다.
    첫째로 UML은 Booch, OMT, OOSE의 개념을 융화 시켜서 만들었기 때문에 그 결과는 사용자나 다른
    어떤 방법론에도 일반적이고 유일하며, 넓게 사용될 수 있다.

    둘째로 UML은 기존의 방법론들을 가지고 있는 어떠한 작업에도 적합한 방편을 제공한다.

    예를 들면 UML 저자들은 동시에 발생하는(Concurrent), 분산된(Distributed) 시스템의 모델링을 UML의 목표로 삼았다.

    셋째로 UML은 표준적인 방법론에 역점을 두지 않고 표준적인 모델링 언어에 역점을 두었다.

    이와 같이 표준 방법론을 제시하지 않는 이유는 서로 다른 문제 영역에 대해 서로 다른 방법론을 요구하기 때문이다.

    그래서 표준적 언어로의 UML은 첫째로 일반적인 메타모델(Metamodell)과 둘째로 일반적인 표기
    (Notation)에 노력이 집중되었다. 하지만 UML에서도 사용사례유도(UseCase Driven)의, 구조중심
    (Arcitecture-centric)의, 반복적인(Iterative), 점진적인(increment) 개념을 방법론에 적용하도
    록 권장하고 있다.

    ▶ UML의 범위 외부
    UML은 모든 것을 포함하는 언어가 아닌, 단순하고 표준화된 모델링의 제공을 목표로 하고 있다.
    이러한 점이 산업계 전반에 걸쳐 존재하는 다양한 시스템의 디자인에 UML이 사용될 수 있는 유연
    성을 제공한다.

    ▶ 프로그래밍(Programming) 언어
    UML은 비주얼 모델링 언어이지 비주얼 프로그래밍 언어가 아니다. 하지만 UML은 어떤 의미에서는
    비주얼 모델링 언어가 제공하는 모든 시각적이고 의미적인 모든 지원을 가지고 있다. UML은 소프
    트웨어가 중심이 되는 시스템을 나타내는 가공물(Artifact)을 구체화되고 시각화하고, 문서화하
    기 위한 언어이다. 하지만 UML은 실제 코드로의 지향을 위해 사용될 수 있다. 예를 드어 UML은 객
    체 언어와 밀접하게 묶여 사용이 가능하고 이것은 최고의 결과를 낼 수 있다.

    ▶ 툴(Tools)
    표준화 된 언어는 툴과 방법론을 위한 기본을 제공한다. OMG RFP(Request For Proposal) 의 목적
    은 툴들 상호 운용성(Interoperability)에 목적을 둔다. 이러한 툴 들의 상호 운용성은 UML이 제
    공하는 것과 같이 견고한 의미(Semantic)와 표기의 정의에 의존하고 있다. 즉 UML은 툴들의 상호
    운용성을 위해 툴인터페이스, 저장방법(Storage), 실행시간 모델(run-time model)등과 같은 방법
    을 제공하는 것이 아니라 의미적 메타모델(Metamodel)을 제공한다.

    ▶ 방법론(Process)
    세계 많은 업체들이 그들의 프로젝트 산출물(Artifact)을 위한 일반적인 언어로 UML을 사용할 것
    이다. 하지만 이들 업체들은 상이한 방법론에 동일한 UML 다이어그램을 사용하게 될 것이다. 즉
    UML은 의도적으로 방법론에 독립적인 언어로 만들어졌고 또한 표준화된 방법론을 정의하는 것이
    UML이나 OMG RFP의 목적이 아니다.

    ▶ UML의 기원과 어떻게 UML이 OMG의 표준이 되었는가
    객체지향적 분석과 디자인에 대해 다양한 방면으로 실험적인 접근을 하던 방법론자들에 의해서
    1970년 중반부터 1980년대까지 주목할 만하고 다양한 객체지향 모델링 언어가 나타나기 시작했
    다. 1989년에서 1994년까지 확연한 모델링 언어가 적게는 10개미만에서 많게는 50개 이상으로 증
    가하게 되었다. 객체 지향의 방법론을 사용하는 많은 사용자들이 하나의 모델링 언어에서 완벽하
    게 만족을 찾기 위해 많은 논쟁이 있었다.  이를 방법론전쟁(Method War)이라 한다. 1990년대 중
    반부터 이러한 방법론들이 새로운 모습으로 나타났고 이러한 방법론들이 서로 다른 방법론의 기술
    들을 융합하게 되었다. 그 결과 몇 개의 특출한 방법론들이 드러나게 되었다.

    UML의 개발은 1994년 후반에 Grady Booch와 Jim Rumbaugh에 의해 그들의 방법론인 Booch와 OMT의
    통합으로 시작되었다. 1995년 가을 Ivar Jachobson이 소속된 회사 Objectory와 Rational과 병합되
    면서 통합의 노력이 있었고 이에 Jacobson의 OOSE 방법론이 통합되었다.

    Booth, OMT, OOSE의 주요 저자인 Grady Booch, Jim Rumbaugh, Ivar Jacobson는

    다음의 세가지 이유로 통합된 모델링 언어를 만들게 되었다.

    첫째, 각각의 방법론들이 이미 각자 독립적인 발전하고 있었다.

    각자 방법론에서 사용자에게 혼란을 일으킬 불필요한 부분을 제거하여 같이 발전하는 것이 더 이치에 맞았다.

    둘째로 완벽한 의미와 표기의 통일로써 안정된 객체지향 시장을 형성할 수 있다.

    또한 프로젝트에 완벽한 모델링 언어를 제공하고 툴들에게 더 나은 특징을 제공하게 된다.

    셋째로 각자의 방법론이 서로 보완하여 더 나은 발전을 이룰 수 있고 각자의 방법론이 해결
    할 수 없는 문제를 해결할 수 있도록 도와준다.

    이들 세사람이 통합을 하기 위해 먼저 그들은 다음의 4가지의 목표를 두고 노력을 기울였다.

    객체지향 개념을 이용하여 소프트웨어 영역 뿐만 아니라 소프트웨어가 아닌 영역의 시스템도 모델
    링 할 수 있게 한다.
    실행 가능하거나 개념적인 산출물들을 명확하게 결합할 수 있게 만든다.
    복잡하고 프로젝트 성공여부에 민감한 시스템들에 준하는 논점에 역점을 둔다.
    인간이나 기계에 모두 유용한 모델링 언어를 만든다.
    Booth, Rumbaugh, Jacobson은 1996년 6월에 UML 0.9를 내놓았고 10월에 0.91의 문서를 내놓았다.
    1996년내에 UML저작자들은 여러가지 피드백을 받았고 이를 반영하게 되었다.

    Rational은 UML을 표준 모델링 언어로의 확정을 위한 노력도 들였다.

    1995년 초 Ivar Jacobson(Objectory의 기술담당 대표)과 Richard Soley(OMG의 기술 담당 대표)는

    방법론의 시장에 표준으로 정하기 위한 어려운 노력을 시작하였다.

    이러한 노력의 결과 1995년 6월에 쟁쟁한 방법론자들이 참석한 OMG의 주요 회의에서

    OMG의 비호아래 방법론의 표준으로 제정되었다.

    1996년 한 해동안 몇몇 기구에서 그들의 사업에 UML을 전략적인 도구로 보기 시작하였다.

    OMG에 의해 제공된 RFP(Request For Proposall)가 몇몇 기구들에게 그들의 의견을 많이 반영시킬 수 있
    도록 촉매제로서 제공되어졌다. 이에 Rational은 몇 개의 기구들과 함께 UML 파트너 협회를 만들
    었고 강력한 UML1.0을 만들기 위한 다양한 정보를 제공하게 되었다.

    이러한 모든 원조들의 UML1.0에 반영되었다. 이러한 협력업체로는 다음과 같다.

    Digital Equipment Corp, HP,  I-Logix, Intellicop, IBM, Icon Computing, MCI Systemhouse,
    Microsoft, Oracle, Rational Software, TI, Unisys.

    이러한 협력들이 잘 정의되었고 표현력이 강하고 강력하고, 일반적인 언어인 UML1.0를 만들게 되었다.

    이것은 결국 1997년 1월에 OMG에 의해 RFP의 응답으로 받아들여지게 되었다.

    1997년 1월에 IBM, Objectime, Platinum Technology, Ptech, Taslson, Reich Fechnologies and Softeam은

    OMG에 개별적으로 RFP에 대한 응답을 제출했다.

    이러한 회사들은 자신들의 의견을 반영하기 위해 UML협회에 참여하게 되었고, 결과적으로 UML은 1.1로 개선되었다.

    UML1.1의 중점사항은 UML의 의미적인 무결성을 추구하고 새로이 참여한 회사들의 의견을 반영하는 것에 있었다.

    결국 UML1.1은 1997년 가을에 OMG에 제출되었고 표준으로의 인정을 받았다.

    ▶ UML의 현재와 미래
    UML은 한 회사에 독점적이지 않고 모두에게 개방되어 있다. 이것은 일반 사용자나 과학단체의 필
    요성을 겨냥하여 나왔고 또한 기존의 주요한 방법론의 경험에 기초하여 만들어졌다.

    많은 방법론자들과 협의체, 툴 업체들로 UML을 사용하기에 동의했다.

    UML은 Booth, OMT, OOSE와 기타 주요한 방법론들과 유사한 의미론과 표기를 바탕을 만들어졌고

    또한 여러 회사들의 폭 넓은 의견을 반영되었기 때문에 매우 직접적이다.

    UML에서 목표로 하는 통합(Unified)의 의미로 다음의 두 가지 면을 가지고 있다.

    기존의 방법론들의 다양한 모델링 언어들 사이의 사소한 차이를 끝내는 것이다.
    여러 종류의 시스템(소프트웨어와 업무) 사이의 관점과 개발 단계(요구 분석, 디자인, 구현) 내부
    적인 개념의 통합을 의미한다.
    UML은 매우 상세한 언어로 정의 되어 있음에도 불구하고 미래의 모델링 개념으로 발전에 대한 벽
    은 존재하지 않는다. 우리는 아주 많은 앞서가는 기술에 관심을 두고있다. 이러한 모든 기술이
    UML의 차후 버전에 반영되기를 바랄 것이다. 앞서가는 많은 기술이 UML을 기초로 정의 될 수 있
    고 또한 이러한 UML의 확장으로 UML의 핵심이 변화되는 일은 없을 것이다.

    현재의 상황으로 보면 UML은 시각적 모델링을 위한, 시뮬레이션을 위한, 개발 환경으로써 많은 툴
    들의 기본이 될것으로 기대되어진다. 통합개발 환경이 개발됨에 따라 UML을 기초로한 구현은 점
    점 더 많이 늘어날 것이다.

    ▶ The Meta Object Facility
    OMG MOF의 핵심 목적은 CORBA의 인터페이스 집합을 제공하는 것이다.  MOF는 CORBA기반의 분산 개
    발 환경구축에 있어서 핵심적인 단위이다.

    MOF는 분산 객체의 환경에서의 객체 저장소, 객체 모델링 툴, 메타데이타 등의 영역에서 진행중
    인 작업을 통합적으로 표현한 것이다. MOF의 스펙은 UML 표기를 이용한다.  MOF의 인터페이스와
    의미들은 실제 상업적인 객체 저장소, 모델링 툴들, 객체의 프레임워크 제품들에 의해 구현된 메
    타데이터 관리의 앞서나가는 개념들을 포함하고 있다.

    MOF의 스펙은 일반적으로 분산 객체의 환경에서, 특수하게 분산 개발 환경에서 메타데이타의 호환
    성(Interoperability)과 메타데이타의 관리적인 측면을 강화하고 있다.

    이러한 강화의 초기작업으로 객체분석과 디자인의 영역에서 메타데이타의 호환성을 강화하고 있고

    이것은 앞으로 추가적인 영역을 제공하기에 충분할 것으로 기대되어진다.

     OMG는 이러한 추가적인 영역을 담당할 수 있는 새로운 RFP를 기대한고 있다.

    '소프트웨어공학 > UML이야기' 카테고리의 다른 글

    3. B Usecase Discription  (0) 2009.05.26
    5. Sequence Diagram  (1) 2009.02.06
    4. Class Diagram  (0) 2008.10.26
    3. A. Usecase Diagram  (0) 2008.06.23
    2. UML의 구성  (0) 2008.06.16
    Posted by 서오석
    ,

    우리 프로젝트의 이상덕군이 번역한 IEEE standard Testing 문서이다.

    1. Scope and References

     

    1.1 Inside the Scope

    Software unit testing is a process that includes the performance of test planning, the acquisition of a test set, and the measurement of a test unit against its requirements.

    소프트웨어 단위 테스팅은 테스트 계획의 수행과 test set의 획득, 그리고 그들이 요구하는 것과 반대하는 단위 테스트의 측정을 포함하는 process이다.

     

    Measuring entails the use of sample data to exercise the unit and the comparison of the unit's actual behavior with its required behavior as specified in the unit's requirements documentation.

    측정은 unit을 활용시키기 위한 샘플데이터의 사용법과 unit’s 요구사항 문서에 명세 된 것처럼

    unit’s의 실제 행동과 그것이 요구되는 행동의 비교가 필요하다.

     

    This standard defines an integrated approach to systematic and documented unit testing.

    이 표준은 조직적이고 문서화되었던 단위 시험의 통합된 접근법(연구법-길잡이)을 정의한다.

     

    The approach uses unit design and unit implementation information, in addition to unit requirements, to determine the completeness of the testing.

    시험의 완전함을 결정하기 위해,unit의 요구 사항들에 더하여,이 접근법은 unit 디자인과 unit 구현 정보를 사용한다.

     

    This standard describes a testing process composed of a hierarchy of phases, activities, and tasks and defines a minimum set of tasks for each activity.

    이 표준은 단계의 계층, 활동들, 그리고 task 그리고 각 activity의 최소화된 tasks set의 정의로 구성된 testing process를 묘사한다.

     

    Additional tasks may be added to any activity.

    추가의 작업들은 어떤 활동이라도 추가하게 될지도 모른다.

     

    This standard requires the performance of each activity.

    이 표준은 각 활동의 실행을 필요로 한다.

     

    For each task within an activity, this standard requires either that the task be performed, or that previous results be available and be reverified.

    활동 내의 각 task를 위해 이 표준은 어느 쪽이든지 요구된다. task는 수행되어야 한다 또는 이전의 결과들은 이용 가능하고 검사된다.

     

    This standard also requires the preparation of two documents specified in ANSI/IEEE Std 829-1983 [2]

    이 표준도 ANSI/IEEE Std 829-1983[2]에 명세 된 2개의 문서들의 준비를 필요로 한다

     

    These documents are the Test Design Specification and the Test Summary Report.

    이 문서들은 Test 설계 명세서 와 Test 요약 보고서이다.

     

    General unit test planning should occur during overall test planning.

    전반적인 단위 시험 계획은 전반적인 test planning동안 일어나야 한다.

     

    This general unit test planning activity is covered by this standard, although the balance of the overall test planning process is outside the scope of this standard.

    비록 전반적인 test planning process의 균형은 이 표준의 범위 밖에 있지만, general unit test planning activity는 이 standard에 있다.

     

    This standard may be applied to the unit testing of any digital computer software or firmware.

    이 표준은 어떤 디지털 컴퓨터 소프트웨어 또는 firmwareunit testing에 적용하게 될지도 모른다.

     

    However, this standard does not specify any class of software or firmware to which it must be applied, nor does it specify any class of software or firmware that must be unit tested.

    그러나, software 또는 firmware의 어떤 클래스도 반드시 지정 되어야 한다거나 반드시 지정되지 않아야 한다는 것이 이 표준에서는 소프트웨어의 어떤 class 또는 firmware도 지정되지 않았다.

     

    This standard applies to the testing of newly developed and modified units.

    이 표준은 새로이 발전되고 수정되었던 unitstesting하는 것을 적용한다.

     

    This standard is applicable whether or not the unit tester is also the developer.

    Unit 시험자가 또한 개발자 일지라도 하여간 이 표준은 적용할 수 있다.

     

    1.2 Outside the Scope

     

    The results of some overall test planning tasks apply to all testing levels (for example, identify security and privacy constraints).

    약간의 전반적인 test planning tasks의 결과들은 모든 testing 수준들(예를 들어 identify security(기밀 보호성 확인) privacy constraints(비밀제약))에 적용한다.

     

    Such tasks are not considered a part of the unit testing process, although they directly affect it.

    비록 그들이(tasks) 직접 그것에(unit testing process)영향을 끼치지만, 그러한 tasks unit testing process의 일부로서 간주되지 않는다.

     

    While the standard identifies a need for failure analysis information and software fault correction, it does not specify a software debugging process.

    이 표준이 실패 분석 정보와 소프트웨어 결함 정정의 필요성을 확인할지라도, 그것을 software debugging process라고 지정하지 않는다.

     

    This standard does not address other components of a comprehensive unit verification and validation process, such as reviews (for example, walkthroughs, inspections), static analysis (for example, consistency checks, data flow analysis), or formal analysis (for example, proof of correctness, symbolic execution).

    이 표준은 비평들(e.g. 검토회, 검사들) 정적 분석 (e.g. 일관성 검사, data flow 분석), 또는 공식적인(formal) 분석(e.g. 정확함의 증명, 기호 실행)과 같은 광범위한 unit 확인과 유효한 process들에 관해 언급하지 않는다.

     

    This standard does not require the use of specific test facilities or tools.

    이 표준은 특정의 test 설비들 또는 도구들의 사용이 필요하지 않는다.

     

    This standard does not imply any particular methodology for documentation control, configuration management, quality assurance, or management of the testing process.

    이 표준은 자료관리, 형상관리, 품질보증 또는 testing process의 관리를 위한 어떤 특정한 방법론을 의미하지 않는다.

     

    1.3 References

    This standard shall be used in conjunction with the following publications.

    이 표준은 동시 발행될 아래의 출판물들에 사용될 것이다.

    [1] ANSI/IEEE Std 729-1983, IEEE Standard Glossary of Software Engineering Terminology.

    [2] ANSI/IEEE Std 829-1983, IEEE Standard for Software Test Documentation.

     

    2. Definitions

    This section defines key terms used in this standard but not included in ANSI/IEEE Std 729-1983 [1] or ANSI/IEEE Std 829-1983 [2].

    이 섹션은 이 표준에서 사용되는 key 단어들을 정의한다. 그러나 ANSI/IEEE Std 729-1983[1] or ANSI/IEEE Std 829-1983[2]에는 포함되지 않는다.

     

    characteristic: See: data characteristic or software characteristic.

    특징: See: 데이터 특징 또는 소프트웨어 특징

    data characteristic:  An inherent, possibly accidental, trait, quality, or property of data (for example, arrival rates, formats, value ranges, or relationships between field values).

    data characteristic: 하나의 고유의, 아마도 비본질성,특징,품질 또는 data의 속성(예를 들면 arrival ratesformatsvalue ranges 또는 field values 사이의 관계들)

     

    feature: See: software feature. (feature: 특징)

     

    incident: See: software test incident. (incident: 우발 사건, 부수적인 것)

     

    nonprocedural programming language: A computer programming language used to express the parameters of a problem rather than the steps in a solution (for example, report writer or sort specification languages). Contrast with procedural programming language.

    비 절차형 프로그래밍 언어: 컴퓨터 프로그래밍 언어로 solution에서 명령을 하나 실행 시키는 것(step)보다도 문제의 매개변수를 나타내기 위해 사용된다. procedural programming language와 대조된다.

     

    procedural programming language: A computer programming language used to express the sequence of operations to be performed by a computer (for example, COBOL). Contrast with nonprocedural programming language.

    절차형 프로그래밍 언어: 컴퓨터(예를 들면 COBOL)로 실행되는 operations의 순서를 나타내기 위해 사용되는 프로그래밍 언어. nonprocedural programming language와 대조된다.

     

    software characteristic: An inherent, possibly accidental, trait, quality, or property of software (for example, functionality, performance, attributes, design constraints, number of states, lines of branches).

    software characteristic: 하나의 고유의, 아마도 비본질성,특징,품질 또는 software의 속성(예를 들어 기능성, 운용, 속성들(attributes), 설계 제약들, number of states, 분기의 수

     

    software feature:  A software characteristic specified or implied by requirements documentation (for example, functionality, performance, attributes, or design constraints).

    software feature: 요구 사항 문서에 의해 명기 또는 내포되는 소프트웨어 특징. (예를 들어, 기능성, 운용, 속성들, 설계 제약들)

     

    software test incident: Any event occurring during the execution of a software test that requires investigation.

    software test incident: software test를 실행하는 동안 일어나는 어떤 이벤트로 조사가 요구된다.

     

    state data: Data that defines an internal state of the test unit and is used to establish that state or compare with existing states.

    test unit의 내부의 상태를 정의하고 상태를 확립하거나 또는 현재의 상태와 비교하기 위하여 사용되는 데이터이다.

     

    test objective: An identified set of software features to be measured under specified conditions by comparing actual behavior with the required behavior described in the software documentation.

    test objective(조사 목적): software문서에 묘사된 요구되는 행동과 실제 행동을 비교하는 것에 의해 하나의 지정된 software feature의 집합은 지정된 조건하에 측정된다.

     

    test set architecture: The nested relationships between sets of test cases that directly reflect the hierarchic decomposition of the test objectives.

    test set architecture: test objectives의 계층적인 분해를 직접적으로 반영하는 test cases sets사이의 이입되는(포개지는) 관계

     

    test unit:  A set of one or more computer program modules together with associated control data, (for example, tables), usage procedures, and operating procedures that satisfy the following conditions:

    test unit: 아래의 조건을 만족하는 하나 또는 하나 이상의 computer program modules과 함께 연합된 제어 자료(e.g. tables), 사용 과정 및 절차

     

    A test unit may occur at any level of the design hierarchy from a single module to a complete program.

    하나의 Test unit은 하나의 module에서 완전한 프로그램까지 design 계층의 어떤 level에서도 일어날 수 있다.

     

    Therefore, a test unit may be a module, a few modules, or a complete computer program along with associated data and procedures.

    그러므로 test unit은 연합된 data와 절차들과 함께 하나의 module, 약간의 modules 또는 완전한 컴퓨터 프로그램일지도 모른다.

     

    1) All modules are from a single computer program

    모든 modules은 단 한 개의 컴퓨터 프로그램으로부터 있다.

     

    2) At least one of the new or changed modules in the set has not completed the unit test

    unit test가 완료되지 않은 적어도 1개의 새로운 또는 변화된 modules을 가지고 있다.

     

    A test unit may contain one or more modules that have already been unit tested.

    Test unit은 이미 unit test가 준비된 하나 또는 그 이상의 modules를 포함할지도 모른다.

     

    3) The set of modules together with its associated data and procedures are the sole object of a testing process

    modules의 집합은 그것이 연합된 data와 절차들과 함께 testing process의 단 하나의 object이다.

     

    unit: See: test unit.

     

    unit requirements documentation: Documentation that sets forth the functional, interface, performance, and design constraint requirements for the test unit.

    unit requirements documentation: test unit을 위한 외적 기능, interface, 성능과 설계 제약 요구사항을 기록한 문서화 작업

     

    3. Unit Testing Activities

    This section specifies the activities involved in the unit testing process and describes the associated input, tasks, and output. The activities described are as follows:

    이 섹션은 unit testing process가 포함된 활동을 지정(명기)하고 연합된 input, tasks, output을 기술한다. 그 활동의 기술은 다음과 같다.

     

    1) Perform test planning phase

     test planning 단계를 실행한다.

    a) Plan the general approach, resources, and schedule

    일반적인 접근법, 자원, 그리고 일정을 계획하라

    b) Determine features to be tested

    test될 특징을 결정하라.

    c) Refine the general plan

    대체적인 계획안을 정의해라.

     

    2) Acquire test set phase

    test set 단계를 습득하라.

    a) Design the set of tests

    tests의 집합을 설계하라.

    b) Implement the refined plan and design

    정의한 계획과 설계를 구현하라.

     

    3) Measure test unit phase

    test unit phase를 측정하라.

    a) Execute the test procedures

    test 절차를 실행하라.

    b) Check for termination

    종단(종료)를 검사하라.

    c) Evaluate the test effort and unit

    test effort(공수)unit을 평가하라.

     

    When more than one unit is to be unit tested (for example, all those associated with a software project), the Plan activity should address the total set of test units and should not be repeated for each test unit.

    하나 이상의 unit unit 시험될 때(예를 들어 software project와 관련된 모든 것들) 시험 활동은 전체 test units의 집합을 언급해야 하고, test unit를 반복해서는 안 된다.

     

    The other activities must be performed at least once for each unit.

    다른 활동은 각 unit을 위해 적어도 한번 수행되어야 한다.

     

    Under normal conditions, these activities are sequentially initiated except for the Execute and Check cycle as illustrated in Fig 1.

    일반적인 조건들 하에, 이 활동들은 Fig 1. 에 도시되는 것처럼 Execute Check cycle을 제외하고 순차적으로 시작한다.

     

     When performing any of the activities except Plan, improper performance of a preceding activity or external events (for example, schedule, requirements, or design changes) may result in the need to redo one or more of the preceding activities and then return to the one being performed.

    Plan을 제외하고 활동들의 무엇이든지 실행할 때, 진행 활동 또는 외부의 사건(예를 들어 일정, 요구사항들, 또는 설계 변경)의 부적당한 실행은 하나 또는 그 이상의 활동들의 진행을 다시 하는 필요를 가져올지도 모른다. 게다가 실행되고 있는 하나로 돌아올지도 모른다.  

     

    사용자 삽입 이미지

    Fig 1 – Unit Testing Activities

     

    During the testing process, a test design specification and a test summary report must be developed. Other test documents may be developed.

    testing 과정(process) 동안, test 설계 명세서와 test 요약 리포트는 자세히 기술해야 한다. 다른 test 문서들도 자세히 기술해야 할지도 모른다.

     

     All test documents must conform to the ANSI/IEEE Std 829-1983 [2]. In addition, all test documents must have identified authors and be dated.

    모둔 test 문서는 반드시 ANSI/IEEE Std 829-1983 [2]를 따라야 한다. 게다가, 모든 test 문서는 반드시 저자의 신원은 확인되어야 하고 연대는 추정되어야 한다.

     

    The test design specification will derive its information from the Determine, Refine, and Design activities. The test summary report will derive its information from all of the activities.

    test 설계 명세서는 Determine, Refine, Design 활동들로부터 그 정보를 끌어낼 것이다. test 개요 리포트는 모든 활동들로부터 그것의 정보를 끌어낼 것이다.

     

    3.1 Plan the General Approach, Resources, and Schedule.

    일반적인 접근법, 자원들, 그리고 일정을 계획해라.

    General unit test planning should occur during overall test planning and be recorded in the corresponding planning document.

    일반적인 unit test planning은 전체의 test planning동안 일어나야만 하고 일치하는 계획문서에서 기록되어야 한다.

     

    3.1.1 Plan Inputs: Inputs을 계획해라

    1) Project plans: 프로젝트 계획들

    2) Software requirements documentation: 소프트웨어 요구사항 문서

     

    3.1.2 Plan Tasks: 계획 작업들

    (1)Specify a General Approach to Unit Testing.

    : Unit testing을 위해 일반적인 접근법(방법)을 열거하라.

     

    Identify risk areas to be addressed by the testing. Specify constraints on characteristic determination (for example, features that must be tested), test design, or test implementation (for example, test sets that must be used).

    testing에 의해 언급되는 위험 지역을 확인해라. characteristic determination(특질 있는 결정-

    예를 들어 반드시 test된 특징), test 설계, 또는 test 구현(예를 들어, 반드시 사용된 test sets)의 제약을 열거(상술)하라.

     

    Identify existing sources of input, output, and state data (for example, test files, production files, test data generators).

    입력과 출력 그리고 state data(예를 들어, test 파일들, 제작 파일들, test data generators(생성 프로그램-발생기)) source들이 존재하는지 확인해라.

     

    Identify general techniques for data validation.

    자료 확인(비준)을 위한 일반적인 기술들을 확인해라

     

    Identify general techniques to be used for output recording, collection, reduction, and validation.

    기록, collection, 정리, 확인을 출력하기 위해 사용되는 일반적인 기술을 확인해라.

     

    Describe provisions for application software that directly interfaces with the units to be tested.

    test units을 직접적으로 인터페이스와 연결한 응용 소프트웨어를 위한 조항(규정)을 기술하라.

     

    (2)Specify Completeness Requirements.

    요구사항 완전성을 열거하라.

    Identify the areas (for example, features, procedures, states, functions, data characteristics, instructions) to be covered by the unit test set and the degree of coverage required for each area.

    unit test set과 각 area를 위한 요구된 적용범위의 정도(등급)에 의해 덮이는(에 포함되는 아니면 보호되는) areas(예를 들어, 특징들, 절차들, 상태들, functions, data characteristics, 명령어들) 를 확인해라.

     

    When testing a unit during software development, every software feature must be covered by a test case or an approved exception.

    소프트웨어 개발과정 동안 하나의 unit testing할 때, test case(선례) 또는 승인된 예외에 의해 모든 소프트웨어 특징은 반드시 보유해야 한다.

     

    The same should hold during software maintenance for any unit testing.

    마찬가지로 어떠한 unit testing이라도 소프트웨어 유지기간 중에 보유해야 한다.

     

    When testing a unit implemented with a procedural language (for example, COBOL) during software development, every instruction that can be reached and executed must be covered by a test case or an approved exception, except for instructions contained in modules that have been separately unit tested.

    소프트웨어 개발 중에 절차적인 언어(e.g. COBOL)로 구현된 unit testing할 때, modules (개별적으로(단독으로) test unit)을 포함하는 명령어들을 제외하고, test case 또는 승인된 예외에 의해 도달가능하고(=be reached) 실행될 수 있는 모든 명령어는 보호되어야 (포함되어야) 한다.

     

    The same should hold during software maintenance for the testing of a unit implemented with a procedural language.

    마찬가지로 절차상의 언어로 구현된 unit testing을 소프트웨어 유지보수 중에 (기억장치에)남겨둬야 한다.

     

    (3)Specify Termination Requirements.

    종료 요구사항을 열거하라

    Specify the requirements for normal termination of the unit testing process.

    unit testing process(처리단위)의 일반적인 종료 요구사항들을 열거하라.

     

    Termination requirements must include satisfying the completeness requirements.

    종료 요구사항들은 반드시 충분한 요구사항 완전성을 포함해야 한다.

     

    Identify any conditions that could cause abnormal termination of the unit testing process (for example, detecting a major design fault, reaching a schedule deadline) and any notification procedures that apply.

    어떤 조건 - 비정상적인 종료를 야기할 수 있는 unit testing process(예를 들어, 주요한 설계 결점을 찾거나, 일정 마감에 도달했는지)와 적용하는 어떤 통지절차들 - 을 확인해라(식별해라)

     

    (4) Determine Resource Requirements.

    resource 요구사항을 결정하라.

     

    Estimate the resources required for test set acquisition, initial execution, and subsequent repetition of testing activities.

    test set의 획득, 최초의 실행, 그리고 testing 활동들 다음의 반복에 요구된 자원을 측정하라.

     

    Consider hardware, access time (for example, dedicated computer time), communications or system software, test tools, test files, and forms or other supplies.

    하드웨어, 접근 시간(e.g. 바쳐진(?) 컴퓨터 시간), 통신수단들 또는 system software, test 도구들, test 파일들 그리고 다른 form(서식) 또는 다른 소모품들을 고려해라.

     

    Also consider the need for unusually large volumes of forms and supplies.

    또한 보통과는 달리(드문 방식으로) 많은 양의 서식과 소모품들의 필요성을 고려해라.

     

    Identify resources needing preparation and the parties responsible.

    준비와 책임 당사자들이 필요한 자원을 확인해라.

     

    Make arrangements for these resources, including requests for resources that require significant lead time (for example, customized test tools).

    이 자원들을 신청한 자원(중요한 lead time을 요구하는- e.g. customized test tools)을 포함한 준비(정렬)하라. (customize: 자기 취미에 맞도록 설정을 바꾸다)

     

    Identify the parties responsible for unit testing and unit debugging.

    unit testing unit debugging의 책임이 있는 당사자들을 확인해라.

     

    Identify personnel requirements including skills, number, and duration.

    능력(기술들), 동료, 존속기간을 포함하는 인사 요구사항을 확인해라.

     

    (5)Specify a General Schedule.

     

    Specify a schedule constrained by resource and test unit availability for all unit testing activity.

    모든 unit testing 활동을 위한 자원과 test unit 유효성에 의해 강요 받는 일정을 확인해라.

     

    3.1.3 Plan Outputs

    (1) General unit test planning information (from 3.1.2 (1) through (5) inclusive)

    정보를 계획하고 있는 전반적인 단위 시험

     

    (2) Unit test general resource requests-if produced from 3.1.2 (4)

    전반적인 자원 requests-if 3.1.2에서 만들어 내었던 단위 시험

     

    3.2 Determine Features To Be Tested: test된 특징들을 결정하라

     

    3.2.1 Determine Inputs: 입력을 결정하라.

    (1) Unit requirements documentation: unit 요구사항들 문서화

    (2) Software architectural design documentation-if needed:

    소프트웨어 구조 설계 문서화 필요하다면

     

    3.2.2 Determine Tasks: task들을 결정해라.

    (1)Study the Functional Requirements.

    기능적 요구사항들을 연구해라.

     

    Study each function described in the unit requirements documentation.

    unit 요구 사항 문서에 기술된 각 기능에 대해 연구해라.

     

    Ensure that each function has a unique identifier.

    각 기능이 유일한 식별자를 가지는 것을 (보증한다).

     

    When necessary, request clarification of the requirements.

    필요하다면, 요구 사항들의 설명(해명)을 요청해라.

     

    (2)Identify Additional Requirements and Associated Procedures.

    추가적인 요구 사항 들과 관련된 절차들을 확인해라.

     

    Identify requirements other than functions (For example, performance, attributes, or design constraints) associated with software characteristics that can be effectively tested at the unit level.

    요구 사항들 이외의 unit level에서 효과적으로 test할 수 있는 소프트웨어 characteristics와 관련된 기능(e.g. 성능, 속성들 또는 설계 제약들)들을 확인해라.

     

    Identify any usage or operating procedures associated only with the unit to be tested.

    오직 test unit과 연관된 어떤 사용()또는 운용 절차들을 확인해라.

     

    Ensure that each additional requirement and procedure has a unique identifier.

    각 추가적인 요구 사항과 절차는 유일한 식별자를 가지는 것을 보증한다.

     

    When necessary, request clarification of the requirements.

    필요하다면,필요 조건들의 설명 요청해라.

     

    (3)Identify States of the Unit.

    unit의 상태를 확인해라.

    If the unit requirements documentation specifies or implies multiple states (For example, inactive, ready to receive, processing) software, identify each state and each valid state transition.

    만약 unit 요구 사항 문서가 복수의 상태 소프트웨어(e.g. 비활동, ready to receive, processing)를 명기하거나 의미하면, 각 상태와 각 유효한(타당한) 상태 변화를 확인해라.

     

    Ensure that each state and state transition has a unique identifier.

    각 주립이고 주립의 이행이 유일한 식별자를 가질 것을 확인해라.

     

    When necessary, request clarification of the requirements.

    필요하다면,필요 조건들의 설명을 요청해라.

     

    (4)Identify Input and Output Data Characteristics.

    data characteristics의 입력과 출력을 확인하라.

     

    Identify the input and output data structures of the unit to be tested.

    test unit의 입출력 자료 구조들을 확인하라.

     

    For each structure, identify characteristics, such as arrival rates, formats, value ranges, and relationships between field values.

    각 구조(=structure)를 위해 characteristics – arrival rates(도착 비율들), formats, 값의 범위, 그리고 field 값들 사이의 관계와 같은 을 확인하라.

    For each characteristic, specify its valid ranges.

    characteristic를 위해 그들의 유효한 범위를 지정하라.

     

    Ensure that each characteristic has a unique identifier.

    characteristic는 유일한 식별자를 가지는 것을 보증하라.

     

    When necessary, request clarification of the requirements.

    필요하다면,필요 조건들의 설명을 요청하라.

     

    (5)Select Elements to be Included in the Testing.

    testing에 포함시키게 되는 요소들을 선택하라.

     

    Select the features to be tested. test된 특징들을 선택하라.

     

    Select the associated procedures, associated states, associated state transitions, and associated data characteristics to be included in the testing.

    관련된 절차들, 관련된 상태들,관련된 상태의 변화 그리고 관련된 data characteristics(testing에 포함시키게 되는)를 선택하라.

     

    Invalid and valid input data must be selected.

    무효하고 유효한 입력 자료들은 반드시 선택되어야 한다.

     

    When complete testing is impractical, information regarding the expected use of the unit should be used to determine the selections.

    완전한 시험이 비현실(비 실용)적일 때, 기대되는(예상되는) unit의 사용에 관한 정보는 선택들을 결정하기 위해 사용되어야 한다.

     

    Identify the risk associated with unselected elements.

    선택되지 않은 요소들과 관련된 위험을 확인하라.

     

    Enter the selected features, procedures, states, state transitions, and data characteristics in the Features to be Tested section of the unit’s Test Design Specification.

    unit Test 설계 명세서의 ‘test된 특징들의 섹션에 선택된 특징들, 절차들, 상태들, 상태 변화, 그리고 characteristics를 넣어라.

     

    3.2.3 Determine Outputs

    (1) List of elements to be included in the testing (from 3.2.2 (5))

    요소들(from 3.2.2)의 목록은 testing에 포함시키게 된다.

     

    (2) Unit requirements clarification requests-if produced from 3.2.2 (1) through (4) inclusive

    unit 요구 사항들 설명을 요청한다 만약 3.2.2 (1)에서부터 (4)를 포함하여 만들어지면

     

    3.3 Refine the General Plan

    전반적인 계획을 세밀히 구별하라(상세히 논술하라)

     

    3.3.1 Refine Inputs: 입력들을 상세히 논술하라.

    (1) List of elements to be included in the testing (from 3.2.2 (5))

    요소들(from 3.2.2)의 목록은 testing에 포함시키게 된다.

     

    (2) General unit test planning information (from 3.1.2 (1) through (5) inclusive)

    전반적인 단위 시험 계획 정보(3.1.2 1에서 5까지 포함하여)

     

    3.3.2 Refine Tasks: Tasks를 상세히 논술하라.

    (1)Refine the Approach: 접근법을 상세히 논술하라.

     

    Identify existing test cases and test procedures to be considered for use.

    사용을 위해 고려되는 현재의 test cases들과 test 절차들을 확인하라.

     

    Identify any special techniques to be used for data validation.

    data 확인을 위해 사용되는 특별한 어떤 기술들을 확인하라.

     

    Identify any special techniques to be used for output recording, collection, reduction, and validation.

    출력 기록, collection, 정리, 그리고 확인을 위해 사용되는 어떤 특별한 기술을 확인하라.

     

    Record the refined approach in the Approach Refinements section of the unit’s test design specification.

    unit test 설계 명세서의 Approach Refinements 섹션에 상세히 논술된 접근법을 기록하라.

     

    (2)Specify Special Resource Requirements.

    특별한 자원 요구 사항들을 확인하라.

     

    Identify any special resources needed to test the unit (for example, software that directly interfaces with the unit).

    Unit (e.g. unit에 직접적으로 인터페이스로 접속하는 소프트웨어) test하기 위해 필요로 하는 어떤 특별한 자원을 확인하라.

     

    Make preparations for the identified resources.

    확인된 자원을 위한 사전 준비를 하다.

     

    Record the special resource requirements in the Approach Refinements section of the unit’s test design specification.

    unit test 설계 명세서의 Approach Refinements 섹션에 특별한 자원 요구 사항들을 기록하라.

     

    (3) Specify a Detailed Schedule.상세한 계획을 지정하라.

    Specify a schedule for the unit testing based on support software, special resource, and unit availability and integration schedules.

    지원 소프트웨어, 특별한 자원, unit 유효성과 통합 일정에 근거하여 unit testing을 위한 일정을 지정하라.

     

    Record the schedule in the Approach Refinements section of the unit’s test design specification.

    unit test 설계 명세서의 Approach Refinements 섹션에 일정을 기록하라.

     

    3.3.3 출력들을 정련해라

    (1) 정보(완전히 3.3.21)(3)로부터 포함하게 되는)를 계획하고 있는 특정의 단위 시험

    (2) 만일 3.3.22)에서 만들어 내게 되면 특별한 자원이 요청하는 단위 시험.

     

    3.3.3 Refine Outputs – 출력들을 상세히 논술하라.

     

    (1) Specific unit test planning information (from 3.3.2 (1) through (3) inclusive)

    특정의 단위 시험을 계획하는 정보(3.3.2 (1)에서 (3)을 포함하는)

     

    (2) Unit test special resource requests - if produced from 3.3.2 (2).

    특별한 자원이 요청하는 단위 시험 만약 3.3.2(2)로부터 만들어졌다면.

     

    3.4 Design the Set of Tests: tests의 집합 설계

     

    3.4.1 Design Inputs: 입력들을 설계하라.

    (1) Unit requirements documentation: 단위 요구 사항 문서

    (2) List of elements to be included in the testing (from 3.2.2 (5))

    (3.2.2 (5)로부터)testing에 포함시키게 되는 요소들의 목록

    (3) Unit test planning information (from 3.1.2 (1) and (2) and 3.3.2 (1))

    (3.1.2 (1) 3.3.2(1)로부터) 단위 시험을 계획하는 정보

    (4) Unit design documentation: 단위 설계 문서

    (5) Test specifications from previous testing - if available:

    이전의 시험으로부터의 시험 명세서 만약 이용할 수 있다면

     

    3.4.2 Design Tasks: 태스크들을 설계하라.

     

    (1) Design the Architecture of the Test Set. - 시험 집합의 구조 설계를 설계하라.

    Based on the features to be tested and the conditions specified or implied by the selected associated elements (for example, procedures, state transitions, data characteristics), design a hierarchically decomposed set of test objectives so that each lowest-level objective can be directly tested by a few test cases.

    시험된 특징들과 선택된 연관된 요소들(e.g. 절차들, 상태 변화, data characteristics)에 의해 지정되거나 포함된 조건들에 근거하여 시험 계층적으로 분석된 목적들의 집합을 설계하면 각 최하의 수준 목적은 약간의 시험 사례에 의해 직접적으로 시험될 수 있다.

     

    Select appropriate existing test cases. 적절한 현재의 시험 사례를 선택하라.

     

    Associate groups of test-case identifiers with the lowest-level objectives.

    최하 수준 목적들로 시험 사례 식별자들의 집단을 결합시켜라.

     

    Record the hierarchy of objectives and associated test case identifiers in the Test Identification section of the unit’s test design specification.

    목적들의 계층과 연관된 시험 사례 식별자들을 단위 시험 설계 명세서의 Test identification 섹션에 기록하라.

     

    (2) Obtain Explicit Test Procedures as Required.

    필요에 따라 명백한 시험 절차들을 획득하라.

     

    A combination of the unit requirements documentation, test planning information, and test-case specifications may implicitly specify the unit test procedures and therefore minimize the need for explicit specification.

    단위 요구사항 문서, 시험 계획 정보, 그리고 시험 항목 규정의 조합은 내재적으로 단위 시험 절차들을 지정할지도 모르고, 그 결과 명백한 명세서의 필요성을 최소화한다.

     

    Select existing test procedures that can be modified or used without modification.

    수정될 수 있거나 수정 없이 사용될 수 있는 현재의 시험 절차들을 선택하라.

     

    Specify any additional procedures needed either in a supplementary section in the unit’s test design specification or in a separate procedure specification document.

    단위 시험 설계 명세서의 보충하는 섹션 또는 독립된 절차 규정 문서의 어느 하나라도 필요 되는 추가적인 시험 절차들을 규정한다(명시한다)

     

    Either choice must be in accordance with the information required by ANSI/IEEE Std 829-1983 [2].

    어느 하나를 선택하더라도 ANSI/IEEE Std 829-1983 [2].에 의해 요구된 정보에 따라야 한다.

     

    When the correlation between test cases and procedures is not readily apparent, develop a table relating them and include it in the unit’s test design specification.

    시험 사례들과 절차들 사이의 상호작용이 쉽사리 명백하지 않을 때, 그들과 관련된 일람표()를 개발하고 단위 시험 설계 명세서에 포함시켜라.

     

    (3) Obtain the Test Case Specifications. 시험 사례 명세서(규정)들을 얻어라.

     

    Specify the new test cases. - 새로운 시험 사례들을 지정해라.

    Existing specifications may be referenced. 현재의 명세서(규정)들은 참조사항을 붙이게 될지도 모른다.

     

    Record the specifications directly or by reference in either a supplementary section of the unit’s test design specification or in a separate document.

    직접적으로 또는 단위 시험 설계명세서의 보충하는 섹션이나 독립된 문서의 어느 한쪽의 참조에 의해 명세서(규정)들을 기록하라.

     

    Either choice must be in accordance with the information required by ANSI/IEEE Std 829-1983 [2].

    어느 한 쪽의 선택은 ANSI/IEEE Std 829-1983 [2]에 의해 요구된 정보와 일치하여야 한다.

     

    (4) Augment, as Required, the Set of Test-Case Specifications Based on Design Information.

    필요에 따라서, 설계 정보에 근거한 시험 사례 명세서들의 집합을 증가시켜라.

     

    Based on information about the unit’s design, update as required the test set architecture in accordance with 3.4.2 (1).

    단위 설계에 관한 정보에 근거하여 필요하다면 3.4.2 (1)과 일치하는 시험 집합 구조를 갱신하라.

     

    Consider the characteristics of selected algorithms and internal data structures.

    선택된 알고리즘과 내부의 데이터 구조들의 characteristics를 고려하라.

     

    Identify control flows and changes to internal data that must be recorded.

    제어 흐름들과 반드시 기록되어야 하는 내부의 데이터 변화들을 확인해라.

     

    Anticipate special recording difficulties that might arise, for example, from a need to trace control flow in complex algorithms or from a need to trace changes in internal data structures (for example, stacks or trees).

    예를 들어 복잡한 알고리즘의 제어 흐름을 추적하는 필요성으로부터 또는 내부의 데이터 구조(e.g. stack이나 트리)들의 변화들을 추적하는 필요성으로부터 일어날지도 모르는 특별한 난제들을 기록하는 것을 예기하라.

     

    When necessary, request enhancement of the unit design (for example, a formatted data structure dump capability) to increase the test-ability of the unit

    필요하다면, 단위의 시험 능력의 상승을 위해 단위 설계(e.g. 포맷된 데이터 구조의 덤프 능력)의 향상을 요청하라.

     

    Based on information in the unit’s design, specify any newly identified test cases and complete any partial test case specifications in accordance with 3.4.2 (3).

    단위 설계의 정보에 근거하여 어떤 새롭게 지정된 시험 사례를 지정하고 3.4.2 (3)에 따르는 부분적인 시험 사례 명세서들을 완료하라.

     

    (5) Complete the Test Design Specification. - 시험 디자인 규정을 완료해라

    Complete the test design specification for the unit in accordance with ANSI/IEEE Std 829-1983 [2].

    ANSI/IEEE Std 829-1983 [ 2 ]와 일치하는 단위를 위해 시험 설계 규정(명세서)들을 완료해라

     

    3.4.3 Design Outputs 출력들을 설계하라.

    (1) Unit test design specification (from 3.4.2 (5)) - 단위 시험 설계 규정(3.4.2 (5)로부터)

     

    (2) Separate test procedure specifications - if produced from 3.4.2 (2)

    만약 3.4.22)에서 만들어 내게 되면 시험 절차 규정들을 분리하라.

     

    (3) Separate test-case specifications if produced from 3.4.2 (3) or (4)

    만약 3.4.2 (3) 또는 (4)로부터 만들어졌다면 시험 사례 규정들을 분리하라.

     

    (4) Unit design enhancement requests - if produced from 3.4.2 (4)

    만약 3.4.2 (4)에서 만들어 졌다면 단위 설계 향상을 요청하라.

     

    3.5 Implement the Refined Plan and Design - 정확한 계획과 설계를 구현해라.

     

    3.5.1 Implement Inputs – 입력들을 구현하라.

     

    (1) Unit test planning information (from 3.1.2 (1), (4), and (5) and 3.3.2 (1) through (3) inclusive)

    단위 시험 계획 정보 (3.1.2 (1), (4), (5) 3.3.2 (1)에서 (3)을 포함한 것으로부터)

     

    (2) Test-case specifications in the unit test design specification or separate documents (from 3.4.2 (3) and (4)

    단위 시험 설계 명세서들 또는 독립된 문서들(3.4.2 (3), (4)로부터)의 시험 사례 규정들.

     

    (3) Software data structure descriptions - 소프트웨어 데이터 구조 설명서

    (4) Test support resources – 시험 지원 자원들

    (5) Test items – 시험 데이터 항목들

    (6) Test data from previous testing activities - if available

    이전의 시험 활동들로부터의 시험 자료 만약 이용가능 하다면

    (7) Test tools from previous testing activities - if available

    이전의 시험 활동들로부터의 시험 도구들 만약 이용가능 하다면

     

    3.5.2 Implement Tasks - Task들을 구현하라.

     

    (1) Obtain and Verify Test Data. - 테스트 데이터를 얻고 검증하라.

    Obtain a copy of existing test data to be modified or used without modification.

    현재의 수정된 시험 데이터 또는 수정 없이 사용된 사본을 얻어라.

     

    Generate any new data required. – 요구된(필요한) 어떤 새로운 자료들을 생성해라

     

    Include additional data necessary to ensure data consistency and integrity.

    데이터의 일관성 및 무결성을 보증하기 위해 필요한 추가적인 데이터를 포함해라.

     

    Verify all data (including those to be used as is) against the software data structure specifications.

    소프트웨어 데이터 구조 규정들에 반대하는 모든 데이터(그들을 대용하는 것을 포함한)를 검증하라.

     

    When the correlation between test cases and data sets is not readily apparent, develop a table to record this correlation and include it in the unit’s test design specification.

    시험 사례들과 데이터 집합들 사이의 상관관계가 쉽사리 명백하지 않을 때, 이 상관관계를 기록하는 테이블을 개발하고 단위 시험 설계 명세서에 그것을 포함하라.

     

    (2) Obtain Special Resources. ­- 특별한 자원들을 얻어라

     

    Obtain the test support resources specified in 3.3.2 (2).

    3.3.22)에 지정된 시험 지원 자원들을 얻어라

     

    (3) Obtain Test Items. - 시험 데이터 항목들을 얻어라.

    Collect test items including available manuals, operating system procedures, control data (for example, tables), and computer programs

    이용 가능한 매뉴얼, 운영 시스템 절차들, 제어 데이터(예를 들어, ) 그리고 컴퓨터 프로그램을 포함한 시험 데이터 항목들을 모아라

     

    *Obtain software identified during test planning that directly interfaces with the test unit.

    시험 계획(직접적으로 인터페이스로 접속하는 시험 단위)을 식별(확인)하는 동안 소프트웨어를 얻어라.

     

    When testing a unit implemented with a procedural language, ensure that execution trace information will be available to evaluate satisfaction of the code-based completeness requirements.

    절차적 언어로 구현되는 단위를 시험할 때, 실행 추적 정보는 코드기반 완전성의 만족을 평가하기 위해 이용가능 할 것이라는 것을 확보해야 한다.

     

    Record the identifier of each item in the Summary section of the unit’s test summary report.

    단위 시험 요약 보고서의 Summary 섹션에 각 데이터 항목의 식별자를 기록해라.

     

    3.5.3 Implement Outputs 출력들을 구현하라.

    (1) Verified test data (from 3.5.2 (1)) – 검증된 시험 데이터 (3.5.2(1)로부터)

    (2) Test support resources (from 3.5.2 (2)) – 시험 지원 자원들 (3.5.2 (2)로부터)

    (3) Configuration of test items (from 3.5.2 (3)) – 시험 데이터 항목들의 구성(3.5.2 (3)로부터)

    (4) Initial summary information (from 3.5.2 (3)) – 최초의 요약 정보(3.5.2 (3)로부터)

     

    3.6 Execute the Test Procedures시험 절차들을 실행하라

    3.6.1 Execute Inputs입력들을 실행하라.

     

    (1) Verified test data (from 3.5.2 (1)) – 검증된 시험 데이터(3.5.2 (1)로부터)

    (2) Test support resources (from 3.5.2 (2)) – 시험 지원 자원들(3.5.2 (2)로부터)

    (3) Configuration of test items (from 3.5.2 (3)) – 시험 데이터 항목의 구성(3.5.2 (3)로부터)

    (4) Test-case specifications (from 3.4.2 (3) and (4)) – 시험 사례 명세서들(3.4.2 (3) (4)로부터)

    (5) Test procedure specifications (from 3.4.2 (2))-if produced

    시험 절차 명세서들(3.4.2 (2)로부터) – 만약 만들어졌다면

    (6) Failure analysis results (from debugging process)-if produced

    실패 분석 결과들(디버깅 프로세스로부터) – 만약 만들어졌다면

     

    3.6.2 Execute Tasks태스크들을 실행하라.

    (1) Run Tests. 시험들을 실행하라

    Set up the test environment. – 시험 환경을 설정하라.

    Run the test set. – 시험 집합을 실행하라.

    Record all test incidents in the Summary of Results section of the unit’s test summary report.

    단위 시험 요약 보고서의 Summary of Results 섹션에 시험 시험에서 일어난 일을 기록하라.

     

    (2) Determine Results. 결과들을 결정하라.

    For each test case, determine if the unit passed or failed based on required result specifications in the case descriptions.

    만약 단위가 사례 설명서의 요구된 결과 명세서에 근거하여 통과되거나 실패하게 되면 각 시험 사례를 결정하라.

     

    Record pass or fail results in the Summary of Results section of the unit’s test summary report.

    단위 시험 요약 보고서의 Summary of Results 섹션에 통과하고 실패한 결과들을 기록하라.

     

    Record resource consumption data in the Summary of Activities section of the report.

    보고서의 Summary of Activities에 자원 소모 데이터를 기록하라.

     

    When testing a unit implemented with a procedural language, collect execution trace summary information and attach it to the report.

    절차적 언어로 구현된 단위를 시험할 때, 실행 추적 요약 정보를 모으고 그것을 보고서에 붙여라.

     

    For each failure, have the failure analyzed and record the fault information in the Summary of Results section of the test summary report.

    각 실패들은, 실패를 분석하고, 시험 요약 보고서의 Summary of Results섹션에 기록하라.

     

    Then select the applicable case and perform the associated actions.

    그리고 나서 적용할 수 있는 사례를 선택하라 그리고 관련된 동작들을 실행하라.

     

    Case 1: A Fault in a Test Specification or Test Data.

    시험 명세서 또는 시험 데이터의 결점

    Correct the fault, record the fault correction in the Summary of Activities section of the test summary report, and rerun the tests that failed.

    결점을 정정하고, 장애 교정을 시험 요약 보고서의 Summary of Activities에 기록하고, 실패했던 시험들을 재 실행하라.

     

    Case 2: A Fault in Test Procedure Execution.시험 절차 실행의 결점.

     

    Rerun the incorrectly executed procedures.

    부정확하게(틀리게) 실행된 절차들을 재실행하라.

     

    Case 3: A Fault in the Test Environment (for example, system software).

    시험 환경의 결점(예를 들어, 시스템 소프트웨어)

     

    Either have the environment corrected, record the fault correction in the Summary of Activities section of the test summary report, and rerun the tests that failed OR prepare for abnormal termination by documenting the reason for not correcting the environment in the Summary

    of Activities section of the test summary report and proceed to check for termination (that is, proceed to activity 3.7).

    시험 요약 보고서의 Summary of Activities 섹션에 장애 교정을 기록하고, 실패한 시험들을 재실행하거나 시험 요약 보고서의 Summary of Activities에 환경을 정정하지 않은 이유를 문서로 증명한 것에 의해 비정상적인 종료를 준비하고, 종료에 대한 점검을 속행한다는 것 중 하나로 환경은 정정된다. (이것은, proceed to activity 3.7)

     

    Case 4: A Fault in the Unit Implementation.단위 구현의 결점

     

    Either have the unit corrected, record the fault correction in the Summary of Activities section of the test summary report, and rerun all tests OR prepare for abnormal termination by documenting the reason for not correcting the unit in the Summary of Activities section of the test summary report and proceed to check for termination (that is, proceed to activity 3.7).

    시험 요약 보고서의 Summary of Activities에 장애 교정을 기록하고, 모든 시험들을 재실행하거나

    시험 요약 보고서의 Summary of Activities에 환경을 정정하지 않은 이유를 문서로 증명한 것에 의해 비정상적인 종료를 준비하고, 종료에 대한 점검을 속행한다는 것 중 하나로 단위는 정정된다. (, activity 3.7까지 진행하라)

     

    Case 5: A Fault in the Unit Design.단위 설계의 결점

     

    Either have the design and unit corrected, modify the test specification and data as appropriate, record the fault correction in the Summary of Activities section of the test summary report, and rerun all tests OR prepare for abnormal termination by documenting the reason for not correcting the design in the Summary of Activities section of the test summary report and proceed to check for termination (that is, proceed to activity 3.7).

    시험 명세서와 데이터를 적절하게 수정하고, 시험 요약 보고서의 Summary of Activities 섹션에 장애 교정을 기록하고, 시험 요약 보고서의 Summary of Activities에 환경을 정정하지 않은 이유를 문서로 증명한 것에 의해 비정상적인 종료를 준비하고, 종료에 대한 점검을 속행한다는 것 중 하나로 설계와 단위는 정정된다. (이것은, proceed to activity 3.7)

     

    NOTE - The cycle of Execute and Check Tasks must be repeated until a termination condition defined in 3.1.2 (3) is satisfied (See Fig 3).

    참고사항 - 사이클의 실행 및 검사 태스크들은 3.1.2 (3)에서 만족한(Fig. 3을 보라) 정의된 종료 조건이 될 때까지 반복해야 합니다.

     

    Control flow within the Execute activity itself is pictured in Fig 2.

    Execute 활동내의 제어 흐름 그 자체는 Fig 2에서 그려진다.

    사용자 삽입 이미지

                             Fig 2 Control Flow Within the Check Activity
    사용자 삽입 이미지

    Fig 3 Control Flow Within the Check Activity

     

    3.6.3 Execute Outputs출력들을 실행하라.

    (1) Execution information logged in the test summary report including test outcomes, test incident descriptions, failure analysis results, fault correction activities, uncorrected fault reasons, resource consumption data and, for procedural language implementations, trace summary information (from3.6.2 (1) and (2))

    실행 정보는 시험 결과들, 시험 사건 설명서들, 실패 분석 결과들, 장애 교정 활동들, 정정되지 않은 장애 이유들, 자원 소모 데이터 그리고 절차적 언어 실현들, 추적 요약 정보를 포함한 시험 요약 보고서에 기록된다. (3.6.2 (1) (2)로부터)

     

    (2) Revised test specifications - if produced from 3.6.2 (2)

    수정된 시험 규정들 - 만약 3.6.2 (2) 에서 만들어 내게 되면

     

    (3) Revised test data - if produced from 3.6.2 (2)

    수정된 테스트 데이터 - 만약 3.6.2 (2) 에서 만들어 내게 되면

     

    3.7 Check for Termination 종료를 검사하라.

     

    3.7.1 Check Inputs – 입력들을 검사하라.

     

    (1) Completeness and termination requirements (from 3.1.2 (2) and (3))

    완전성과 종료 요구사항들(3.1.2 (2) (3)로부터)

     

    (2) Execution information (from 3.6.2 (1) and (2))

    실행 정보(3.6.2 (1) (2)로부터)

     

    (3) Test specifications (from 3.4.2 (1) through (3) inclusive) - if required

    시험 규정들(3.4.2 (1)에서 (3)을 포함한 것으로부터) – 만약 필요하다면

     

    (4) Software data structure descriptions - if required

    소프트웨어 데이터 구조 기술들 만약 필요하다면

     

    3.7.2 Check Tasks  - 태스크들을 검사해라.

     

    (1) Check for Normal Termination of the Testing Process.

    testing process의 정규(normal) 종료를 검사하라.

     

    Determine the need for additional tests based on completeness requirements or concerns raised by the failure history.

    요구사항들의 완전성 또는 실패 역사에 의해 올라간 관심에 근거하여 필요한 추가적인 시험들을 결정하라.

     

    For procedural language implementations, analyze the execution trace summary information (for example, variable, flow).

    절차적 언어 구현을 위해, 실행 추적 요약 정보를 분석하라(예를 들어, 변수, 흐름)

     

    If additional tests are not needed, then record normal termination in the Summary of Activities section of the test summary report and proceed to evaluate the test effort and unit (that is, proceed to activity 3.8).

    만약 추가적인 시험들이 필요하지 않다면, 시험 요약 보고서의 Summary of Activities 섹션의 정규 종료를 기록하고, 시험 공수와 단위의 평가를 속행한다. (, activity 3.8까지 진행하라)

     

    (2) Check for Abnormal Termination of the Testing Process.

    testing process의 비정상적인 종료를 검사하라

     

    If an abnormal termination condition is satisfied (for example, uncorrected major fault, out of time) then ensure that the specific situation causing termination is documented in the Summary of Activities section of the test summary report together with the unfinished testing and any uncorrected faults.

    만약 비정상의 종료 조건이 만족된다면(예를 들어, 교정되지 않은 주요한 결함(장애), 시간 초과)

    종료를 일으키는 특정한 상황은 시험 요약 보고서의 Summary of Activities에 상세히 기록된다는 (종료되지 않은 시험과 어떤 정정되지 않은 결점들과 함께)것을 확인하다.

     

    Then proceed to evaluate the test effort and unit (that is, proceed to activity 3.8).

    그리고 나서 시험 노력과 단위의 평가를 계속한다. (, activity 3.8까지 진행하라)

     

    (3) Supplement the Test Set. 시험 집합의 보충(추가)

     

    When additional tests are needed and the abnormal termination conditions are not satisfied, supplement the test set by following steps (a) through (e).

    추가의 시험들이 필요하고 비정상의 종료 조건들이 만족되지 않을 때, 다음의 (a)에서 (e)까지 단계들에 의해 시험 집합(class)들을 보충하라.

     

    (a) Update the test set architecture in accordance with 3.4.2 (1) and obtain additional test-case specifications in accordance with 3.4.2 (3).

    3.4.2 (1)과 일치하는 시험 집합 구조를 갱신하고, 3.4.2 (3)과 일치하는 추가의 시험-사례 규정들을 얻어라.

     

    (b) Modify the test procedure specifications in accordance with 3.4.2 (2) as required.

    필요에 따라서 3.4.2 (1)과 일치하는 시험 절차 규정들을 수정하라.

     

    (c) Obtain additional test data in accordance with 3.5.2 (1).

    3.5.2 (1)과 일치하는 추가의 시험 데이터를 얻어라

     

    (d) Record the addition in the Summary of Activities section of the test summary report.

    시험 요약 보고서의 Summary of Activities 섹션에 추가를 기록하라.

    (e) Execute the additional tests (that is, return to activity 3.6).

    추가적인 시험들을 실행하라. (, activity 3.6으로 돌아가라)

     

    3.7.3 Check Outputs출력들을 검사하라.

     

    (1) Check information logged in the test summary report including the termination conditions and any test case addition activities (from 3.7.2 (1) through (3) inclusive)

    종료 조건들과 어떤 시험 사례 추가 활동들 (3.7.2 (1)에서 (3)을 포함하는 것으로부터)을 포함한 시험 요약 보고서의 기록된 정보를 검사하라

     

    (2) Additional or revised test specifications - if produced from 3.7.2 (3)

    추가되거나 수정되었던 시험 규정들 만약 3.7.2 (3)에서 만들어 지면

     

    (3) Additional test data - if produced from 3.7.2 (3)

    추가의 테스트 데이터 만약 3.7.2 (3)에서 만들어 지면

     

    3.8 Evaluate the Test Effort and Unit

    시험 공수와 단위를 평가하라.

     

    3.8.1 Evaluate Inputs – 출력들을 평가하라.

    (1) Unit Test Design Specification (from 3.4.2 (5)

    단위 시험 설계 규정들(3.4.2 (5)로부터)

     

    (2) Execution information (from 3.6.2 (1) and (2))

    실행 정보(3.6.2 (1) (2)로부터)

     

    (3) Checking information (from 3.7.2 (1) through (3) inclusive)

    검사 정보(3.7.2 (1)에서 (3)을 포함한 것으로부터)

     

    (4) Separate test-case specifications (from 3.4.2 (3) and (4)) - if produced

    독립된 시험-사례 규정들(3.4.2 (3) (4)로부터) – 만약 만들어졌다면

     

    3.8.2 Evaluate Tasks 태스크들을 평가하라.

    (1) Describe Testing Status. 시험 상태를 설명하라.

     

    Record variances from test plans and test specifications in the Variances section of the test summary report.

    시험 요약 보고서의 Variances 섹션에 시험 계획들과 시험 규정들로부터 변화들을 기록하라.

     

    Specify the reason for each variance.

    각 변화의 이유를 상술하라.

     

    For abnormal termination, identify areas insufficiently covered by the testing and record reasons in the Comprehensiveness Assessment section of the test summary report.

    비정상의 종료는, 시험하는 것과 시험 요약 보고서의 Comprehensiveness Assessment 섹션에 이유들을 기록하는 것으로 불충분하게 포함되는 범위들을 확인하라

     

    Identify unresolved test incidents and the reasons for a lack of resolution in the Summary of Results section of the test summary report.

    미해결의 시험 사건을 확인하고 시험 요약 보고서의 Summary of Results 섹션에 해결의 부족을 논리적으로 생각하라.

     

    (2) Describe Unit’s Status. - 단위의 상태를 기술해라.

     

    Record differences revealed by testing between the unit and its requirements documentation in the Variances section of the test summary report.

    시험 요약 보고서의 Variances 섹션에 단위들 요구사항들의 문서화와 단위 사이의 시험에 의해 밝혀진 차이들을 기록하라.

     

    Evaluate the unit design and implementation against requirements based on test results and detected fault information.

    시험 결과들과 발견된 결점 정보에 근거한 요구사항들에 반대하여 단위 설계와 구현을 평가하라.

     

    Record evaluation information in the Evaluation section of the test summary report.

    시험 요약보고서의 Evaluation 섹션에 평가 정보를 기록하라.

     

    (3) Complete the Test Summary Report.

    시험 요약 보고서를 완성시켜라.

     

    Complete the test summary report for the unit in accordance with ANSI/IEEE Std 829-1983 [2].

    ANSI/IEEE Std 829-1983 [2]와 일치하는 단위를 위한 시험 요약 보고서를 완성시켜라.

     

    (4) Ensure Preservation of Testing Products.

    시험 산출물들의 보존을 확인하라.

     

    Ensure that the testing products are collected, organized, and stored for reference and reuse.

    시험 산출물들을 재사용성과 참조를 위해 수집하고 조직하고 저장하는 것을 확인하라.

     

    These products include the test design specification, separate test-case specifications, separate test procedure specifications, test data, test data generation procedures, test drivers and stubs, and the test summary report.

    이 산출물들은 시험 설계 명세서, 독립된 시험-사례 명세서, 독립된 시험 절차 명세서들, 시험 데이터, 시험 데이터 생성 절차들, 시험 드라이버들과 스터브들, 그리고 시험 요약 보고서를 포함한다.

     

    3.8.3 Evaluate Outputs - 출력들을 평가하라

     

    (1) Complete test summary report (from 3.8.2 (3))

    완전한 시험 요약 보고서(3.8.2 (3)으로부터)

     

    (2) Complete, stored collection of testing products (from 3.8.2 (4))

    완전한, 시험 산출물들의 저장된 집합 (3.8.2 (4)로부터)

                                                                       - 번역: 이상덕 -

     

    Posted by 서오석
    ,

    Level의 KPA(Key Process Areas)

    레벨2(반복)의 KPA의 목표

    KPA

    목표

    요구사항관리

    (RM: Requirements Management)

    l  소프트웨어의 요구 사항은 소프트웨어 엔지니어링과 관리 활동을 위한 기준선을 제정하기 위해서 통제한다.

    l  소프트웨어 계획, 산출물, 액티비티 등은 요구 사항과 일관성을 유지한다.

    소프트웨어 프로젝트 계획

    (SPP: Software Project Planning

    l  프로젝트 계획과 추적에서 사용하기 위해 평가를 문서화 한다.

    l  프로젝트 활동과 공약을 계획하고 문서화한다.

    l  관련 그룹과 개인은 프로젝트와 연관된 공약에 동의한다.

    소프트웨어 프로젝트 추적과 감독(SPTO: Software Project Tracking and Oversight)

    l  실제 결과와 수행 성능은 소프트웨어 계획을 기준으로 추적한다.

    l  실제 결과와 수행 성능이 소프트웨어 계획에서 많이 벗어났을 때는 사정 조치를 취하고, 종료 시까지 관리한다.

    l  관련 그룹과 개인은 공약이 변경되는 것을 동의한다.

    소프트웨어 협력 업체 관리(SSM: Software Subcontract Management)

    l  주 계약자와 협력 업체는 그들의 공약(commitment)에 동의한다.

    l  주 계약자는 공약 관련 협력 업체의 실제 결과를 추적한다.

    l  주 계약자와 협력 업체는 지속적인 의사 교환을 유지한다.

    l  주 계약자는 공약을 기준으로 협력 업체의 실제 수행 성능을 추적한다.

    소프트웨어 품질보증 (SQA: Software Quality Assurance)

    l  소프트웨어의 품질 보증 활동을 계획한다.

    l  적절한 표준, 절차, 그리고 요구 사항 등에 대한 소프트웨어 산출물과 활동의 충실도를 객관적으로 확인한다.

    l  관련 그룹과 개인에게 소프트웨어 품질 보증 활동과 결과를 통보한다.

    l  프로젝트 안에서 해결되지 못한 미준수(noncompliance) 문제들은 선임 관리자에게 보고한다.

    소프트웨어 형상관리 (SCM: Software Configuration Management)

    l  소프트웨어의 형상 관리 활동을 계획한다.

    l  선택된 소프트웨어의 작업 산출물을 확인, 통제, 이용한다.

    l  식별된 소프트웨어의 작업 산출물에 대한 변경을 통제한다.

    l  관련 그룹과 개인에게 소프트웨어 기준선의 상태와 내용을 통보한다.


    레벨 3(정의)의 KPA의 목표

    KPA

    목표

    조직 프로세스 초점(OPF: Organization Process Focus)

    l  소프트웨어 프로세스의 개발과 개선 활동을 조직 전반에 걸쳐 조정한다.

    l  사용된 소프트웨어 프로세스의 장점과 단점을 식별한다.

    l  조직-레벨 프로세스 개발과 개선 활동을 계획한다.

    조직 프로세스 정의 (OPD: Organization Process Definition)

    l  조직을 위한 소프트웨어 프로세스의 표준을 개발하고 유지 관리한다.

    l  소프트웨어 프로젝트에서 조직의 표준 소프트웨어 프로세스 이용과 관련된 정보를 수집, 검토, 이용할 수 있게 한다.

    교육 프로그램(TP: Traning Program)

    l  교육 활동을 계획한다.

    l  소프트웨어 관리와 기술적인 역할을 수행하는 데 필요한 기술과 지식을 개발하는 교육을 제공한다.

    l  소프트웨어 엔지니어링 그룹과 소프트웨어 관련 그룹의 개인은 자신의 작업을 수행하는데 필요한 교육을 받는다.

    통합된 소프트웨어 관리 (ISM: Integrated Software Management)

    l  프로젝트를 위해 정의된 소프트웨어 프로세스는 조직의 표준 소프트웨어 프로세스로부터 변경된(tailored)버전이다.

    l  프로젝트는 정의된 소프트웨어 프로세스에 따라 계획하고 관리한다.

    소프트웨어 제품 엔지니어링(SPE: Software Product engineering)

    l  소프트웨어 생산을 위해 소프트웨어 엔지니어링 태스크를 정의하고, 통합하고, 일관되게 수행한다.

    l  소프트웨어 작업 산출물은 서로 일관성을 유지한다.

    그룹 간의 조정(IC: Intergroup Coordination)

    l 모든 관련 그룹은 고객의 요구 사항에 동의한다.

    l 모든 그룹은 다른 그룹과의 공약에 동의한다.

    l 그룹은 그룹 간의 문제를 식별하고, 추적하고, 해결한다.

    동료 검토(PR: Peer Reviews)

    l  동료 검토 활동을 계획한다.

    l  소프트웨어 작업 산출물의 결함을 식별하고 제거한다.


    레벨4(관리)의 KPA 목표

    KPA

    목표

    정량적인 프로세스 관리 (QPM: Quantitives Process Management)

    l 정량적인 프로세스 관리 활동을 계획한다.

    l 프로젝트의 정의된 소프트웨어 프로세스의 수행 성능을 정량적으로 관리한다.

    l 조직의 표준 소프트웨어 프로세스에 대한 역량은 정량적인 용어로 표현한다.

    소프트웨어 품질 관리 (SQM: Software Quality Management)

    l 프로젝트의 소프트웨어 품질 관리 활동을 계획한다.

    l 소프트웨어 산출물 품질의 평가 목표와 그 우선 순위를 정의한다.

    l 소프트웨어 산출물의 품질 목표를 달성하기 위한 실제 진척을 평하고 관리한다.


    레벨 5(최적화) KPA 목표

    KPA

    목표

    결함 예방 (DP: Defect Prevention)

    l  결함 예방 활동을 계획한다.

    l  결함의 공통 원인을 찾아 식별한다.

    l  결함의 공통 원인의 우선 순위를 정하고, 체계적으로 제거한다.

    기술 변경 관리 (TCM: Technology Change Management)

    l  변경된 기술의 편입을 계획한다.

    l  신기술은 품질과 생산성에 미칠 영향을 정하기 위해 평가한다.

    l  적절한 신기술은 조직 전체에 걸쳐 일반 실행 지침으로 바꾼다.

    프로세스 변경 관리 (PCM: Process Change Management)

    l  지속적인 프로세스 개선을 계획한다.

    l  조직 전체적으로 조직의 소프트웨어 프로세스 개선 활동에 참여해야 한다.

    l  조직의 표준 소프트웨어 프로세스와 프로젝트를 위해 정의된 소프트웨어 프로세스를 지속적으로 개선한다.


    Posted by 서오석
    ,

    설명
    XP는 애자일 개발 방법론의 한 종류로서 1990년대 초 Kent Beck에 의해 고안되었다. 기존의 방법과는 달리 요구사항의 변경으로 인한 비용이 개발 기간에 상관없이 일정하게 유지되도록 하는 것이 핵심이다.
    XP는 의사소통, 단순성, 피드백, 용기를 중시하는 개발 방법론이다. XP에서 프로그래머와 고객, 동료 프로그래머와의 의사소통을 중시하고, 설계를 단순하고 명확하게 유지하려고 하며, 비즈니스에서 가장 우선순위가 높은 것 부터 개발한다 이런 것은 고객의 요구사항과 기술의 변경에 대응할 수 있다.

    XP는 2종류의 약속을 한다.
    프로그래머에게 대해, XP는 프로그래머가 매일, 중요한 업무에 열중 할수 있도록 약속한다. 프로그래머는 불안한 상황에 자기 혼자만 직면하지 된다. 시스템을 성공 시키기 위해서, 자신의 힘으로 모든 할 수 있는 일을 할 수 있도록 된다. 최선을 위해서 결단을 내리고, 자신이 적임이지 않은 일에 관해서는 결정은 내리지 않는다.
    고객과 매니져에 대해, XP는 매주마다 어느 프로그래밍으로부터 최고의 가치를 얻을 수 있다는 것을 약속한다. 수주간마다 골을 향해서 구체적인 진보가 보일도록 한다. 계획 외의 코스트가 생기지 않도록 하고, 개발 도중에서 프로젝트의 방향이 변하는 것이 가능하도록 한다.
    다시 말해, XP는 프로젝트의 리스크를 줄이고, 비지니스 변화에 리스폰스(적응)를 개선 하고, 시스템의 가동기간(라이프)을 통해서 생산성을 향상시키고, 동시에 팀에게 소프트웨어를 만들때 기쁨을 느낄 수 있도록 약속한다.

    역할
    프로그래머
    분석, 설계, 테스트, 코딩, 시스템 통합을 하며 업무에 대한 난이도 조정 및 시스템 관리를 한다.

    관리자
    고객과 프로그래머가 함께 일할 수 있도록 해준다. 프로잭트 총괄의 의미보다는 진행에 도움을 주는 역할을 한다.

    고객
    실제적으로 시스템에 대한 요구사항을 정의하고 우선순이를 설정한다. 고객이 필요한 범위를 결정하면 개발자는 개발을 한다.

    관계도

    사용자 삽입 이미지

    XP의 12가지 실천사항
    계획세우기: 고객이 요구하는 비즈니스 가치를 정의하고 개발자에게 필요와 어떤 부분이 지연될지 알려준다
    소규모릴리즈: 작은 시스템을 만들고 단위별로 업데이트한다.
    상징: 공통적인 이름 체계를 갖는다.
    단순한 디자인: 현재의 요구사항에 맞는 단순한 시스템을 설계한다.
    지속적인 테스팅: XP는 적합성을 중요시 여긴다.
    리팩토링: 개발하는 동안 제품 설계를 향상시킨다.
    짝프로그래밍: 개발자 두명이서 5분동안 번갈아가며 하나의 개발을 서로 쭉 내려가며 코딩한다.
    공동 코드 소유: 누구나 코드 수정이 가능하며 그에 대한 책임도 공유한다.
    지속적인 통합: 매일 여러번 소프트웨어를 통합하고 빌드한다.
    주당 40시간의 업무: 피곤한 개발자가 실수를 더 많이하기 때문에 휴식을 보장한다.
    현장 고객 지원: 의사소통을 향상시키고 문서양을 줄일 수 있다.
    코딩 표준: 코딩 가이드라인을 작성하여 모두 가이드라인을 따른다.



    좀 더 자세한 내용을 원한다면 아래 링크를 찾아가도록 하자
    http://www.gpgstudy.com/gpgiki/eXtreme%20Programming%20explained

    Posted by 서오석
    ,

    애자일 개발 프로세스의 개념
    애자일 개발 프로세스란, 어느 특정 개발 방법론을 가리키는 말은 아니고, "애자일(Agile=기민한, 좋은것을 빠르고 낭비없게 만드는 것) 개발을 가능하게 해주는 다양한 방법론 전체를 지칭하는 말이다. 예전에는 애자일 개발 프로세스는 "경량(Lightweight)"프로세스로 불렸다. 익스트림 프로그래밍 (XP:eXtreme Programming)이 애자일 개발 프로세스의 대표적인 방법이라 볼수 있다.


    애자일 개발 프로세스의 배경
    애자일 프로세스의 배경에는 소프트웨어 개발 자체가 과거와 양상이 바뀌었다는 전제가 있다. 90년대 후반까지의 소프트웨어 개발은 장기간에 걸쳐 많은 사람들을 투입하고 충분한 비용을 투입하여 진행하는 것이었다. 소프트웨어 공학이나 많은 관리 방법론들이 모두 이러한 종류의 프로젝트를 대상으로 삼고 있다.

    그러나 지금의 소프트웨어는 개발기간이 짧고 적은 비용을 투입한다. 게다가 매우 복잡하고 개방적이다. 또한, 사회의 상황이나 시장의 변동에 따라 변화가 심하고 요구사항도 시시각각 변해가고 있다. 그래서 이미 고전적인 소프트웨어 공학이나 관리 기법 만으로는 대처할수 없게 되었다.

    이런 문제에 대한 기술적인 해결책으로 "객체지향(OO:Object Oriented)"이 있다. 객체지향 기술은 그동안의 개발 문제를 적절하게 대처해 주었다. 그리고, 객체지향 개발을 하기 위해서는 그에 적합한 개발 프로세스가 필요했다. 그래서 수많은 애자일 개발 프로세스가 이러한 필요에 따라 만들어졌다. 따라서, 애자일 개발 프로세스의 상당수는 객체지향 기술을 기반으로 한다.

    애자일 개발 프로세스는, 제한된 시간과 코스트 안에서 정보는 불완전하고 예측은 불가능 하다는 전제를 가진다.그리고 그 전제아래에서 합리적인 답을 내도록 하는 것이 애자일 개발 프로세스이다.


    애자일 개발 프로세스와 전통적인 개발 프로세스와의 차이
    전통적인 개발 프로세스들은 폭포수 모델과 계획 기반 개발을 따르는 반면, 애자일 개발 프로세스는 그에 반한다는 점에서 가장 큰 차이를 가진다.
    폭포수 모델과 계획 기반 개발 기법들은, 일련의 차례와 탄탄한 계획을 기반으로 하여 개발을 진행시킨다. 이것은, 이해하기도 쉽고 사용하기도 쉬운 바람직한 기법이기도 하지만, 이로 인해서 많은 부작용이 생길 수 있다. 가장 큰 부작용이 발생할 때는, 계획대로 진행되지 않을 경우이다. 이럴경우에는 다음과 같은 부작용이 발생하게 된다.

    • 납기일 전 철야
    • 철야에도 불구하고 납기일 지연
    • 지연에 따른 비난과 스트레스가 개발자에게 향하여 에너지 소진
    • 결국 납기된 솔루션은 고객의 요구를 충족하지 못함

    이런 부작용은 근본적인 개발 프로세스 접근법의 차이에서 나타난다. 전통적인 개발 프로세스들은 공업에서 사용하는 정형적 프로세스 제어 모델을 따르고 있다. 정형적 프로세스 제어모델은, 동일한 입력에 대해서 동일한 결과가 기대 될 경우에 적합하다. 하지만, 소프트웨어를 포함한 IT의 개발은 경험적 프로세스 제어 모델로 접근할 필요가 있다. 경험적 프로세스 제어 모델은 항상 불확실성을 수반하고 포용하고 있다. 애자일 개발 프로세스는 경험적 프로세스 제어모델로 개발을 관리한다.


    애자일 개발 프로세스의 종류
    애자일 개발 프로세스로 불리우는 개발 방법론에는 다음과 같은 것들이 있다.

    • 익스트림 프로그래밍, XP - 애자일 개발 프로세스의 대표자로 애자일 개발 프로세스의 보급에 큰 역할을 하였다. 이 방법은 고객과 함께 2주 정도의 반복개발을 하고, 테스트와 우선 개발을 특징으로 하는 명시적인 기술과 방법을 가지고 있다.
    • 스크럼 - 30일마다 동작 가능한 제품을 제공하는 스플린트를 중심으로 하고 있다. 매일 정해진 시간에 정해진 장소에서 짧은시간의 개발을 하는 팀을 위한, 프로젝트 관리 중심의 방법론이다.
    • 크리스탈 패밀리 - 이 방식은 프로젝트의 규모와 영향의 크기에 따라서 여러종류의 방법론을 제공한다. 그중에서 가장 소규모 팀에 적용하는 크리스탈 클리어는 익스트림 프로그래밍 만큼 엄격하지도 않고 효율도 높지 않지만, 프로젝트에 적용하기 쉬운 방법론이다.
    • Feature-Driven Development - feature마다 2주정도의 반복 개발을 실시한다. Peter Coad가 제창하는 방법론으로써, UML을 이용한 설계 기법과도 밀접한 관련을 가진다.
    • Adaptive Software Development, ASD - 소프트웨어 개발을 혼란 자체로 규정하고, 혼란을 대전제로 그에 적응할 수 있는 소프트웨어 방법을 제시하기 위해 만들어진 방법론이다. 내용적으로는 다른 방법론들과 유사하지만, 합동 어플리케이션 개발(Joint Application Development, 사용자나 고객이 설계에 참가하는 개발 방법론)을 사용하고 있는것이 조금 다르다.
    • 익스트림 모델링 - 익스트림 모델링은 UML을 이용한 모델링 중심 방법론이다. 다만, 여타 모델링 방법들과는 달리, 항상 실행가능 하고 검증가능한 모델을 작성하는 공정을 반복해서, 최종적으로는 모델로부터 자동적으로 제품을 생성하게 한다.

    출처: 위키피디아 백과


    만약 애자일에 대해서 더 알고 싶다면 아래의 PDF를 참조하기 바란다. "애자일의 미래"라는 제목으로 Google에서 검색하면 나오지만 혹시라도 나중에 링크가 깨질지도 모르기 때문에 올려 놓는다.
    저자는 '김창준'이란 분으로 애자일 이야기라는 블로그를 운영하고 있다.
    Posted by 서오석
    ,
    Unified Software Development Process는 내가 본 책에서는 Lifecycle에서 다루고 있다. 어떤 곳에서는
    Unified Software Development Process Model이라고 말한다.
    범주로 보면 USDP는 객체지향 방법론 중 하나이다.

    설명

    USDP는 Jacobson, Booch, Rumbaugh에 의해 1999년에 개발되었다. 이 방법론은 소프트웨어 개발이 여러번 반복을 거쳐 수행된다. 근데 이 반복 안에는 요구사항 분석, 설계, 구현, 테스트 및 평가과정을 포함하고 있어서 자체로서 하나의 개발주기를 이룬다. 그렇기 때문에 큰 범위로는 개발방법론이며 작게는 Lifecycle로 표현하는 것 같다. 이런 반복적인 개발 방법에서는 반복마다 실행 가능한 릴리즈가 산출되고, 반복이 거듭될 수록 향상되어 최종 시스템으로 발전된다.

    개발순서
    사용자 삽입 이미지
    Inception
    고객과의 준비적 상호 작용 단계다. 요구사항 분석, 원형에 대한 설계, 구현이 이루어지는 단계이다.

    Elaboration
    요구사항 분석 및 아키텍처 확정 단계이다

    Construction
    기본 기능만 가진 제품 산출 단계로 주요 설계 및 구현을 수행한다.

    Transition
    제품 릴리즈 완성 단계로 구현 및 테스트를 수행한다.

    장점
    반복적인 개발 방법은 위험 요소를 초기에 발견할 수 있고 아키텍처에 대한 정의를 중요한 요소로 삼고 개발하기 때무에 이해가 쉽고 변경에 대한 관리가 용이하다.



    '소프트웨어공학 > 다양한 방법론' 카테고리의 다른 글

    방법론- eXtreme Programming  (0) 2008.04.19
    방법론- Agile Software Development  (0) 2008.04.19
    Posted by 서오석
    ,

    설명

    나선형 모형은 Boehm이 제안한 것으로, 폭포수 모형과 프로토 타입 모형의 장점에 위험 분석 기능을 추가한 모형이다. 

    • 나선을 따라 돌듯이 여러 번의 소프트웨어 개발 고정을 거쳐 점진적으로 완벽한 최종 소프트웨어를 개발하는 것으로, 점진적 모형이라고도 한다.
    • 소프트웨어를 개발하면서 발생할 수 있는 위험을 관리하고 최소화하는 것을 목적으로 한다.
    • 프로젝트 총 예산이 1~5%정도 더 증가한다.
    • 각각의 사이클 별로 지속기간이 한계가 있다.

    개발 순서

    사용자 삽입 이미지
    Planning 
    계획 및 정의 단계로 개발자가 고객을 만나 개발하고자 하는 제품의 요구사항을 듣는다. 이때 개발자는 고객의 의도를 파악하고 계획을 위한 자료로 활용한다. 여기서 제품의 성능, 기능, 시스템의 목표를 규명하고 제약조건을 파악한다.

    Risk analysis
    초기 요구사항을 가지고 위험을 규명한다. 개발하려는 시스템의 기술적 위험, 정보 부족, 프로젝트 관리, 자원관리등을 예측하고 위험관리를 통해 위험을 방지한다.

    Software development
    어떠한 모델을 적용하여 시스템을 개발할 것인가를 결정한다. 사용자가 UI를 중시여기면 Prototype model을, SI에 위험이 존재하거나 요구사항이 완벽한 경우 Waterfall model을 사용한다

    User evaluation
    앞 단계에서 구현된 소프트웨어를 고객이나 사용자가 평가한다. 이 단계에서 feedback을 얻는 데 요구되는 여러 작업를 포함하며 다음 단계에 고객의 평가를 반역할 수 있는 자료를 얻을 수 있다.

    장점

    • 가장 현실적인 모형으로, 대규모 프로젝트나 큰 시스템에 적합하다
    • 점진적으로 개발 과정이 반복되므로 누락되거나 추가딘 요구사항을 첨가할 수 있고, 정밀하며, 유지보수 과정이 필요 없다.
    • 위험분석 단계에서 기술과 관리의 위험 요소들을 하나씩 제거해 나감으로써 완성도 높은 소프트웨어를 만들 수 있다.
    • 각 단계에 적당한 테스팅이 이루어져 개발과정에 발생하는 여러 문제점의 해결방안을 찾기 때문에 테스팅 비용 및 개발지연등의 문제를 해결할 수 있다.


    단점

    • 위험성 평가에 크게 의존하기 때문에 이를 발견하지 않으면 반드시 문제가 된다.
    • 위험요인을 추출하고 분석하는데 많은 비용이 소요되고 초기의 요구분석 결과 자체가 불완전한 경우, 위험분석의 의미가 없다.
    • 위험분석 결과가 불완전한 경우, 사용자의 요구충족에 의미가 없고, 개발비용만 낭비하게 된다.
    • 상대적으로 복잡하여 프로젝트 관리 자체가 어렵게 될 수도 있다.


     

    Posted by 서오석
    ,

    설명
    원형모델의 주목적은 원형을 가능한 빨리 개발한 후 고객과 검증하는 것이다. 고객으로부터 피듭백을 받은 후에는 원형을 폐기하는 경우도 있고 중요 부분만 구현하여 피드백을 얻은 후 지속적으로 발전시켜 완제품을 만들어 낼 수도 있다.

    • 프로토 타입 모형은 사용자의 요구사항을 정확하게 파악하기 위해서 미리 실제로 개발할 소프트웨어의 시제품을 만들어서 최종 결과물을 예측하는 모형이다.
    • 시스템의 모형을 만드는 과정으로 초기 요구사항에 대한 소프트웨어를을 구현하는데 이는 추후 구현단계에서 사용될 골격이 된다.
    • 성능, 보안, 신뢰도와 같은 소프틍웨어의 특성을 무시한다.
    • 변경이 체계적으로 이루어지지 않기 때문에 유지보수가 힘들다.
    • 폭포수 모델에서 발견되는 개발이 완료된 시점에서 오류가 발견되거나 요구사항과 맞지 않는 단점을 해결하기 위한 모형이다.

    개발 순서

    사용자 삽입 이미지


    Initial analysis
    처음 개발할 시스템의 분석 작업, 고객의 일부 요구사항 또는 불안전 요구사항으로 부터 제품의 기본 골격을 잡는다. 

    Define objectives
    프로토타입을 정의해야할 부분을 고객과 상의하여 진행. 이부분을 잘해야 어떻게 프로토타입의 구조를 결정할지 정의할 수 있다.

    Specify
    순차적 디자인 원칙에 의거하여  모델을 정의하고 수정한다. 사용자 인터페이스에 초점을 맞춘다.

    Construct
    프로토타입으로 정해진 모델을 빠르게 개발한다. 고객이 요구하는 기능을 구현하고 필요한 요소를 파악하는데 중점을 둔다. 중요한 것은 프로그램의 신뢰도나 품질이 아니라 빨리 만드는 것이다.

    Evaluate
    가장 중요한 단계로 프로토타입을 고객과 같이 평가하고 고객이 원하는 요구사항과 맞는지 확인한 후 다시 정의 단계로 넘어간다.

    장점

    • 요구사항을 충실히 반영하며, 요구사항의 변경이 용이하다.
    • 사용자 요구사항이 불명확할 때 사용하는 것이 좋다
    • 제품의 추적성과 시험가능성이 확보된다.
    • 최종 결과물이 만들어지기 전에 의뢰자가 최종 결과물의 일부 또는 모형을 볼 수 있다.
    • 시스템의 이해와 품질향상에 도움이 된다.
    • 고객과 개발자 모두에게 공동의 참조 모델을 제공한다.

    단점

    • 프로토 타입의 결과를 최종 결과물이라고 고객에게 혼란을 줄 수 있다.
    • 단기간에 제작해야 하기 대문에 비효율적인 언어나 알고리즘을 사용할 수 있다.
    • 소프트웨어 개발에 많은 시간이 소요되며 산출물이 많아진다.
    • 중간과정을 점검할 수 있는 일정표와 산춤물이 없기 때문에 관리 통제가 어렵다.
    • 실제 프로토타입을 검수하고 확인할 고객이 그리 많지 않다. (자기 업무도 많은데 어떻게 신경쓰냐..)
    Posted by 서오석
    ,

    설명

    폭포수 모형은 소프트웨어 개발에서 각 단계를 확실히 매듭짓고 그 결과를 철저하게 검토하여 승인 과정을 거친 후에 다음 단계를 진행하며 이전 단계로 넘어갈 수 없는 방식이다.

    • 폭포수 모형은 소프트웨어 공학에서 가장 오래되고 가장 폭넓게 사용하며 고전적 생명 주기 모형이라고도 한다.
    • 소프트웨어 개발 과정의 앞 단계가 끝나야만 다음단계로 넘어갈 수 있는 선형 순차적 모형이다
    • 각 단계별로 산출물이 나오며 단계별 평가서가 존재한다.
    • 두개 이상의 과정이 병행하여 수행되지 않는다

    개발 순서

    사용자 삽입 이미지

    System engineering
    높은 수준의 구조 명세서를 작성한다. 모델에 사용할 각종 문서를 정의한다.

    Requirements Analysis
    요구사항을 수집하고 문제를 이해, 분석하는 단계이다. 분석가는 고객의 요구사항을 기능, 성능, 인터페이스 등으로 파악하고 문서화 한다. 이 단계에서 산출물은 요구사항 명세서, 기능 명세서, 인수 테스트 명세서등이 있다.

    Disign
    소프트웨어 아키텍처 명세서, 시스템 테스트 명세서, 디자인 명세서, 서브시스템 테스트 명세서, 단위 테스트 명세서등 모든 시스템 구조를 결정하게 된다.

    Construction
    설계명세서를 토대로 실제 프로그래밍을 하게 된다.

    Testing
    단위 테스트 레포트, 서브 시스템 테스트 레포트, 시스템 테스트 레포트, 인수테스트 레포트등의 산출물이 나오며 프로그램이 입력에 따라 제대로 작동하는지 여부와 오류를 발견하기 위해 수행된다.

    Installation
    시스템에 인스톨해야할 소프트웨어라면 인스톨 작업을 하게 된다.

    Maintenance
    요구사항 정의 변경에 따른 유지보수 및 산출물 변경을 하게 된다. 유지보수를 하게 되는 이유는 여러가지 인데 고객이 성능향상이나 기능 추가를 요구할 경우, 새로운 운영체제나 주변장치등이 바뀌는 경우, 테스팅 단계에서 미리 체크하지 못한 오류등을 수정할 경우가 있다. 실제 프로젝트 예산의 70%가 유지보수단계에 쓰일 정도로 시스템이 제대로 구축이 안되어있다면 엄청난 예산을 잡아먹는다.

    장점

    • 모형의 적용 경험과 성공사례가 많다.
    • 단계별 정의가 분명하고, 각 단계별 평가가 확실하게 이루어진다.
    • 각 프로세스 단계의 역할 이해가 용이하다.
    • 단계별 산출물이 정확하여 개발공정의 기준점을 잘 제시한다.
    • 프로젝트의 관리가 용이하다.

    단점

    • 프로젝트 초기, 요구사항을 정의할 때 정확한 요구사항을 제시하지 않을 경우 프로세스의 각 단계가 진행될 수록 요구사항의 변경, 추가가 매우 어렵다. (고객의 feedback 반영이 어려움)
    • 각 단계별로 다음 단계로 진행될 때 오류 없이 진행되어야 하지만 현실적으로 오류없이 다음단계로 진행되기 어렵다.
    • 만약 계획대로 진행되지 않을 경우 납기일 전 철야, 납기일 지연, 지연에 따른 비난과 스트레스가 개발자에게 향하여 에너지 소진, 고객의 요구를 충족하지 못하는 등의 부작용이 발생한다.
    • 고객은 개발된 제품이 자신이 원하는 것인지 알기 위해서 프로젝트 후반까지 기다려야만 한다.
    • 만약 고객이 요구한 시스템이 아니면 최악의 경우 프로젝트가 실패하게 될 수도 있다.


     

    Posted by 서오석
    ,