[정보처리기사 필기] 소프트웨어 설계 요약 정리 2
16. 사용자 인터페이스(UI)
사용자의 편리성과 가독성을 높임으로써 작업시간을 단축시키고 업무에 대한 이해도를 높여준다.
- CLI : 명령과 출력이 텍스트 형태로 이뤄지는 인터페이스
- GUI : 그래픽 환경의 인터페이스
- NUI : 말이나 행동으로 기기 조작
- VUI : 음성으로 기기 조작
- OUI : 모든 사물과 사용자 간의 상호작용을 위한 인터페이스
- 설계지침 ) 사용자 중심 / 사용성 /심미성 /오류발생해결
- 기능 ) 사용자의 입력을 검증, 에러처리 표시, 도움과 프롬프트 제공
UI설계도구
UI의 화면 구조나 화면배치 등을 설계할 때 사용하는 도구
- 와이어프레임, 목업, 스토리보드, 프로토타입, 유즈케이스 등이 있다.
- 와이어프레임(Wireframe)
- 기획단계의 초기에 제작
- 개략적인 레이아웃이나 UI요소 등에 대한 뼈대 설계
- 툴 : 손그림, 파워포인트, 키노트, 스케치, 일러스트, 포토샵 등
- 목업(Mockup)
- 디자인, 사용방법 설명, 평가 등을 위해 와이어프레임보다 더 실제 화면과 유사한 정적인 형태의 모형
- 실제로 구현되지는 않음
- 툴 : 파워목업, 발사믹 목업 등
- 스토리보드(Story Board)
- 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동흐름 등을 추가한 문서
- 최종적으로 참고하는 작업지침서, 모든 정보가 들어있음
- 툴 : 파워포인트, 키노트, 스케치, Axure 등
- 프로토타입(Prototype)
- 실제구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 유즈케이스(Use Case)
- 사용자 요구사항
UI 요소
- 체크박스 : 1개 이상의 값을 선택할 수 있는 버튼
- 라디오 버튼 : 여러 항목 중 하나만 선택할 수 있는 버튼
- 텍스트 박스 : 사용자가 데이터 입력, 수정 가능
- 콤보 상자 : 이미 지정된 목록 상자에 내용을 표시하여 선택하거나 새로 입력할 수 있는 상자
- 목록 상자 : 콤보 상자와 같이 목록을 표시하지만 새로운 내용을 입력할 수 없는 상자
17. 품질 요구사항
소프트웨어의 기능, 성능, 만족도 등 소프트웨어에 대한 요구사항이 얼마나 충족하는 가를 나타내는 소프트웨어 특성의 총체
- 기능성, 신뢰성, 사용성, 효율성, 유지보수성, 이식성
18. 소프트웨어 개발의 설계단계
상위설계 | 하위설계 | |
별칭 | 아키텍처 설계, 예비 설계 | 모듈설계, 상세 설계 |
설계 대상 | 시스템의 전체적인 구조 | 시스템의 내부 구조 및 행위 |
세부목록 | 구조, DB, 인터페이스 | 컴포넌트, 자료 구조, 알고리즘 |
19. 소프트웨어 아키텍쳐
- 모듈화 : 소프트웨어 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈단위로 나누는 것을 의미
- 추상화 : 문제의 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시켜 나가는 것 (추상화 유형 : 과정/데이터/제어 추상화)
- 단계적 분해 : Niklaus Wirth에 의해 제안된 하향식 설계 전략, 문제를 상위의 중요 개념으로부터 하위의 개념으로 구체화시키는 분할 기법
- 정보 은닉 : 한 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
품질속성
이해관계자들이 요구하는 수준의 품질을 유지 및 보장 할 수 있게 설계되었는지를 확인하기 위해 품질 평가 요소들을 시스템 측면, 비즈니스 측면, 아키텍처 측면으로 구분하여 구체화 시켜 놓은 것
- 시스템 측면 : 성능, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
- 비즈니스 측면 : 시장 적시성, 비용과 혜택, 예상 시스템 수명 등
- 아키텍처 측면 : 개념적 무결성, 정확성, 완결성, 구축 가능성 등
설계과정
1. 설계 목표 설정 : 시스템의 개발 방향을 명확히 하기 위해 설계에 영향을 주는 비즈니스 목표
2. 시스템 타입 결정 : 시스템과 서브시스템의 타입 결정, 설계 목표와 함게 고려 아키텍처 패턴 선택
3. 아키텍처 패턴 적용 : 시스템의 표준 아키텍처를 설계
4. 서브시스템 구체화 : 서브 시스템의 기능 및 서브 시스템 간의 상호작용을 위한 동작과 인터페이스를 정의
5. 검토 : 아키텍처가 설계 목표에 부합하는지, 요구사항이 잘 반영되었는지, 설계의 기본 원리를 만족하는지 등을 검토
20. 협약(Contract)에 의한 설계
컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것으로, 소프트웨어 컴포넌트에 대한 정확한 인터페이스를 명세한다.
*컴포넌트 = 모듈, 여러 개의 프로그램 함수들을 모아 하나의 특정한 기능을 수행할 수 있도록 구성한 작은 기능적 단위
명세에 포함될 조건
- 선행 조건 : 오퍼레이션이 호출되기 전에 참이 되어야 할 조건
- 결과 조건 : 오퍼레이션이 수행된 후 만족되어야 할 조건
- 불변 조건 : 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
21. 파이프-필터 패턴
데이터 스트림 절차의 각 단계를 필터 컴포넌트로 캡슐화하여 파이프를 통해 데이터를 전송하는 패턴
- 재사용성이 좋고 추가가 쉬워 확장 용이
- 필터 컴포넌트들을 재배치하여 다양한 파이프라인을 구축하는 것이 가능
- 데이터 변환, 버퍼링, 동기화 등에 주로 사용
- 대표적으로 UNIX의 Shell이 있다.
Source - pipe1-> Filter1 - pipe2-> Filter2 - pipe3 -> Sink
22. 모델-뷰-컨트롤러 패턴
서브시스템을 3개의 부분으로 구조화하는 패턴
- 모델 : 서브시스템의 핵심 기능과 데이터를 보관
- 뷰 : 사용자에게 정보 표시
- 컨트롤러 : 사용자로부터 입력된 변경요청을 처리하기 위해 모델에게 명령 보냄
23. 기타 패턴
- 마스터-슬레이브 패턴 : 장애 허용 시스템과 병렬 컴퓨팅 시스템에서 주로 활용
- 브로커 패턴 : 분산환경 시스템에서 주로 활용
- 피어-투-피어 패턴 : 피어(Peer)를 하나의 컴포넌트로 간주, 각 피어는 클라이언트가 될 수도, 서버가 될 수 도 있는 패턴
- 이벤트-버스 패턴 : 소스가 특정 채널에 이벤트 메시지 발행하면, 해당 채널을 구독한 리스너들이 받아 이벤트 처리
- 블랙보드 패턴 : 컴포넌트들은 검색을 통해 블랙보드에서 원하는 데이터를 찾을 수 있음. 음성인식, 차량 식별, 신호 해성 등에 주로 활용
- 인터프리터 패턴 : 프로그램 코드의 각 라인을 수행하는 방법을 지정, 기호마다 클래스를 갖도록 구성
24. 객체(Object)
데이터와 데이터를 처리하는 함수를 묶어놓은(캡슐화한) 하나의 소프트웨어 모듈
- 데이터 : 객체가 가지고 있는 정보로 속성이나 상태, 분류 등을 나타냄. 속성/상태/변수/상수/자료구조라고도 함
- 함수 : 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘. 메소드/서비스/동작/연산이라고도 함
객체의 메소드는 다른 객체로부터 메시지를 받았을 때 정해진 기능을 수행
특성
- 독립적으로 식별 가능한 이름을 가지고 있음
- 객체가 가질 수 있는 조건을 상태라고 하는데, 일반적으로 상태는 시간에 따라 변함
- 객체와 객체는 상호 연관성에 의한 관계가 형성된다.
- 객체가 반응할 수 있는 메시지의 집합을 행위라고 하며, 객체는 행위의 특징을 나타낼 수 있다.
- 객체는 일정한 기억장소를 가지고 있다.
25. 클래스(Class)
공통된 속성과 연산(행위)을 갖는 객체의 집합, 객체의 일반적인 타입을 의미
- 클래스는 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀
- 클래스는 객체지향 프로그램에서 데이터를 추상화하는 단위
- 클래스에 속한 각각의 객체를 인스턴스라 하며, 클래스로부터 새로운 객체를 생성하는 것을 인스턴스화라고 한다.
26. 캡슐화(Encapsulation)
데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것을 의미
- 캡슐화된 객체는 인터페이스를 제외한 세부내용이 은폐(정보 은닉)되어 외부에서의 접근이 제한적이기 때문에 외부 모듈의 변경으로 인한 파급효과가 적다.
- 재사용이 용이
- 인터페이스 단순, 객체 간의 결합도 낮아짐
27. 상속(Inheritance)
이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 상속을 이용하면 하위클래스는 상위클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 자신의 속성으로 사용할 수 있다.
- 하위클래스는 상위클래스로부터 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있다.
28. 다형성(Polymorphism)
메시지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력을 의미한다.
- 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다.
- 응용 프로그램 상에서 하나의 함수나 연산자가 두 개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에 속한 인스턴스처럼 수행할 수 있도록 하는 것이다.
29. 연관성(Relationship)
두 개 이상의 객체(클래스)들이 상호 참조하는 관계를 말함
- is member of : 연관화
- is instance of : 분류화
- is part of : 집단화
- is a : 일반화, 특수화/상세화