소프트웨어공학 기말 정리1

LeemHyungJun·2023년 6월 20일
0

Lecture #8 : 아키텍쳐 설계

1. Intro

  • 설계는 통합, 자료변환(버전 변환), 유지보수, 성능 등을 포함한다.
  • 분석 vs 설계
    • 분석 : 기능, 구조, object, ...
    • 설계 : 비기능, DB, 자료형, ...

2. 분석에서 설계로

  • 분석 단계에서 모은 요구를 반영하여 설계 도면 작성
    • 분석
      • 비즈니스 요구가 무엇인지 찾기
      • 요구 파악
    • 설계
      • 구현이 가능하도록 시스템의 도면 만들기

3. 아키텍쳐 설계

  • 패키지 : 클래스의 묶음
  • 서브 시스템의 구성과 인터페이스 정하기

4. 객체 지향 관점의 설계 작업

  • 분석 단계에서 찾아낸 도메인 클래스에 아키텍쳐 생성
  • 도메인 클래스 생성 (요구 분석) -> 아키텍쳐 생성 (프레임워크) -> 설계 클래스 생성 (DB, UI)

5. 설계의 개념과 원리

  • 분석 단계에서 파악한 요구를 구현 가능한 설계안으로 바꾸는 작업
    • 작업 : 컴포넌트의 발견, 설계안의 선택, 설계 도면의 작성
  • 개념적에서 구체적으로
  • 프로그램과 가까운 실제적인 것
  • 바람직한 설계
    • 복잡성 최소화 : 단순화, 복잡성을 최소화
    • 편리한 유지 관리 : 모듈화, 표준화, 컴포넌트화
  • 느슨한 결합
    • 모듈 간의 연결을 최소화
    • 정보 은닉 -> 테스트, 유지보수 할 때 작업을 줄일 수 있다.
  • 유연한 구조
    • 내부구조를 해치지 않고 확장하기
    • 변경될 것 같은 부분을 찾아 고립 시킴

6. 설계 수준

  • 설계 수준
    레벨 1. 소프트웨어 시스템
    레벨 2. 서브시스템이나 패키지 수준
    레벨 3. 패키지 내부의 클래스
    레벨 4. 클래스 내부의 데이터와 메소드 수준
    레벨 5. 메소드 내부 설계
  • 서브시스템, 패키지 수준의 설계
    • 서브시스템이나 패키지로 어떻게 분할할 것인지
    • 분할된 모듈 사이에 어떤 식으로 인터페이스 할 것인지
    • 커뮤니케이션 제약 유무
  • 클래스 수준의 설계
    • 패턴이 중요, 자주 출현 (좋은 클래스 특징)
    • 옵서버
      • 과부화 방지를 위해 자주 쓰는 것은 따로 빼내서 사용하기
      • 상태 변경 등에 따른 관련 인터페이스가 많을 때 사용

7. 설계 표현 방법

  • 시스템의 아키텍쳐는 패키지 수준으로 나타낸다.
  • 패키지 다이어그램 그리기 순서
    • 범위를 정함
    • 공통이 관계를 기반으로 클래스를 묶음
    • 묶은 클래스를 패키지로 모델링
    • 패키지 사이에 의존 관계를 찾고 표시

8. 아키텍처 설계 요소와 방법

  • 아키텍쳐 설계 요소
    • 컴포넌트 : 서브시스템(패키지)
    • 인터페이스 : 서비스(인터페이스)
    • 비기능적 요구 : 반응시간, 처리량
    • 기능적 요구 : 사용 사례
    • 고비용의 재작업 : 서브시스템 인터페이스의 변경
  • 아키텍쳐 설계 과정
    • 기능적 요구(사용 사례) -> 설계 목표(비기능적 요구) -> 구현할 시스템의 설계(서브시스템, 인터페이스)

9. 설계 목표

  • 성능 목표
    • 반응시간, 처리량, 메모리
  • 신용도
    • 강인성, 신뢰성, 가용성, 고장 내구력, 보안, 안정성
  • 사용자 목표
    • 유용성, 사용성
  • 비용 목표
    • 개발 비용, 설치 비용, 업그레이드 비용, 유지보수 비용, 관리비용
  • 유지보수 목표
    • 확장성, 수정용이성, 적응성, 이식성, 가독성, 요구 추적성

10. 서브시스템

  • 응용 도메인의 복잡도를 줄이기 위하여 작은 부품인 클래스를 패키지로 그루핑하여 구조화
  • 설계 단계에서 솔루션을 포함하여 시스템을 분할

11. 인터페이스와 컴포넌트 다이어그램

  • 서비스
    • 공동의 목적을 나누는 관련된 오퍼레이션의 집합
    • 서브시스템이 제공하는 서비스를 정의하는데 초점
  • 인터페이스
  • 컴포넌트 다이어그램
    • 인터페이스들로 구성된 다이어그램

12. 아키텍쳐 패턴

  • Intro
  • 중앙 저장소 패턴
    • 서브 시스템들이 단일 중앙 저장소의 자료를 접근하고 변경
    • 서브 시스템들은 독립적, 중앙 저장소를 통해 상호 대화
    • ex) 급여 시스템, 은행
  • MVC(Model/View/Contrller)
    • 웹기반 인터렉션 활용
    • 모델 : 도메인의 지식을 저장, 보관
    • 뷰 : 사용자에게 보여줌
    • 제어 : 사용자와의 상호 작용 관리
    • 분리하는 이유 : 뷰와 제어가 모델보다 더 자주 변경될 수 있기 때문에
  • 클라이언트 서버 패턴
    • 서버는 클라이언트에게 서비스 제공
    • 서비스의 요구 : 원격 호출 메커니즘
    • 클라이언트 : 사용자로부터 입력 받아 범위를 체크, DB 트랜잭션 구동
    • 서버 : 트랜잭션 수행, 데이터의 일관성 보장
  • 파이프-필터 패턴
    • 스트림 : 연속적인 데이터 흐름
    • 파이프 : 데이터 통로
    • 필터 : 데이터 처리(은닉)
    • 데이터 스트림 순서 기반 : 각 단계 필터 콤포넌트를 씌워 구축
    • 데이터의 변환, 버퍼링, 동기화에 사용
  • 피어 투 피어 패턴
    • 클라이언트 서버 유형의 일반화
  • 계층적 패턴
    • 인터페이스 층 : 사용자와 관련된 경계 객체 포함
    • 응용 로직 층 : 애플리케이션에서 요구되는 처리등을 구현하는 제어 및 엔티티 객체 처리
    • 저장 층 : 데이터베이스에 지속하여 저장하는 객체의 스토리지, 검색, 질의 구현
  • 브로커 패턴
    • 분산 시스템에서 활용
    • 프록시 형태로 구현
  • 블랙보드 패턴
    • AI 분야에서 활용
    • 해결 전략이 알려지지 않은 문제에 유용
    • 결정되지 않은 가능한 모든 콤포넌트 고려 -> 컨트롤러가 적절한 콤포넌트 선택

13. 설계 패턴 유형

  • Intro
    • 객체 설계 : 애플리케이션 클래스와 구현을 이어주는 클래스 필요
    • 위임과 상속 : 어떤 클래스가 다른 클래스에 메세지를 보냄으로써 오퍼레이션 구현
  • 설계 패턴의 기본 원리
    • 이름 : 다른 패턴과 구별
    • 문제 : 패턴이 사용되는 상황
    • 해결책 : 협력 클래스와 인터페이스의 집합
    • 결과 : 설정한 설계 목표에 따라 고려된 저울질과 대안을 기술
  • 어댑터 패턴?
    • ex) JAVA에서 C에서 만든 라이브러리 쓰기?
  • 브리지 패턴
    • 적용
      • 점증적으로 통합되는 서브시스템
      • 완성되기 전에 스텁을 사용
      • 서브 시스템을 여러 버전으로 만들어야 하는 경우
    • 해결책
  • 추상 팩토리 패턴
    • 적용
      • 여러 생산자가 만든 장치를 혼합
      • 모든 제조사를 위해 공통의 생성자를 사용
  • 전략 패턴
    • 적용
      • 모바일 애플리케이션 : 여러 종류의 너트워크 다루기
      • 동적으로 변환하기
      • 우선순위에 따라 적절한 것 골라서 보내주면 골라진 결과를 사용

Lecture #9 : 데이터 설계

1. 데이터 설계

  • 시스템이 사용하는 데이터의 영구 저장과 불러 읽음
    • 파일 : 레코드 구조의 설계
    • 데이터 베이스 : 정규화된 테이블의 설계

2. 애플리케이션과 데이터베이스의 관계

  • 객체 지향 프로그램과 데이터베이스의 연결
    • 클래스 : 테이블로 매핑
    • 객체 : 튜플로 매핑

3. 데이터베이스의 추상 계층

  • 관계형 DB
    • 논리적 모델
    • 파일 구조
    • 기본 파일 시스템

4. 저장 형식

  • 0과 1의 조합으로 저장
  • EBCDIC, ASCII, UNICODE, Binary

5. 파일 시스템

  • 파일 : OS가 데이터를 저장하는 기본 단위 (여러 레코드로 구성)
  • 레코드 : 구조체에 매핑, 여러 필드로 구성

6. 파일 접근 방법 (중요)

  • 순차 접근
    • 레코드 하나씩 순차적으로 접근한다.
  • 인덱스 순차 접근
    • 접근 속도를 높이기 위해서 파일에 있는 레코드를 인덱스에 따라 정렬 후 접근 시 인덱스 사용

7. 파일 종류 (중요)

  • 마스터 파일 : 근본적이고 영구 저장할 필요가 있는 데이터
  • 트랜젝션 파일 : 비즈니스 트랜젝션이나 사건을 기록하여 마스터 파일에 레코드를 수정할 때 사용함
  • 인덱스 파일 : 인덱스 구조를 저장
  • 임시 파일 : 처리 파일에서 파생되는 임시 결과
  • 백업 파일 : 마스터 파일이나 트랜잭션 파일의 복사본
  • 파라미터 파일 : 시스템 세팅 정보

8. 파일 시스템 사용의 문제점

  • 애플리케이션 수가 늘어나면서 파일의 증가 등의 문제로 중복성 발생
  • 데이터 갱신 시 동기화 문제
  • 데이터를 저장하기 위한 메커니즘 필요
  • 새로운 방법으로 자료를 접근할 때 상당한 노력 필요

9. 데이터베이스 관리 시스템

  • 데이터베이스와 사용자 사이의 인터페이스 제공!
    • 사용자 : 질의나 스위치 보드 명령으로 자료 접근
    • 데이터베이스 관리자 : 데이터베이스 관리와 지워
    • 데이터 조작 언어 : 저장, 탐색, 갱신, 삭제 등 제어
    • 스키마 : 필드와 테이블, 관례를 기술한 정의
    • 물리적 저장소 : 모든 데이터 요소를 저장

10. 관계형 데이터베이스의 설계

  • 엔티티 : 데이터로 모아 보관하는 단위
  • 테이블 : 관련된 레코드의 묶음
  • 필드 : 엔티티에 대한 특징
  • 레코드 : 관련된 필드의 집합
  • 기본키 : 엔티티의 특정한 멤버를 구별하기 위한 필드
  • 후보키 : 기본키의 후보들
  • 외부키 : 테이블 사이의 관계를 나타내는 필드
  • 보조키 : 접근, 탐색에 있어서 사용될 수 있는 필드의 조합

11. ER 다이어그램

  • 시스템 엔티티 사이의 논리적인 관계와 인터렉션을 보이는 모델
    • 사각형 : 엔티티
    • 다이아몬드 : 관계

12. 정규화

  • 시험 x?

13. 데이터 베이스 설계 단계(중요)

  • ERD를 작성
  • 데이터 요소를 엔티티에 배정
  • 모든 테이블을 3차 정규형으로 만듦
  • M:N 관계를 1:N으로 바꿈

14. 클래스와 테이블의 매핑

  • 단순 데이터 구조를 가진 클래스는 테이블로 매핑
  • 객체 식별자는 기본 키
  • 다른 클래스 인스턴스를 속성으로 가지고 있는 클래스는 그 클래스를 위하여 별도의 테이블 작성
  • M:N 관계는 별도의 테이블
  • 1:1 관계는 외부 키 속성으로 구현

15. 코드 설계

  • 코드 : 데이터를 간략하게 나타내기 위하여 사용하는 글자나 숫자의 집합
  • 코드 타입
    • 순차 코드
      • 특정한 순서대로 숫자나 문자 지정
      • ex) 사원번호
    • 블록 순차 코드
      • 분류를 위하여 블록화된 숫자 코드
      • ex) 학수번호
    • 문자 코드
      • 카테고리를 기반으로 개별 아이템을 구별하기 위해 문자 사용
      • ex) ICN(인천공항), HW(hardware)
    • 유효 숫자 코드
      • 십진수의 자리로 개별 아이템을 구별
    • 유도 코드
      • 코드화 하려는 아이템의 속성이나 특징으로부터 데이터 조합
    • 암호 코드
      • 숫자로 인코딩 하기 위해 키워드 사용
    • 액션 코드
      • 관련 아이템에 어떤 액션이 취해질지 나타내기

16. 코드 개발 팁 (중요)

  • 코드는 간결하게
  • 확장을 허용
  • 코드 안정하게 유지
  • 코드 유일성
  • 정렬이 가능한 코드
  • 혼돈이 될 코드 피하기
  • 의미 있는 코드
  • 단일 목적으로 코드
  • 코드의 일관성 유지

Lecture #10 : UI 설계

1. UI 패러다임의 변화

  • 처리 중심에서 사용자 중심의 시스템으로 진화

2. 사용자 인터페이스의 정의

  • 인터페이스의 종류
    • GUI
    • 웹 인터페이스
    • 명령어 인터페이스
    • 텍스트 사용자 인터페이스

3. UI 설계 원리 (중요)

  • 좋은 사용자 인터페이스를 설계하기 위한 가이드라인
  • Shneiderman & Plaisant의 UI 설계 원칙
    • 일관성
    • 적절한 사용자 지원
    • 적당한 피드백
    • 최소의 사용자 입력
    • 간편한 오류
  • 사용자 중심의 설계
    • 배경 지식의 이해
    • 그래픽 효과의 극대화
    • 사용자에 대한 이해
    • 프로토타입의 사용
    • 이해하기 쉬운 인터페이스
    • 지속적인 피드백

4. UI 설계 가이드라인 (중요)

  • 사용하기 쉽고 매력적이며 효율적인 인터페이스
    • 배우기 쉽고 쓰기 쉬운 인터페이스
    • 효율을 높이기
    • 사용자가 도움을 받거나 오류 수정이 쉽게
    • 입력 오류를 최소화
    • 사용자에게 피드백 제공
    • 끌리는 레이아웃과 설계
    • 익숙한 용어와 이미지

5. UI 설계 요소 (중요할 듯)

  • 버튼
    • 현재 화면의 작업과 관련된 단일 및 독립적인 작업
  • 툴바
    • 공통 작업일 경우
  • 메뉴
    • 여러 화면에 적용될 수 있는 작업
  • 체크 박스
    • 다른 항목과 관련 없이 한 항목을 선택/거부하는 스위치에 사용
  • 라디오 버튼
    • 하나의 선택만 가능한 경우
  • 텍스트 필드
    • 사용자가 임의의 내용을 입력하게 할 때
  • 리스트
    • 주어진 것을 모두 보여주고 그 중 선택하게 하고 싶을 때
    • 한번에 모든 선택지를 다 보여줌 -> 콤보 박스와의 차이점
  • 콤보 박스
    • 여러 옵션 중 선택 -> 화면의 제약으로 모든 옵션을 보여주지 못함
    • 스크롤 사용

6. UI 디자인

  • 다중 스크린
    • 탭이 있는 영역
      • 여러 스크린 영역을 수시로 이동하고 싶을 때
    • 다이얼로그 박스, 옵션 영역
      • 임시 화면이나 옵션 제시

7. 좋은 UI가 되려면

  • 가시성
    • 사용자가 SW와 상호작용하는 과정을 잘 이해하고 발견 할 수 있게
  • 피드백
    • 작업 지시를 내리기 전, 후 도중 상태를 알 수 있게
    • 예) B에 커서를 가져다 대면 bold 라고 설명이 뜨게함
  • 행동유발성
    • 어떻게 사용되는지에 영향을 미치는 외적인 특성
    • 클릭하고 싶은 버튼??

8. 입력 설계 (입력 설계의 목적)

  • 입력 방법
    • 적절한 입력과 자료 기입 방법의 선택
    • 일괄 입력 : 특정 시간에 주기적으로..
    • 온라인 입력 : 즉시 검증 가능
    • 비즈니스 요구에 따라 맞는 결정 : 호텔 예약?
  • 입력량 줄이기
    • 데이터 아이템 줄이기
    • 필요한 자료만 입력
    • 조회 가능하거나 다른 자료로부터 계산되는 자료 입력x
    • 상수 자료 입력하지 않음
  • 자료 입력 화면을 매혹적으로 설계
    • 접근 제한 (Role based)
    • 해설 제공
    • 보기 예시
    • ...
  • 입력 오류를 줄이기 위한 체크 (테스트 단계에서 체크해야 한다)
    • 순서 체크
    • 존재 체크
    • 데이터 타입 체크
    • 범위 체크
    • 유효성 체크
    • 조합 체크
    • 일괄 입력 제어
  • 필요한 문서의 설계 (출력 설계?)
    • 설계 전 질문
      • 출력의 목적
      • 누가 정보를 원하는가
      • 어떤 특정 정보 포함?
      • 출력 정보를 인쇄? 스크린?
      • 보안이나 비밀 관련 쟁점이 있는가
    • 출력의 종류
      • 웹 기반 출력
      • 이메일
      • 메신저
      • 무선 전화 메세지
  • 효과적인 입력 제어

기말고사 예상 문제

lecture 8)

1. 상황에 따른 아키텍처 및 설계 패턴 선정

  • 아키텍쳐 패턴 -> 어떤 구조로 끌고 가는지(비기능적)
    • 중앙 저장소 패턴
    • MVC 패턴
    • 클라이언트 서버 패턴
    • 파이프-필터 패턴
    • peer to peer 패턴
    • 계층적 패턴
    • 브로커 패턴
    • 블랙보드 패턴
  • 설계 패턴 유형 -> 자신이 만든 클래스가 효율적인지 아닌지 확인
    • 브리지 패턴
    • 추상 팩토리 패턴
    • 전략 패턴

2. 객체지향의 설계 작업

  • 분석 단계에서 찾아낸 도메인 클래스에 아키텍처를 생성하고 나머지 설계 클래스를 찾아내는 작업
  • 도메인 클래스 생성(요구 분석 / 보통) -> 아키텍쳐 생성(프레임워크 사용 / 추상적) -> 나머지 설계 클래스 생성(DB, UI 설계 / 구체적)

3. 설계의 목표

  • 성능 목표, 신용도, 사용자 목표, 비용 목표, 유지보수 목표

lecture 9)

1. 관계형 db의 용어

  • 엔티티, 테이블, 필드, 레코드, 기본키, 후보키, 외부키, 보조키

2. 파일 종류

  • 마스터 파일
  • 트랜잭션 파일
  • 인덱스 파일
  • 임시 파일
  • 백업 파일
  • 파라메터 파일

3. 파일 시스템의 문제점

  • 중복성
  • 동기화
  • 저장 메커니즘 필요
  • 새로운 방식으로 접근할 때 노력 필요

4. 코드 설계 기법

  • 코드란 : 데이터를 간략하게 나타내기 위해 사용되는 글자나 숫자의 집합
  • 코드 타입 : 순차 코드, 블록 순차 코드, 문자 코드, 유효 숫자 코드, 유도 코드, 암호 코드, 액션 코드
  • 코드 개발 팁 : 간결, 확장성, 안정성, 유일성, 정렬, 혼돈x, 의미있는, 단일 목적, 일관성

정규형 문제 안나옴?

lecture 10)

1. UI 설계 가이드라인

  • 사용하기 쉽고 매력적이며 효율적이기
  • 배우기 쉽고 쓰기 쉬움
  • 사용자가 도움을 받거나 오류 수정 쉽게
  • 입력 오류 최소화
  • 사용자에게 피드백 제공
  • 끌리는 레이아웃, 익숙한 용어 이미지

2. 좋은 UI 특징들

  • 가시성
  • 피드백
  • 행동 유발성

3. HCI 용어 약어

  • HCI : Human Computer Interaction

4. 사용자 인터페이스 정의

  • 사용자와 상호작용하는 컴퓨터 시스템의 설계, 구현, 평가를 연구하는 분야
  • 인터페이스의 종류 : GUI, 웹, CLI, 텍스트

5. UI 설계 요소들

  • 버튼, 툴바, 메뉴, 체크 박스, 라디오 버튼, 텍스트 필드, 리스트, 콤보 박스

6. 입력 설계의 목적

  • 적절한 입력과 자료 기입 방법의 선택
  • 입력량 줄이기
  • 자료 입력 화면을 매혹적으로 설계
  • 입력 오류를 줄이기 위한 체크
  • 필요한 문서의 설계
  • 효과적인 입력 제어 개발

0개의 댓글