자격증/정보처리기사_문제풀이_25년 03차

[25년 03차 / 문제풀이] 소프트웨어 설계

Sury 2025. 6. 1. 12:27
개념

 

☐ 소프트웨어 개발의 설계 단계

 

●  상위 설계

- 아키텍처 설계, 예비 설계 

- 설계 대상 : 시스템의 전체적인 구조

- 세부 목록 : 구조, DB, 인터페이스

●  하위 설계

- 모듈 설계, 상세 설계

- 설계 대상 : 시스템의 내부 구조 및 행위

- 세부 목록 : 컴포넌트, 자료 구조, 알고리즘

 


 

상향식 설계(Top-down design), 하향식 설계(Bottom-up design)

 

●  상향식 설계(Top-down design)

- 상향식 설계의 개념 : 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트하는 기법

- 상향식 설계의 예시 : 구조적 설계, 절차지향 설계 (C언어)

- 상향식 설계의 절차

+ 주요 제어 모듈은 작성된 프로그램을 사용하고, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체

+ 깊이 우선 or 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체됨

+ 모듈이 통합될 때마다 테스트 실시

+ 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트 실시

- 상향식 설계의 특징

+ 시스템의 큰 구조를 계획하고, 그 구조에서 하위 모듈들을 세분화하여 구체적인 동작 방식을 정의, 이때 각 모듈의 입출력, 기능, 인터페이스 등을 상세하게 정의하고, 이후 모듈들 간의 연결을 고려하여 전체 시스템 통합

+ 깊이 우선 통합법, 넓이 우선 통합법 사용

+ 최하위 수준에서 각각의 모듈들을 설계하고 이러한 모듈이 완성되면 이들을 결합하여 검사함 

- 상향식 설계의 장점

+ 테스트 초기부터 사용자에게 시스템 구조를 보여줄 수 있음

- 상향식 설계의 단점

+ 상위 모듈에서는 fc를 사용하기 어려움

+ 인터페이스가 이미 성립되어 있지 않으면 기능 추가가 어려움 

●  하향식 설계(Bottom-up design)

- 하향식 설계의 개념 : 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 방법

- 하향식 설계의 예시 : 객체지향 설계

- 하향식 설계의 절차

+ 하위 모듈을 클러스터로 결합

+ 상위 모듈에서 데이터의 입출력을 확인하기 위해 모듈인 드라이버 작성

+ 통합된 클러스터 단위로 테스터

+ 테스트가 완료되면 클러스터는 프로그램 구조의 상위로 이동하여 결합하고, 드라이버는 실제 모듈로 대체 

- 하향식 설계의 특징

+ 먼저 세부적인 기능을 가진 모듈을 구현하고, 이 모듈들을 조합하여 큰 구조를 형성, 이때 각 모듈은 독립적으로 테스트할 수 있도록 설계되며 이후 모듈들을 조합하여 전체 시스템을 완성

+ 가장 하위 단계의 모듈부터 통합 및 테스트가 수행되므로 스텁은 필요하지 않음

+ 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터가 필요

+ 하향식 설계에서 레벨이 낮은 데이터 구조의 세부 사항은 설계 초기 단계에서 필요 

- 하향식 설계의 장점

+ 통합 검사 시 인터페이스가 이미 정의되어 있어 통합이 간단함

 


 

효과적인 모듈 설계 방안

 

●  결합도는 줄이고 응집도는 높여서 모듈의 독립성과 재사용성을 높임

●  복잡도와 중복성을 줄이고 일관성을 유지시킴

●  유지보수 용이

●  모듈의 제어 영역 안에서 그 모듈의 영향 영역을 유지시킴

●  모듈의 기능은 예측이 가능해야 하며, 지나치게 제한적이어서는 안 됨

●  모듈의 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해

●  효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시되어야 함

 


 

객체지향 설계 원칙(SOLID 원칙)

 

단일 책임 원칙(SRP, Single Responsibility Principle) 

- 객체는 단 하나의 책임만 가져야 한다는 원칙

개방-폐쇄 원칙(OCP, Open-Closed Principle)

- 기존의 코드는 변경하지 않고 기능을 추가할 수 있도록 설계해야 한다는 원칙

●  리스코프 치환 원칙(LSP, Liskov Substitution Principle)

- 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다는 설계 원칙

- 서브타입(상속받은 하위 클래스)은 어디에서나 자신의 기반 타입(상위 클래스)으로 교체할 수 있어야 함을 의미하는 원칙 

인터페이스 분리 원칙(ISP, Interface Segregation Principle)

- 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙

의존 역전 원칙(DIP, Dependency Inversion Principle)

- 각 객체들 간의 의존 관계가 성립될 때, 추상성이 낮은 클래스보다 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙 

 


 

문제

 

☐ 소프트웨어 개발의 설계 단계

 

2020년-3차 12번. 소프트웨어의 상위 설계에 속하지 않는 것은?

 

① 아키텍처 설계
② 모듈 설계
③ 인터페이스 정의
④ 사용자 인터페이스 설계



정답 : 2
입력 답 : 4

 



상향식 설계(Top-down design), 하향식 설계(Bottom-up design)

 

2022년-1차 5번. 설계 기법 중 하향식 설계 방법과 상향식 설계 방법에 대한 비교 설명으로 가장 옳지 않은 것은?

 

① 하향식 설계에서는 통합 검사 시 인터페이스가 이미 정의되어 있어 통합이 간단하다.
② 하향식 설계에서 레벨이 낮은 데이터 구조의 세부 사항은 설계 초기 단계에서 필요하다.
③ 상향식 설계는 최하위 수준에서 각각의 모듈들을 설계하고 이러한 모듈이 완성되면 이들을 결합하여 검사한다.
④ 상향식 설계에서는 인터페이스가 이미 성립되어 있지 않더라도 기능 추가가 쉽다.



정답 : 4
입력 답 : 2

 


 

 효과적인 모듈 설계 방안

 

2024년-2차 7번. 바람직한 소프트웨어 설계 지침이 아닌 것은?

 

① 결합도를 최소화하고 응집도를 최대화한다.
② 복잡도와 중복성을 줄이고 일관성을 유지시킨다.
③ 하나의 입구와 하나의 출구를 갖도록 해야 한다.
④ 모듈의 크기를 가능한 작게 구성하여 병행성 수준을 높여야 한다.



정답 : 4
입력 답 : 3

 

2024년-2차 33번. 효과적인 모듈 설계를 위한 유의사항으로 거리가 먼 것은?

 

① 모듈 간의 결합도를 약하게 하면 모듈 독립성이 향상된다.
② 하나의 입구와 하나의 출구를 갖도록 해야 한다.
③ 모듈의 기능은 예측이 가능해야 하며 지나치게 제한적이어서는 안된다.
④ 일관성을 줄이고 중복성을 유지시킨다.



정답 : 4
입력 답 : 2

 


 

 객체지향 설계 원칙(SOLID 원칙)

 

2020년-2회 17번. 객체지향 설계 원칙 중 서브타입(상속받은 하위 클래스)은 어디에서나 자신의 기반타입(상위클래스)으로 교체할 수 있어야 함을 의미하는 원칙은?

 

① ISP(Interface Segregation Principle)
② DIP(Dependency Inversion Principle)
③ LSP(Liskov Substitution Principle)
④ SRP(Single Responsibility Principle)



정답 : 3
입력 답 : 2

 

2024년-2차 8번. 객체지향 설계 원칙에 대한 설명 중 틀린 것은?

 

① OCP : 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 한다는 원칙
② LSP : 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다는 설계 우너칙
③ DIP : 각 객체들 간의 의존 관계가 성립될 때, 추상성이 낮은 클래스보다 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
④ ISP : 객체는 단 하나의 책임만 가져야 한다는 원칙



정답 : 4
입력 답 : 3