sonumb

Software Design - 소프트웨어 설계 본문

개발자 이야기/Software Engineering

Software Design - 소프트웨어 설계

sonumb 2018. 8. 21. 17:48


메타 데이터의 끝으로 건너뛰기

Software Design에 관한 내용들을 정리한다.

1. Software Design 개요

설계라는 말은 사실 건축 용어이다.

컴퓨터 공학자들이 정교하면서도 견고한 소프트웨어를 만들기 위해 건축 공정의 개념을 빌려 쓴 것이라고 볼 수 있다.

건물을 지을 때 건축물의 품질을 유지하기 위하여,

  1. 청사진, 설계도, 일정표, 예산 등등 여러 요소들(입력물)이 필요하며,
  2. 입력물을 어떻게 배치하고 이용할 것인가에 관한 공정과
  3. 이런 입력물에 따른 산출물 등도 요구 된다.

소프트웨어 작성 과정을 건물을 짓는 과정과 비슷하다. 

즉 소프트웨어 개발은 개발과정의 입력물과 산출물을 정의하고, 위와 유사한 과정들을 수행할 수 있어야 한다.

2. Hierarchy

소프트웨어 설계는 2계층으로 나뉜다.

  • 개념설계(Conceptual Design)
  • 상세설계(Detailed Design)

개념설계는 구조 설계(전체적인 뼈대), 상위 레벨 설계 등등으로 불린다. 

예를들어 우리가 물건을 만들기 전에 전체적인 그림을 그릴 것이다. 어떠한 기능을 하는건 이 버튼을 누르면 된다던가 혹은 이러한 오작동을 일어켰을 때, 내용을 표시할 화면을 제품의 어디쯤에 표시한다던가 하는 것을 생각한 다음, 그 사항들을 밑스케치에 러프하게 반영시킬 것이다.

 

상세설계는 물리 설계, 하위 레벨 설계 등등으로 불린다.

개념설계에서 그린 도면을 좀 더 상세하게 그린다. 여기서 '상세하게(detailed)'라는 말은, '기능'자체가 구체적으로 제시된다라는 점이며 '숫자'와 '범위'가 정의됨을 의미한다. 위에서 예를 든 것을 이어나가자면, 어떤기능을 하는 버튼은 어떤 부분에 위치함을 숫자로 기술하고, 오작동을 일으켰을 경우 특정 위치에 있는 디스플레이에 에러메시지와 코드를 출력하는 것을 이 단계에서 정의 및 서술하는 것이다. 

 

사실 용어상으로 "개념(논리) ↔ 물리"가 어울리지만, "소프트웨어"에서 "물리"라는 것이 존재할 수 있을까.
따라서 "상세"라는 말이 더 어울린다고 생각한다.


2.1. 개념 설계

  • 시스템의 구조 설계
  • 기능을 분해 모듈 구조 (모듈 자체의 기능, I/O 설계)
  • 모듈 간의 관계를 정립(모듈 인터페이스)
  • 자료설계(데이터베이스 설계)
  • 결과 시스템 구조도(Structure Chart)
  • 외부 파일 및 DB 설계도(레코드 레이아웃, ERD)

2.2. 상세설계

  • 모듈 내부 설계
    • 모듈별로 아래 내용을 기술
      • 자료구조
        • 변수명
        • 자료형
        • 역활 (주석으로 상세히 기술하면 좋다.)
      • 알고리즘
        • 알고리즘 이름
        • 매개변수 타입
        • 내부 절차(Pseudo code)
        • 반환값
      • 모듈 내 변수
        • 이름
        • 목적(무엇을 위해 저장하는지, 어떻게 이용될 것인지 기술)
  • DBMS 물리스키마
    • 개념설계에서 논리스키마를 제공했다면, 상세설계에서는 실제로 작동할 수 있는 SQL 생성 구문이 제공되어야 한다.
    • 컬럼명,자료형, 인덱스, 제약사항
    • 효율적인 동작을 고려해야한다. 즉 컬럼들의 순서가 중요하다.(옵티마이징)
  • 사용자 인터페이스 ((warning) DBMS와 같은 시스템 프로그램(혹은 라이브러리)은 거의 해당하지 않는다. SQL 혹은 mdb_client와 같은 툴만 해당.)
    • 메뉴
    • 입력 폼
    • 출력 레포트 자료구조 설계
    • 구조형 및 배열 결과
    • 프로그램 사양서
    • 화면 및 출력물 레이아웃


반응형