Software Design에 관한 내용들을 정리한다.
1. Software Design 개요
설계라는 말은 사실 건축 용어이다.
컴퓨터 공학자들이 정교하면서도 견고한 소프트웨어를 만들기 위해 건축 공정의 개념을 빌려 쓴 것이라고 볼 수 있다.
건물을 지을 때 건축물의 품질을 유지하기 위하여,
- 청사진, 설계도, 일정표, 예산 등등 여러 요소들(입력물)이 필요하며,
- 입력물을 어떻게 배치하고 이용할 것인가에 관한 공정과
- 이런 입력물에 따른 산출물 등도 요구 된다.
소프트웨어 작성 과정을 건물을 짓는 과정과 비슷하다.
즉 소프트웨어 개발은 개발과정의 입력물과 산출물을 정의하고, 위와 유사한 과정들을 수행할 수 있어야 한다.
2. Hierarchy
소프트웨어 설계는 2계층으로 나뉜다.
- 개념설계(Conceptual Design)
- 상세설계(Detailed Design)
개념설계는 구조 설계(전체적인 뼈대), 상위 레벨 설계 등등으로 불린다.
예를들어 우리가 물건을 만들기 전에 전체적인 그림을 그릴 것이다. 어떠한 기능을 하는건 이 버튼을 누르면 된다던가 혹은 이러한 오작동을 일어켰을 때, 내용을 표시할 화면을 제품의 어디쯤에 표시한다던가 하는 것을 생각한 다음, 그 사항들을 밑스케치에 러프하게 반영시킬 것이다.
상세설계는 물리 설계, 하위 레벨 설계 등등으로 불린다.
개념설계에서 그린 도면을 좀 더 상세하게 그린다. 여기서 '상세하게(detailed)'라는 말은, '기능'자체가 구체적으로 제시된다라는 점이며 '숫자'와 '범위'가 정의됨을 의미한다. 위에서 예를 든 것을 이어나가자면, 어떤기능을 하는 버튼은 어떤 부분에 위치함을 숫자로 기술하고, 오작동을 일으켰을 경우 특정 위치에 있는 디스플레이에 에러메시지와 코드를 출력하는 것을 이 단계에서 정의 및 서술하는 것이다.
사실 용어상으로 "개념(논리) ↔ 물리"가 어울리지만, "소프트웨어"에서 "물리"라는 것이 존재할 수 있을까.
따라서 "상세"라는 말이 더 어울린다고 생각한다.
2.1. 개념 설계
- 시스템의 구조 설계
- 기능을 분해 모듈 구조 (모듈 자체의 기능, I/O 설계)
- 모듈 간의 관계를 정립(모듈 인터페이스)
- 자료설계(데이터베이스 설계)
- 결과 시스템 구조도(Structure Chart)
- 외부 파일 및 DB 설계도(레코드 레이아웃, ERD)
2.2. 상세설계
- 모듈 내부 설계
- 모듈별로 아래 내용을 기술
- 자료구조
- 변수명
- 자료형
- 역활 (주석으로 상세히 기술하면 좋다.)
- 알고리즘
- 알고리즘 이름
- 매개변수 타입
- 내부 절차(Pseudo code)
- 반환값
- 모듈 내 변수
- 이름
- 목적(무엇을 위해 저장하는지, 어떻게 이용될 것인지 기술)
- 자료구조
- 모듈별로 아래 내용을 기술
- DBMS 물리스키마
- 개념설계에서 논리스키마를 제공했다면, 상세설계에서는 실제로 작동할 수 있는 SQL 생성 구문이 제공되어야 한다.
- 컬럼명,자료형, 인덱스, 제약사항
- 효율적인 동작을 고려해야한다. 즉 컬럼들의 순서가 중요하다.(옵티마이징)
- 사용자 인터페이스 ( DBMS와 같은 시스템 프로그램(혹은 라이브러리)은 거의 해당하지 않는다. SQL 혹은 mdb_client와 같은 툴만 해당.)
- 메뉴
- 입력 폼
- 출력 레포트 자료구조 설계
- 구조형 및 배열 결과
- 프로그램 사양서
- 화면 및 출력물 레이아웃