프로그램 아키텍쳐/소프트웨어공학

개요 - 소프트웨어 설계론

본클라쓰 2010. 6. 20. 13:48

소프트웨어 설계란 '사용자의 요구를 만족시키기 위하여 제약 조건이 반영된 구현 대안을 창출하는 일'이다. 소프트웨어 설계는 소프트웨어 개발 프로세스 중에서 기술적인 핵심 부분이다.

 

보통 요구 분석을 통해 정의된 결과를 기초로 하여 소프트웨어 속성, 성능 등을 가장 적합하게 실현시킬 수 있는 알고리즘과 그에 의해서 처리될 자료구조의 특성을 찾아내서 이를 명세화하는 것이다. 설계는 개발 단계의 최초 작업이며 장치, 프로세스, 시스템을 명확하고 자세하게 정의하여 실질적으로 실현 가능하도록 관련된 기술의 원칙을 적용하는 과정이다.

 

이 때 소프트웨어를 설계하는 사람은 사용자와 개발자를 동시에 만족시켜야 한다. 사용자는 설계를 보고 시스템이 어떤 기능을 하는지 이해할 수 있어야 하며, 개발자는 시스템이 어떻게 동작하고 어떻게 구현하는지 이해할 수 있어야 한다.

 

또한 시스템의 구성과 이에 필요한 데이터를 추상화하고 시스템의 각 부분 사이에 있는 인터페이스를 확립하고 제어와 데이터 연결을 명확히 정의하여 목표한 시스템 품질을 보증하기 위한 여러 가지 설계 상의 장단점이 들어나야 한다.

 

 

 

소프트웨어 설계의 종류

 

 

아키텍처 설계

 

아키텍처 설계는 분석 단계의 산출물인 자료 흐름도를 기반으로 하여 자료 흐름도에 표현된 내용을 프로그램 구조도로 변환하는 작업이다. 변환 흐름을 기반으로 하는 경우와 트랜잭션 흐름을 기반으로 하는 경우로 구분할 수 있다.

 

모듈 설계

 

아키텍처 설계를 통해 얻어진 프로그램의 구조도의 모듈들에 대해 모듈들 사이의 기능적인 독립성을 확보하기 위해 세부적으로 구체화하는 설계과정이다. 이 때 모듈 사이의 응집도와 결합도가 중요 관심사이다.

 

데이터 설계

 

요구 사항 분석 단계에서 얻어진 개체들을 프로그램을 구현할 데이터 구조로 변환하는 업무이다.

 

인터페이스 설계

 

인터페이스 설계는 소프트웨어 모듈들 상호간의 인터페이스에 대한 설계로 소프트웨어와 다른 소프트웨어 또는 장치들과의 인터페이스, 컴퓨터와 사용자와의 의사 교환을 위한 인터페이스 설계 등이 있다.

 

 

 

설계의 원리

 

설계의 원리로는 추상화, 정보은닉, 단계적 분해, 모듈화 등이 있다.

 

추상화는 복잡한 문제를 일반화하여 쉽게 이해할 수 있게 정리하는 것이고, 정보은닉은 함수의 내부 변수 사용이 외부에 알려질 필요가 없게 하는것, 단계적 분해는 처음에는 간단하게 차츰 세밀하게 표현하는 것. 모듈화는 각 모듈은 서로 독립적이어야 하는 것을 말한다.

 

좋은 설계일수록 모듈 안의 구체적인 사항을 최소로 반영되어야 하며, 전역 변수가 없어야 하며, 모듈의 입력이 1이면 입력, 2이면 출력과 같은 방식을 사용하지 않는 것이 좋다.

 

또한, 시스템의 구조를 설계할 때는 기능을 분해 모듈의 구조, 모듈 간의 관계로 정립하고, 자료구조를 설계한다. 구조 설계의 결과물은 시스템 구조도와  DB 설계도 등이 있다.