끄적대기

소프트웨어 설계

alpha-star 2022. 3. 24. 03:53
728x90
반응형

˙소프트웨어 설계의 종류

 최종적으로 개발될 내용 또는 제품에 대한 공학적인 내용(계획)으로, Client(사용자)의 요구사항이 담긴 내용으로, 품질 검증 단계(QA)가 반드시 필요하다. 소프트웨어 설계란 구성 뼈대에 정의하여 기반을 만드는 과정을 말하는데, 요구사항에 대한 분석과 소프트웨어에 대한 기능 등에 대한 설계(명세) 이후 구현을 위한 그림이 필요하다. 소프트웨어 설계는 크게 상위 설계(High-Level Design)와 하위 설계(Low-Level Design)로 나누어진다.

 

 ▷ 상위설계(High-Level Design)

   아키텍처 설계, 하위 설계를 위한 도면, 전체적인 구조로, System 수준 단계의 소프트웨어 구성 Component 관계이다.

 

 ▷ 하위설계(Low-Level Design)

   모듈 설계, 상위 설계에 대한 내용을 보다 상세하게 도출하여 만든 설계, 동적 행위 등에 대한 결정을 말한다. System의 각 구성요소들에 대한 설계, 내부 구조 설계로, 해당 설계과정이 완료되면, 구현(개발) 작업 진행의 부분으로, 구현(개발) 과정 중 직접적인 함수 처리나, 알고리즘 등에 대한 부분은 주로 개발자의 능력이다.

 

˙소프트웨어 설계 과정

 요구사항 설계(명세)에 대한 내용을 상세하게 포함하는 것이 좋고, 요구사항을 확실하게 알 수 있고, 이해하기 쉬울수록 좋으며, 유지보수 또는 기능 변경 시 변경에 대한 용이성이 높을수록 좋다. 설계 방식에는 프로젝트 지향 설계(Process Oriented Design)와 객체 지향 설계(Object Oriented Design)가 존재한다.

 

 ▷ 프로젝트 지향 설계(Process Oriented Design)

   처리절차 기준(중심)으로 설계(명세)에 대한 구성 요소를 구분한다. 어떠한 절차를 거쳐서 작업을 수행하고 입출력 자료 생성에 초점을 맞춘다. 함수 절차 구현에는 유리할 수 있지만, 함수들 간의 관계나 재사용성 관련 유형에는 다소 어려울 수 있다.

 

 ▷ 객체 지향 설계(Object Oriented Design)

   System의 실제 객체 요소 중심 설계 방식으로, 자료구조와 그에 대한 연산을 묶어서 구성되는 객체들을 정의한다. 상호작용에 대한 내용이 기본으로 될 수 있도록 명세(설계)한다. 소프트웨어 설계는 추상화(Abstraction), 단계적 분해(Stepwise Refinement), 모듈화(Modularization)가 존재한다.

 

 - 추상화(Abstraction)

 개발(구현) 전에 제품에 대한 내용은 먼저 생각해 보는 행위로, 자세한 단계를 고려하지 않고, Process가 진행되는 Flow에 대한 부분만 명세, 데이터 구조를 대표할 수 있는 표현하는 명세, 분기를 생각하며 추상화하는 명세이다.

 

 ▷ 단계적 분해(Stepwise Refinement)

   문제를 하위 수준의 독립된 단위로 나누는 행위로, 구분된 문제의 자세한 내용은 하위 단계에서 명세(설계)하는 행위, 점증적(단계별)로 작업이 진행될수록 명세(설계)하는 행위이다.

 

 ▷ 모듈화(Modularization)

   설계의 기본 단위로, 수행 가능한 명령어나 자료 구조, 모듈 등을 포함하는 독립 단위로, 각 모듈별로 이름을 가지고, 모듈별 연계 및 사용이 가능하며, 컴파일이 가능하다.

 

˙소프트웨어 설계 지식

 ▷ 캡슐화(Encapsulation)

   소프트웨어에 대한 모듈(처리 정보 및 방식 등)을 외부로부터 감추는 것으로 추상화 및 독립성을 보장한다.

 

 ▷ 상속(Inheritance)

   다른 Class의 속성이나 형태를 내려(상속) 받아서 사용하는 행위(부모/자식 관계)이다.

 

 ▷ 다형성(Polymorphism)

   하나의 Interface를 통하여 서로 다른 구현 내용을 제공(객체에 따라 다른 구현 제공 형태 등)한다.

728x90
반응형