본문 바로가기
Certificate/정보처리기사

[정보처리기사] 2020년 1회차 (1)소프트웨어 설계

by HJ0216 2023. 7. 18.

정보처리기사

소스코드 품질 분석 → Refactoring

  1. Peer Review: 요구 사항 명세서 작성자가 요구 사항 명세서를 설명하고 이해관계자들이 설명을 들으며 결함을 발견
  2. WalkThrough: 검토 자료를 회의 전에 배포하여 사전 검토 후 짧은 시간동안 검토 회의를 진행하며 결함을 발견
  3. Inspection
    • 계획 → 사전교육 → 준비 → 회의 → 수정(재작업) → 후속조치
    • 정적 테스트
  4. CASE 도구: 자동화된 요구 사항 관리도구를 이용하여 요구 사항 추적성과 일관성을 검토

 

UI 설계 원칙

  1. 직관성: 누구나 쉽게 이해하고 사용할 수 있어야 함
  2. 유효성
  3. 학습성
  4. 유연성: 사용자의 요구사항을 최대한 수용해야 함

 

코드 종류

  • 순차 코드(Sequence Code)
    • 일정 기준에 따라 차례로 일련번호를 부여
    • 순서 코드, 일련번호 코드
  • 블록 코드(Block Code)
    • 공통성이 있는 것끼리 블록으로 구분하고, 각 블록 내에서 일련번호를 부여
    • 구분 코드
    • 예: 10011100 : 총무부, 11011200 : 영업부
  • 10진 코드(Decimal Code)
    • 코드화 대상 항목을 0~9까지 10진 분할하고, 다시 그 각각에 대해 10진 분할 하는 방법을 필요한 만큼 반복
    • 도서 분류식 코드
    • 예: 1000: 공학, 1100: 소프트웨어 공학, 1110: 소프트웨어 설계
  • 그룹 분류 코드(Group Classification Code)
    • 코드화 대상 항목을 일정 기준에 따라 대, 중, 소 분류 등으로 구분하고, 각 그룹 안에서 일련번호를 부여
    • 예: 1-01-001 : 본사-총무부-인사계, 2-01-001 : 지사-총무부-인사계
  • 연상 코드(Mnemonic Code)
    • 명칭이나 약호와 관계있는 숫자나 문자, 기호를 이용하여 코드를 부여
      예: TV-40 : 40인치 TV, L-15-220 : 15W 220V의 램프
  • 표의 숫자 코드(Significant Digit Code)
    • 코드화 대상 항목의 성질, 즉 길이, 넓이, 부피, 지름, 높이 등의 물리적 수치를 그대로 코드에 적용
    • 유효 숫자 코드
    • 예: 120-720-1500 : 두께 x 폭 x 길이가 120 x 720 x 1500인 강판
  • 합성 코드(Combined Code)
    • 필요한 기능을 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법
    • 예: 연상 코드 + 순차 코드, KE-711 : 대한항공 711기

 

요구사항 분석 기법

구조적 분석

: 하향식 접근 방식(폭포수 모형)

  • DFD: 프로세스와 프로세스 간에 존재하는 상호작용 표현DFD
  • DD: 데이터 흐름도(Data Flow Diagram)에 기술된 자료들에 대해 정의
  • - = 정의 - + 연결 - () 생략 - {} 반복 - [|] 선택 - ** 주석
  • Mini spec.: 자료 흐름도를 보완 설명
  • ERD: 시스템에서 처리되는 개체와 속성 그리고 관계를 표현하여 개체를 모델화하는 도구
  • STD(State Transition Diagram): 시스템의 상태와 변화를 모델링

객체지향적 분석

: 상향식 접근 방식

  • Rumbaugh: 가장 일반적으로 사용되는 방법으로 분석 활동을 객체, 동적, 기능 모델로 나누어 순서대로 수행
    • 객체 모델링(Object Modeling): 클래스 다이어그램을 이용하여 시스템에서 요구되는 객체을 표현한 것
    • 동적 모델링(Dynamic Modeling): 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 사이의 동적인 행위를 표현한 것
    • 기능 모델링(Functional Modeling): 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 것
  • Booch: 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용
  • Jacobson: UseCase를 강조하여 사용
  • Coad와 Yourdon: E-R다이어그램을 사용
  • Wirfs-Brock: 분석과 설계간의 구분이 없음

 

미들웨어

: 클라이언트와 서버 간의 통신을 담당하는 소프트웨어

  • Remote Procedure Call: 원격 프로시저를 로컬 프로시저처럼 호출(원격 데스크톱 등)
  • Message Oriented Middleware: 비동기형 메시지를 전달, 즉각적인 응답보다는 쌓아두고 시간이 있을 때 처리하는 방식
  • Transaction Processing Monitor: 항공기나 철도 예약 업무 등과 같은 온라인 트랜잭션을 처리 및 감시, 빠른 응답속도를 유지해야 할 경우 주로 사용
  • Web Application Server: 동적인 콘텐츠를 처리하기 위한 미들웨어로, 웹 환경을 구현하기 위해 사용
  • Object Request Broker: 객체들 간의 클라이언트/서버 관계를 맺어주는 미들웨어
  • DataBase: 데이터베이스와 연결하기 위한 미들웨어(ODBC, JDBC 등)

 

UML(Unified Modeling Language) (시험 직전에 확인)

: 표준화된 모델링(개발하기 위한 그림을 그려주는) 언어

  • 종류
    구조적(정적) 다이어그램
    - 객체: 객체 정보
    - 클래스: 클래스의 속성, 함수, 변수 타입으로 구성
    - 패키지: 클래스 다이어그램의 집합
    - 컴포넌트: 컴포넌트끼리의 구조 관계를 표현
    - 컴포지트: 복합구조
    - 배치(Deployment): SW, HW 등을 포함한 시스템의 물리적 구조를 나타냄

    행위적(동적) 다이어그램
    - 유스케이스: 사용자 관점에서 바라본 시스템을 표현
        - 구성요소(Component): System, Actor, UseCase, Relation
            - System: 만들고자 하는 프로그램
            - Actor: 시스템의 외부에 있고 시스템과 상호작용을 하는 사람(시스템의 기능을 사용하는 사람), 시스템(시스템에 정보를 제공하는 또 다른 시스템)
            - UseCase: 사용자 입장에서 바라본 시스템의 기능
            - Relation: 액터와 유스케이스 사이의 의미있는 관계
                - 연관: 유스케이스와 액터간의 상호작용이 있음
                - 확장: "글을 등록한다" 기능을 수행 할 때 "파일을 첨부한다" 기능을 선택적으로 수행 할 수 있다는 것
                - 포함: "글을 등록한다" 기능을 동작하기 위해서 "로그인 한다" 기능이 반드시 동작되어야 한다는 것
                - 일반화: 그룹을 만들어 이해도를 높이기 위한 관계,  "글을 검색한다"를 "글쓴이로 검색한다"와 "날짜로 검색한다"로 좀더 구체화 한 것
    - 활동: 활동의 흐름
    - 상태: 객체의 상태 변화
    - 순차: 시간의 흐름에 따른 객체 사이의 상호 작용
    - 커뮤니케이션
    - 인터렉션 오버뷰: 활동 + 순차
    - 타이밍: 시간 흐름에 따른 상태 변화

 

UML 클래스 관계

uml_class_relation

  1. 일반화 관계(Generalization): 상속
  2. 실체화 관계(Realization): 구현
  3. 의존관계(Dependency): 참조, 매개변수, 일시성
  4. 연관관계(Association): 참조, 긴밀성, 양방향성
    • 직접 연관관계(Directional): 한쪽으로만 방향성이 있는 연관관계(명령/수행)
    • 집합 연관관계(Aggregation): 전체/부분 연관 관계, 전체가 삭제되더라도 부분은 삭제되지 않는 경우
    • 합성 연관관계(Composition): 전체/부분 연관 관계, 전체가 삭제되면 부분도 삭제되는 경우

 

GoF(Gang of Four) 디자인 패턴(시험 직전에 확인)

: 객체지향언어에서 자주 발생하는 문제에 대해 일반적인 소스코드 형식을 미리 만들어둔 해결 방법

생성 패턴(Creational Patterns) 5 : 객체 생성에 대한 패턴

종류 설명
Abstract Factory 특정 그룹에 속하는 여러 객체들을 하나의 팩토리로 묶어서 생성할 수 있는 패턴
Builder 복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴
Factory Method(Virtual Constructor) 객체를 생성하기 위한 인터페이스를 정의하여 어떤 클래스가 인스턴스화 될 것인지는 서브클래스가 결정하도록 함
Prototype 원본 객체를 복사하여 새 객체를 생성
SingleTon 오직 하나의 객체만을 생성

구조 패턴(Structural Patterns) 7 : 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴

종류 설명
Adapter 호환되지 않는 인터페이스를 가진 객체들간의 기능을 변환 제공하여 호환성을 확보
Bridge 추상화 클래스 계층과 구현 클래스 계층을 분리
Composite 복잡한 객체구조를 표현하여 객체 집합 속에 또 다른 객체 집합을 갖음
Decorator 새로운 기능이 추가될 때마다 새로운 객체를 만들고, 이전 객체의 기능은 새로운 객체내에서도 그대로 유지, 보장
Facade(퍼싸드) 서브시스템이 복잡할 경우 간단한 인터페이스를 통해 서브시스템의 주요기능을 사용할 수 있도록 함
Fly weight 인스턴스의 공유를 통해 불필요한 객체 생성을 하지않도록 함
Proxy 원래 객체에 대한 접근을 제어하므로, 요청이 원래 객체에 전달되기 전 또는 후에 무언가를 수행할 수 있도록 함

행위 패턴(Behavioral Patterns) 11 : 반복적으로 사용되는 객체들의 상호작용을 패턴화

 

애자일 방법론

- eXtreme Programming: 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법
    - 5가지 핵심 가치: 의사소통, 피드백, 존중, 용기, 단순성
    - 12가지 기본 원리
        - Pair programming
        - 공동 코드 소유 Collective Ownership: 시스템에 있는 코드는 누구든지 언제라도 수정 가능
        - 지속적인 통합 Continuous Integration(CI): 매일 여러 번씩 소프트웨어를 통합하고 빌드
        - 계획 세우기 Planning Process
        - Small Release: 작은 시스템을 먼저 만들고, 짧은 단위로 업데이트
        - Metaphor: 공통적인 이름 체계와 시스템 서술서를 통해 고객과 개발자 간의 의사소통을 원활하게 함
        - Simple Design: 현재의 요구사항에 적합한 가장 단순한 시스템을 설계
        - Test Driven Development(TDD): 테스트를 먼저 수행하고, 이 테스트를 통과할 수 있도록 코드를 작성
        - Refactoring: 프로그램의 기능을 바꾸지 않으면서 중복 제거, 단순화 등을 위해 시스템을 재구성
        - 40-Hour Work
        - 고객 상주 On Site Customer
        - Coding Standard
- Scrum
    - 짧은 단위시간(Sprint) 내 실행가능한 SW 개발
    - 매일 15분 정도의 Scrum meeting 회의
- FDD(Feature-Driven Development): 기능주도 개발
- Crystal
- LEAN: 낭비 요소를 제거하여 품질 향상

 

HIPO

: 하향식 소프트웨어 개발(절차 지향)을 위한 문서화 도구

  • HIPO 차트 종류
    • 가시적 도표: 시스템의 전체 기능과 흐름을 보여주는 Tree(계층) 구조Visual
    • 총체적 도표: 입력, 처리, 출력에 대한 전반적인 정보 제공Overview
    • 세부적 도표: 총체적 도표와 같은 모양이지만 내용만 좀 더 복잡하게 들어간 형태

 

집단화: 클래스들 사이의 부분-전체 관계 또는 부분의 관계로 설명되는 연관성

 

 

 

참고 자료

 

흥달쌤

흥달쌤과 함께하는 IT 채널입니다. 정보처리기사 자격증 관련된 강의 및 실무 노하우, 프로그래밍 언어(JAVA, C언어, Python) 특강 등이 진행됩니다. 앞으로 진행 예정인 동영상은 IT 관련된 이야기

www.youtube.com