본문 바로가기

CS BASIC/소프트웨어 설계와 방법론

[CS BASIC] COCOMO, 자료흐름도(DFD), 자료 사전(DD), 코드 설계(Code Design)

개요

지난 포스팅에서는 소프트웨어의 모델(Model)에 대해서 알아보고, 이러한 모델을 효과적으로 만들기 위한 모델링 기법과 코드 설계에 대해서 알아보았습니다.

 

소프트웨어 공학(Software Egineering)에서 모델링(Modeling)은 고객이 요청한 요구사항을 만족하는 소프트웨어를 제공하기 위하여,
소프트웨어의 내부적인 구조, 동적인 행위 등을 만들고 분석, 검증하는 과정을 통해 만들어진 모든 산출물을 총칭하는 개념입니다.

요약하자면, 주어진 요구사항으로 부터 앞으로 어떻게 소프트웨어를 개발할지 청사진을 그려가는 과정이라고 할 수 있습니다.
소프트웨어 모델링에 대한 자세한 설명은 아래의 포스팅을 참고하시면 좋을 것 같습니다.


https://1-hee.tistory.com/55

 

[CS BASIC] 모델(Model)과 UML, 다이어그램(Diagram)

개요 오늘은 소프트웨어의 모델링(Modeling)에 사용하는 통합 모델링 언어(UML, Unified Modeling Language)와 다양한 다이어그램(Diagram)에 대해서 알아보도록 하겠습니다. 소프트웨에서 모델(Model)이란 요

1-hee.tistory.com

 

그리고 다양한 소프트웨어들은 다음과 같은 네 가지의 설계 기본 원리를 바탕으로 만들어지게 됩니다.
① 정보 은닉(Information Hiding), ② 분할과 정복(Divide & Conquer), 

③ 데이터 추상화 (Data Abstraction), ④ 모듈 독립성 (Module Independency)

소프트웨어의 설계의 기본 원리에 대한 자세한 설명은 아래의 포스팅을 참고하시면 좋을 것 같습니다.
https://1-hee.tistory.com/103

 

[CS BASIC] 모듈(Module)과 모듈 평가 기준, 소프트웨어 아키텍처 뷰와 프레임워크

개요 오늘은 소프트웨어의 모듈(Module)에 대해서 알아보고, 모듈을 평가하는 기준, 그리고 소프트웨어 아키텍처 뷰와 프레임워크에 대해서 알아보도록 하겠습니다. 만일 여러분이 개발자가 되어

1-hee.tistory.com

 

오늘은 지난 포스팅에서 다루지 않았던 추가적인 모델링 기법과 설계 기술에 대해서 알아보고,
소프트웨어에서 사용 되는 다양한 데이터에 흐름에 대한 관리에 사용 되는 자료 흐름도(DFD, Data Flow Diagram)
시스템과 관련된 모든 자료의 명세와 자료 속성을 파악할 수 있도록 조직화한 도구인 자료 사전(DD, Data Dictionary)에 대해서 알아보도록 하겠습니다.


COCOMO(Constructive Cost Model)

  • 소프트웨어 개발의 공정 개발 기간의 견적 방법 중 하나이며, 1981년에 배리 W. 보임이 제창했다.
  • 이 모델은 프로젝트에 영향을 줄 수있는 다양한 특성들 -예를 들자면 개발기간, 투입공수 같은 변수-을 변수로 회귀공식을 만들어 소프트웨어 개발 비용을 산정
유형 설명
조직형 (Organic Mode) - 기관 내부에서 개발된 중 소규모의 소프트웨어로 일괄 자료 처리나 과학 기술 계산용, 비즈니스 자료 처리 개발에 적용
- 5만(50KDSI)라인 이하의 소프트웨어를 개발하는 유형
반 분리형 (Semi-Detached Mode) - 단순형과 임베디드형의 중간형
- 트랜잭션 처리 시스템이나, 데이터베이스 관리 시스템, 컴파일러, 인터프리터와 같은 유틸 개발에 적용
- 30만(300KDSI) 라인 이하의 소프트웨어를 개발하는 유형
임베디드형 (Embedded Mode) - 초대형 규모의 트랜잭션 처리 시스템이나 운영체제, 실시간 처리 시스템 등의 시스템 프로그램 개발에 적용
- 30만(300KDSI)라인 이상의 소프트웨어를 개발하는 유형

 


소프트웨어의 설계 기법

소프트웨어는 이를 구성하는 구성 요소를 설계 하려는 대상 및 관점에 따라 상위 설계와 하위설계로 구분할 수 있습니다.

 

 

상위설계(High-Level Design)

아키텍처 설계(Architecture), 예비 설계(preliminary Design)라고 하며 전체 골조(뼈대)를 세우는 단계입니다.
순서 단계 설명
1 아키텍처(구조) 설계  시스템의 전체적인 구조를 그림
2 데이터 설계 시스템에 필요한 정보를 자료 구조/데이터베이스 설계에 반영
3 시스템 분할 전체 시스템을 여러 개의 서브 시스템으로 분리
4 인터페이스 설계 시스템의 구조와 서브 시스템들 사이의 관계
5 사용자 인터페이스 설계 사용자와 시스템의 관계

 

하위 설계(Low-Level Design)

  • 모듈 설계(Module Desiogn), 상세 설계(Detail Design)라고 합니다.
  • 시스템 각 구성 요소들의 내부 구조, 동적 행위 등을 결정하여 각 구성요소의 제어와 데이터 간의 연결에 대한 구체적인 정의를 하는 단계입니다.

하위 설계 방법의 종류

① 절차 기반(Procedure-Oriented), ② 자료 위주(Data-Oriented, ③ 객체 지향(Object-Oriented)


절차 기반(구조적 설계, Procedure-Oriented)

  • 기능적 관점으로 소프트웨어에 요구된 기능이나 자료 처리 과정 ,알고리즘 등을 중심으로 시스템을 나누어 설계하는 방식이다.
  • 시스템의 각 모듈은 최상위 기능에서 하위 기능으로 하향적으로 세분화한다.
  • 대표적인 예시로 Coad/Yourdon 등이 있다.

자료 중심 설계

  • 입-출력 자료의 구조를 파악하여 소프트웨어 자료 구조를 설계하는 방식이다.
  • Jackson, Waner-Orr 등이 있다.


객체 지향 설계

  • 자료와 자료에 적용될 기능을 함께 묶어 추상화하는 개념이다.
  • 시스템은 객체로 구성된다.
  • ex) Yourdon, Sheller/Meller, Rumbaugh, Booch 등


자료 흐름도(DFD, Dataflow Diagram)란?

  • 시스템 내의 모든 자료 흐름을 4가지의 기본 기호(처리, 자료흐름, 자료저장소, 단말)로 기술하고 이런 자료 흐름을 중심으로 한 분석용 도구입니다.
  • DFD의 구성 요소는 화살표, 원, 사각형, 직선(단선/이중선)으로 표시하고 구조적 분석 기법에 이용됩니다.
  • 시스템이나 프로그램 간의 총체적인 데이터 흐름을 표시할 수 있으며, 기본적인 데이터 요소와 그들 사이의 데이터 흐름 형태로 기술됩니다.
  • 다차원적이며 자료 흐름 그래프 또는 버블(Bubble) 차트라고도 합니다.
  • 그림 중심의 표현이고 하향식 분할 원리를 적용합니다.
  • 갱신하기 쉬워야 하며 이름의 중복을 제거하여 이름으로 정의를 쉽게 찾을 수 있도록 합니다.
  • 정의하는 방식이 명확해야 합니다.

자료 흐름도(DFD, Dataflow Diagram)의 구성요소

구성요소 설명 표기법
프로세스
(Process)
입력된 데이터를 원하는 형태로 변환하여 출력하기 위한 과정으로, DFD에서는 원(○)으로 표시
데이터 흐름 
(Data Flow)
DFD의 구성요소(프로세스, 데이터 저장소, 외부 엔터티)들 간의 주고 받는 데이터 흐름을 나타내며, DFD에서는 화살표(→)로 표시
데이터 저장소
(Data Store)
데이터가 저장된 장소이고, 평행선(=)으로 표시하며, 평행선 안에는 데이터 저장소의 이름을 넣음
단말
(Terminator)
프로세스 처리 과정에서 데이터가 발생하는 시작과 종료를 나타내고, 사각형(□)으로 표시하며 사각형 안에는 외부 엔터티의 이름을 넣음

 


자료 흐름도(DFD)의 작성 원칙

  • 출력 자료 흐름 입력자료 흐름을 이용해 생성합니다.
  • 입력, 출력 자료 자체에 대해서만 인지하고 자료의 위치나 방향을 알 필요 없습니다
  • 자료 흐름 변환의 형태에는 본질 변환 ,합성의 변환, 관점의 변환, 구성의 변환 등이 있습니다.
원칙 설명
① 자료 보전의 원칙 출력 자료의 흐름은 반드시 입력자료의 흐름을 이용해 생성한다.
② 최소 자료 입력의 원칙 출력 잘를 산출하는 데 필요한 최소의 자료 흐름만 입력한다.
③ 독립성의 원칙 프로세스는 오직 자신의 입력 자료와 출력 자료 자차에 대해서만 알면 된다.
④ 지속성의 원칙 프로세스는 항상 수행하고 있어야 한다.
⑤ 순차 처리의 원칙 입력 자료 흐름의 순서는 출력되는 자료 흐름에서도 지키도록 한다.
⑥ 영구성의 원칙 자료 저장소의 자료는 입력으로 사용해도 삭제되지 않는다.

 

소단위 명세서(Mini Specification)

  • 세분화된 자료 흐름도에서 최하위 단계 프로세스의 처리 절차를 설명한 것이다.
  • 세분화된 자료 흐름도에서 최하위 단계 버블(프로세스)의 처리 절차를 기술한 것으로 프로세스 명세서라고도 한다.
  • 분석가의 문서이며, 자료 흐름도(DFD)를 지원하기 위하여 작성한다.
  • 서술 문장, 구조적 언어, 의사 결정 나무, 의사 결정표(판단표), 그래프 등을 이용하여 기술한다.

자료 흐름도(DFD)와 함깨 사용 되는 다양한 문서들(Document)

종류 설명
구조적 언어 자연어 일부분으로 한정된 단어와 문형, 제한된 구조를 사용하여 명세서를 작성하는 데 이용하는 명세 언어이다.
의사결정 나무 현재 상황과 목표와의 상호 관련성을 나무의 가지를 이용해 표현한 것으로 불확실한 상황에서의 의사결정을 위한 분석 방법이다.
의사결정 표(Decision Table) 복잡한 의사결정 논리를 기술하는데 사용하며, 주로 자료 처리 분야에서 이용된다.

자료 사전(DD, Data Dictionary)

  • 시스템과 관련된 모든 자료의 명세와 자료 속성을 파악할 수 있도록 정의한 문서입니다.
  • 조직에 속해 있는 다른 사람들에게 특정한 자료가 무엇을 의미하는지 알려주기 위하여 용어의 정의를 조정하고 취합하여 문서로 명확히한 것을 말합니다.
  • 자료사전은 자료요소, 자료 요소들의 집합, 자료의 흐름, 자료 저장소의 의미과 관계, 관계 값, 범위, 단위등을 구체적으로 명시합니다.
  • 구조적 시스템 방법론에서 자료 흐름도, 소단위 명세서와 더불어 중요한 분석 문서 중 하나입니다.
  • 자료 사전 이해도를 높이고자 할 때는 하향식 분할 원칙에 맞추어 구성요소를 재정의합니다.

자료사전에서 기술해야할 자료

① 자료흐름을 구성하는 자료 항목

② 자료 저장소를 구성하는 자료 항목

③ 자료에 대한 의미

④ 자료 원소의 단위 및 값

 

자료 사전의 표기법

기호 의미 설명
= 자료의 정의 - 자료의 정의로서 ‘~으로 구성되어(is Composed of) 있다’는 것을 나타냄
- 정의는 주석을 사용하여 의미를 기술하며, 자료 흐름과 자료 저장소에 대한 구성 내역을 설명하고, 자료 원소에 대하여 값이나 단위를 나타냄
+ 자료의 연결 - 그리고(and, along with)
- 자료의 연결(and, along with)을 나타냄
() 자료의 생략 - 생략 가능한 자료(optional)
- 자료의 생략 가능함을 나타냄
[ | ] 자료의 선택 - 다중택일 또는
-자료의 선택을 나타냄
{}  자료의 반복 - 자료의 반복을 나타냄
- 반복 횟수를 기록하는데 {} 에서 좌측에는 최소 반복 횟수를 기록하고, 우측에는 최대 반복 횟수를 기록함
- 반복 횟수를 기록하지 않을 때는 디폴트(Default)로 최소는 0, 최대는 무한대
{}n  자료의 반복 최소 n번 이상 반복
{}^n 자료의 반복 최대 n번 이하 반복
{}^nm 자료의 반복 m <= n 반복
** 자료의 설명 주석(Comment)

 


코드 설계(Code Design)

  • 데이터의 사용 목적에 따라서 식별하고 분류, 배열하기 위하여 사용하는 숫자, 문자 혹은 기호를 코드(Code)라고 합니다.
  • 대량의 자료를 구별, 동질의 그룹으로 분류하고 순번으로 나열하며, 특정의 자료를 선별하거나 추출을 쉽게 하여 파일 시스템을 체계화한 것을 코드 설계(Code Design)라 합니다.

 

코드 설계의 순서

① 코드 대상 선정 → ② 코드화 목적 명확화 → ③ 코드 부여 대상 수확인 → ④ 사용 범위 결정 → ⑤ 사용 기간 결정 
→ ⑥ 코드화 대상의 특성 분석 → ⑦ 코드 부여 방식 결정 → ⑧ 코드의 문서화

 

코드의 기능

코드(Code)는 다음과 같은 기능들을 가지고 있습니다.

 

코드의 기본적 기능

표준화 기능: 코드의 일관성과 표준을 유지하여 유지보수 및 협업을 용이하게 합니다.

간소화 기능: 불필요한 복잡성을 제거하여 코드를 간결하고 이해하기 쉽게 만듭니다.

 

코드의 3대 기능

분류 기능 : 데이터를 특정 기준에 따라 분류하고 정리하여 가독성을 높이고 유용한 정보를 도출합니다.
식별 기능 : 객체나 데이터를 고유하게 식별하여 구분하고, 필요한 정보를 식별자를 통해 찾을 수 있게 합니다.
배열 기능: 데이터를 배열 또는 리스트 형태로 저장하고 관리하여 효율적인 데이터 처리를 가능하게 합니다.

 

코드의 부가적 기능

연상 기능 : 데이터나 객체 간의 관계를 맺고 연결하여 효율적인 정보 검색 및 활용을 지원합니다.

암호화 기능 : 민감한 정보를 안전하게 보호하기 위해 데이터나 통신을 암호화하여 보안성을 강화합니다.

오류 검출 기능 : 코드 실행 중 발생할 수 있는 오류를 검출하고 적절한 처리를 통해 안정성을 높여 예외 상황에 대비합니다.


코드 설계 목적 및 특성

특성 설명
① 고유성 코드는 그 뜻이 1:1로 확실히 대응할 수 있어야 한다.
② 분류 편리성 목적에 적합한 분류가 가능해야 한다.
③ 배열의 효율성 바람직한 배열을 얻을 수 있어야 한다.
④ 간결성 짧고 간결 명료해야 한다.
유지보수 편리성 유지 관리가 쉬워야 한다.
⑥ 코드의 독립성 다른 코드와 체계가 중복되지 않아야 한다.
⑦ 코드의 편의성 이해가 쉽고, 사용하는 데 편리해야 한다.
⑧ 추가-삭제 편리성 추가와 삭제가 편리해야 한다.

 

코드 설계 시 고려사항

고려사항 설명
① 기계 처리의 적합성 컴퓨터의 처리에 적합하게 한다.
② 사용의 편리성 취급하기 쉽도록 한다.
③ 코드의 공통성 공통성이 있도록 한다.
④ 코드의 체계성 체계적이어야 한다.
⑤ 코드의 유연성 확장성이 있어야 한다.

 

코드의 종류

코드(Code) 설명
순차 코드
(Sequence Code)
- 코드화 대상 항목을 어떤 일정한 배열로 일련번호를 배당하는 코드로 확장성이 좋으며, 단순하여 이해하기 쉽고 기억하기 쉽다.
- 항목 수가 적고 변경이 적은 자료에 적합하며, 일정 순서대로 코드를 할당하므로 기억 공간 낭비가 적다.
- 누락된 번호를 삽입하기 어렵고, 명확한 분류 기준이 없어 코드에 따라 분류가 어려워 융통성이 낮다.
블록 코드
(Block Code, 구분 코드)
- 코드화 대상 항목에 미리 공통의 특성에 따라서 임의의 크기를 블록으로 구분하여 각 블록 안에서 일련번호를 배정하는 코드
- 기계 처리가 어렵고 블록마다 여유 코드를 두어 코드의 추가를 쉽게 할 수 있지만, 여유 코드는 코드 낭비 요인이 된다.
그룹 분류식 코드
(Group Classification Code)
- 코드화 대상 항목을 소정의 기준에 따라 대분류, 중분류, 소분류로 구분하고 순서대로 번호를 부여하는 코드
- 분류 기준이 명확한 경우 이용도가 높으며 기계 처리에 가장 적합하다.
- 여유 부분이 있어 자료추가를 쉽게 처리할 수 있어나 자릿수가 길어질 수 있다.
10진 분류 코드
(Decimal Code)
- 좌측 부는 그룹 분류에 따르고 우측은 10진수의 원칙에 따라 세분화하는 코드이다.
- 무한하게 확대할 수 있어 대량의 자료에 대한 삽입 및 추가가 쉽다.
- 자릿수가 많아지고 기계 처리에 불편하지만, 배열이나 집계가 쉽다.
- 주로 도서 분류 코드에 사용된다.
표의 숫자 코드
(Significant Digit Code,
유효 숫자 코드)
- 코드화 대상 항목의 길이, 넓이, 부피, 무게 등을 나타내는 문자나 숫자, 기호를 그대로 사용하는 코드이다.
- 코드의 추가 및 삭제가 쉽다.
- 같은 코드를 반복 사용하므로 오류가 적다.
연상 코드
(Mnemonic Code, 기호 코드)
- 코드화 대상의 품목 명칭 일부를 약호 형태로 코드 속에 넣어 대상 항목을 쉽게 알 수 있는 코드이다
약자 코드
(Letter Code)
- 일반적으로 사용해온 단위의 약자를 코드로 사용한 경우이다.
끝자리 분류 코드
(Final Digit Code)
- 다른 종류의 코드와 조합해서 사용하며, 코드의 끝에 붙여서 그 의미를 표현한다.



코드의 오류 종류

코드(Code) 설명
필사 오류 
Transcription Error
입력 시 한 자리를 잘못 기록하는 오류
전위 오류
Transposition Error
입력 시 좌우 자리를 바꾸어 발생하는 오류
이중 오류
Double Transposition Error
전위 오류가 두 개 이상 발생하는 오류
생략 오류 
Missing Error
입력 시 한 자리를 빼고 기록하는 오류
추가 오류 
Addition Error
입력 시 한 자리를 추가해서 기록하는 오류
임의 오류 
Random Error
두 가지 이상의 오류가 결합해서 발생하는 오류

 


참고자료

https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%ED%9D%90%EB%A6%84%EB%8F%84

 

데이터 흐름도 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

https://ko.wikipedia.org/wiki/COCOMO

 

데이터 흐름도 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org