데이터베이스 설계의 전체적인 구조는 이전글 참고

Data Model

현실 세계의 정보를 컴퓨터에 표현하기 위해 단순화하고 추상화한 개념적 모형

표시 요소

  • 구조: 전체 데이터 구조 및 성질
  • 연산: 데이터 처리
  • 제약조건: 논리적인 제약조건

종류

  • 개념적 데이터 모델
    • 인간이 이해할 수 있는 형태
  • 논리적 데이터 모델
    • 컴퓨터가 이해할 수 있는 형태
    • 품질 검증: 개체, 속성, 관계, 식별자, 전반적인 품질 검증 항목

구성 요소

  • Entity
    • 표현하려는 것, 현실세계의 대상, 개념, 정보단위
    • 식별자에 의해 식별 가능(유일함), 다른 개체와 1개 이상의 관계를 가짐
    • 선정 방법: 업무 기술서 참조, 담당자 인터뷰, 장부, 전표, 자료 흐름도(DFD)의 자료 저장소 이용 등
    • 개체명 지정 방법: 업무에서 사용하는 용어 사용, 약어X, 단순명사, 유일해야 함
  • Attribute
    • 개체를 구성하는 항목, 개체의 특성
    • 특성에 따른 분류: 기본 속성(업무 분석을 통해 정의), 설계 속성(모델링과 업무 규칙화를 위해 생성하거나 변형), 파생 속성(다른 속성의 영향을 받아 생성됨)
    • 개체 구성방식에 따른 분류: 기본키 속성(유일성 보장), 외래키 속성(다른 개체과 연결), 일반 속성
    • 선정 방법: 최대한 많이 선정
    • 속성명 지정 방법: 업무에서 사용하는 용어 사용, 약어나 서술어 X, 개체명 X
  • Relationship
    • 개체와 개체의 논리적 연결
    • 형태: 1:1, 1:N, N:M
    • 종류: 종속 관계(주-종), 중복 관계(2개의 개체 사이에 종속 관계가 2번 이상 발생), 재귀 관계(자기 자신과 관계), 배타 관계(속성, 구분자를 기준으로 개체의 특성을 분할)

기준에 따른 식별자(key) 구분

  • 대표성 여부: 주 식별자(개체를 대표한 유일한 식별자), 보조 식별자(주 식별자 외에 개체를 식별할 수 있는 식별자)
    • 주 식별자의 4가지 특성: 유일성, 최소성, 불변성, 존재성
  • 스스로 생성 여부: 내부 식별자(개체 내에서 생성), 외부 식별자(다른 개체와의 관계에서 생성)
  • 단일 속성 여부: 단일 식별자, 복합 식별자
  • 대체 여부: 원조 식별자(업무에 의해 생성됨, 가공 X), 대리 식별자(인조 식별자)
  • 후보 식별자: 유일하게 개체를 식별할 수 있는 식별자, 개체 별로 1개 이상 존재, 변경이나 Null X

Entity-Relationship Model

개체와 관계를 이용해 현실 세계를 개념적으로 나타낸 모형

E-R Diagram 표기법 종류

  • 피터 첸 표기법: 개체 - 직사각형 / 관계 - 마름모 / 속성 - 타원 / 다중값 속성 - 이중 타원 / 기본키 - 밑줄이 그어진 타원 / 다중 속성 - 하위 속성을 포함한 타원 / 연결 - 직선
  • 정보 공학 표기법: 직사각형 객체 내부에 기본키(직사각형)와 속성 포함 / 관계 - 직선(| 필수, O 선택, < 다중)
  • 바커 표기법: 직사각형 객체 내부에 기본키(#)와 속성 포함 / 관계 - 직선(실선 필수, 점선 선택, < 다중)

관계형 데이터베이스

Relational Data Model: 표(테이블)의 형태로 데이터의 관계를 정의한 구조
Relational Database: 관계형 데이터 모델을 기반으로 구축한 데이터베이스
간결하고 보기 편하지만, 성능이 비교적 낮다는 특징이 있음

Relation

  • 하나의 테이블
  • 구조
    • tuple: 하나의 데이터 (=레코드, 행 등)
    • attribute: DB를 구성하는 가장 작은 논리적 단위 (=속성, 항목, 필드, 열 등)
    • cardinality(기수): 튜플의 개수 / degree(차수): 속성의 개수
    • domain: 속성이 취할 수 있는 값의 범위
  • 특징
    • 튜플은 모두 상이함
    • 속성의 순서나 튜플의 순서는 의미를 가지지 않음
    • 속성값은 원자값이어야 함(더이상 쪼갤 수 없는 형태)

Key

  • 튜플을 식별할 수 있게 하는 속성
  • Candidate Key: 튜플을 유일하게 식별할 수 있는 모든 키, 속성 조합 X(유일성, 최소성 충족)
  • Primary Key: 후보키 중에서 선택된 1개
  • Alternate Key: 후보키 중에서 주 키를 제외한 나머지
  • Super Key: 튜플을 유일하게 식별할 수 있는 키, 여러 속성의 조합 포함(유일성만 충족)
  • Foreign Key: 다른 릴레이션의 기본키를 참조하는 키

Integrity

  • DB에 저장된 데이터와 현실 세계의 실제 값이 유지되는 것
  • Entity Integrity: 기본키는 중복되거나 Null일 수 없음 (=실체 무결성)
  • Domain Integrity: 속성 값은 정의된 도메인에 속해야 함 (=영역 무결성)
  • Referential Integrity: 외래키는 참조할 수 있어야 함, Null은 괜찮음
  • 사용자 정의 무결성: 사용자가 정의한 제약조건을 만족해야 함
  • 무결성을 강화하는 방법: 애플리케이션 내에서 검증, 데이터베이스 트리거, 제약조건 등 활용

관계대수 및 관계해석

DBMS에 명령하는 방법

Relational Algebra

  • 일반집합연산자
    • 합집합 ∪
    • 교집합 ∩
    • 차집합 -
    • Cartesian product ×
  • 순수관계연산자
    • select δ : 조건에 만족하는 튜플을 검색(δ점수>90(학생): 학생 릴레이션에서 점수가 90보다 큰 튜플)
    • project π : 주어진 속성들의 값으로만 구성된 열 선택(π과목, 점수(학생): 학생 릴레이션에서 과목과 점수만 검색)
    • join ⋈ : 공통 속성을 이용하여 2개 이상의 릴레이션을 연결해 새로운 릴레이션 생성(사원⋈(부서=부서)인사: 공통 속성이 부서)
    • division ÷ : B릴레이션의 모든 조건을 만족하는 튜플을 A릴레이션에서 구함(고객÷골드: 고객 릴레이션에서 등급이 'gold'인 행을 찾은 후 등급 속성을 제외하고 나열)

Relational Calculus

  • 어떻게 검색하는지가 아닌 무엇을 검색하는지에 중점을 둔, 비절차적 언어
  • 술어해석을 기반으로 함
  • 종류: 튜플관계해석, 도메인관계해석

Normalization

특정 규칙에 의해서 테이블을 작게 분리하는 과정

목적

  • 삽입이상 해결: 삽입하려는 데이터 외에 다른 데이터도 함께 삽입되는 것
  • 삭제이상 해결: 삭제하려는 데이터 외에 다른 데이터도 함께 삭제되는 것
  • 갱신이상 해결: 갱신하려는 데이터 외에 다른 데이터도 함께 갱신해야 하는

과정

  1. 1정규형: 모든 도메인이 원자값
  2. 2정규형: 부분 함수종속(둘 이상의 속성이 다른 속성을 결정할 때 하나의 속성 만으로 결정할 수 있는 경우) 제거 (=완전 함수종속)
  3. 3정규형: 이행 함수종속(A > B 이고 B > C 일 때, A > C) 제거
  4. BCNF: 결정자가 모두 후보키
  5. 4정규형: 다치종속 제거
  6. 5정규형: 조인종속 이용

Denormalization

  • 시스템의 성능 향상, 관리의 효율성 등을 위해 의도적으로 정규화된 테이블을 다시 통합하는 행위
  • 테이블 통합(조인)
    • 검색은 간편해지지만 처리량이 늘고 입력, 수정, 삭제가 복잡해짐
    • 1:1 / 1:N, 슈퍼타입 / 서브타입 등
  • 테이블 분할
    • 수평 분할(튜플 기준), 수직 분할(속성 기준)
  • 중복 테이블 추가
    • 여러 테이블에서 데이터를 추출하거나 다른 서버에 저장된 테이블을 이용해야 하는 경우, 정규화로 수행속도가 더 느려지거나 특정 범위의 데이터를 자주 처리해야 하는 경우 사용
    • 집계 테이블 추가, 진행 테이블 추가, 특정 부분만 포함하는 테이블 추가
  • 중복 속성 추가
    • 기본키가 여러 개의 속성으로 구성되어 있거나, 조인에 자주 사용되는 속성이나 접근 경로가 복잡한 속성에 대해 조회 경로를 단축하기 위해 사용
    • 데이터의 일관성과 무결성을 유지해야 하고 저장 공간을 너무 많이 차지하지 않아야 함

System Catalog

System Catalog

  • DBMS가 자동으로 생성하고 유지하는 DB 내 테이블 집합체, 모든 개체들에 대한 정의, 명세를 담은 테이블
  • 자료 사전에 저장됨(메타 데이터)
  • 사용자는 검색만 가능, 수정은 불가능
  • SYS TABLES, SYS COLUMNS, SYS INDEXES, SYS VIEWS, SYS TAB AUTH(권한), SYS COL AUTH, SYS USERS

※ 강의 링크: https://inf.run/MiKF

인터페이스

데이터 교환, 송수신을 위한 시스템

인터페이스 설계서

  • 시스템 인터페이스와 상세 기능 별 인터페이스로 구분됨
  • 정적 동적 모형을 통한 인터페이스 설계서: 다이어그램 이용, 인터페이스가 속한 시스템 및 상호 교환 트랜잭션의 종류 파악
  • 인터페이스 설계서 별 모듈 기능 확인
    • 외부 모듈: 송신 기능
    • 내부 모듈: 수신 기능, 외부 모듈의 호출에 의해 실행됨

모듈 연계 방식

  • Enterprise Application Integration
    • 기업 내 애플리케이션 연계 및 통합 방식
    • Point to point: 모든 애플리케이션을 서로 연계
    • Hub & Spoke: 중앙 집중형, 모든 애플리케이션(Spoke)은 중앙(Hub)에 연결
    • Message Bus: 애플리케이션 사이에 미들웨어(운영체제가 제공하는 서비스 외 추가적인 서비스를 제공하는 소프트웨어)를 사용해서 연결
    • Hybrid: Hub & Spoke와 Message Bus를 혼합, 여러 Hub & Spoke 사이에 Message Bus를 사용한 형태
  • Enterprise Service Bus
    • 애플리케이션 사이의 결합도를 낮게 설정
    • 관리 및 보안 유지가 쉬움

모듈 간 인터페이스 데이터 표준

모듈 간 인터페이스에 사용되는 데이터 형식의 표준, 공통 데이터 영역을 설정하거나 한 쪽의 데이터를 변환

  1. 데이터 인터페이스 확인: 입력 및 출력, 데이터 특성 등 데이터 표준
  2. 인터페이스 기능 확인: 기능 구현을 위한 데이터 항목
  3. 인터페이스 데이터 표준 확인: 데이터 표준과 데이터 항목을 검토하여 표준 확인

인터페이스 구현

인터페이스 기능 구현 순서

  1. 모듈 세부 설계서 확인
    • 모듈의 구성 요소 및 세부 동작 등을 정의
    • 컴포넌트 명세서: 컴포넌트 개요, 내부 클래스, 동작, 통신 등에 대한 명세
    • 인터페이스 명세서: 인터페이스 클래스, 세부 조건, 기능 등에 대한 명세
  2. 인터페이스 기능 구현 정의
    • 일관성 있는 인터페이스 기능 구현: 인터페이스 기능, 데이터 표준, 모듈 세부 설계서와 일치
    • 정의된 인터페이스 기능 구현: 특정 하드웨어나 소프트웨어에 의존하지 않고 정형화

인터페이스 구현

  • 정의된 기능 구현 방법 및 범위를 고려하여 분석 후 구현
  • 데이터 통신 이용
    • 송신: 인터페이스 형식에 맞춘 데이터 포맷을 대상으로 전송
    • 수신: 전송받은 내용을 해석
    • JSON, XML 등
  • 인터페이스 엔티티 이용
    • 인터페이스 테이블 등

인터페이스 구현 검증

  • 인터페이스가 정상 작동하는지 확인
  • 검증 도구: xUnit(다양한 언어 지원), STAF(서비스 호출, 컴포넌트 재사용 등 다양한 환경 지원), FitNess(웹기반), NTAF(STAF+FitNess), Selenium(다양한 웹 브라우저 지원), watir(Ruby)
  • 감시 도구: 인터페이스 동작 상태(Application Performance Management), 애플리케이션 성능 관리(스카우터, 제니퍼)

인터페이스 예외 처리

  • 데이터 통신 이용
    • 시스템 환경: 네트워크 불안정 > 오류메시지 확인 후 처리
    • 송신 데이터: 송신 데이터의 크기나 정합성 체크 오류 > 사전에 데이터를 철저히 정제
    • 프로그램 자체 원인: 논리적 결함 > 사전에 테스트를 거쳐 예방
  • 인터페이스 엔티티 이용
    • 인터페이스 데이터 생성: SQL이나 프로그램 오류 > 사용자에게 알림, 예외케이스 재발 방지 개선
    • 인터페이스 테이블에 입력: SQL 입력 시 오류 > 원인 및 결과 기록, 사용자에게 알려 개선
    • 인터페이스 데이터 전송: DB 연결 오류, 논리적 오류 > 통신 결과를 기록, 사용자에게 알려 개선

인터페이스 오류 확인 및 처리 보고서 작성

  • 즉시 확인: 화면에 오류 메시지 알림 표시, 오류 내역 SMS/이메일 자동 발송 등
  • 주기적으로 확인: 인터페이스 오류 로그/테이블 확인, 인터페이스 감시 도구 사용 등
  • 처리 보고서: 시간 경과에 따른 발생, 종료, 원인, 증상, 처리 사항 등에 대한 명세(정형화된 형식은 없음)

인터페이스 보안

취약점 분석

  1. 구간 별 보안 취약점 판단 및 분석
  2. 시나리오 형태로 작성

보안 기능 적용

  • 네트워크 영역: Sniffing(도청) > 암호화
  • 애플리케이션 영역: 코드 상의 보안 취약점 > 애플리케이션 보안 기능 적용
  • 데이터베이스 영역: 접근 권한 확인 및 암호화

연계 테스트

송수신 시스템이 이상 없이 데이터를 주고받는지 확인

과정

  1. 연계 테스트 케이스 작성: 연계 시스템 간의 흐름 분석
  2. 연계 테스트 환경 구축: 테스트 일정, 방법, 절차, 소요시간, 기관과의 협의 등
  3. 연계 테스트 수행: 처리 절차에 따라 시험 항목 수행
  4. 연계 테스트 수행 결과 검증: 수행 결과가 예상한 결과와 동일한지 확인(운영 DB의 테이블 건수, 테이블 내 데이터, 파일 크기, 서버에서 제공하는 모니터링 현황, 로그 파일 등)

※ 강의 링크: https://inf.run/B456

애플리케이션 테스트

  • 애플리케이션에 잠재된 결함을 찾아내고, 고객의 요구에 맞게 기능을 수행하는지 검증하는 작업
  • 프로그램 실행 전 오류를 예방할 수 있음
  • 반복적인 테스트를 수행하여 신뢰도를 높일 수 있음

기본 원리

  • 잠재적 결함을 줄일 수는 있지만, 애플리케이션이 완벽하거나 오류가 하나도 없다고 증명할 수는 없음
  • 파레토 법칙: 결함이 특정 모듈에 집중되어 있음, 20%의 코드에 전체의 80% 결함이 존재
  • 오류 부재의 법칙: 결함을 제거했더라도 사용자의 요구를 만족시키지 못한다면 품질이 좋다고 할 수 없음
  • 테스트는 작은 부분에서 넓은 부분으로 진행

프로세스

  1. 테스트 계획
    • 테스트 계획서 작성: 목적, 범위, 일정, 절차, 대상, 책임 등
    • 테스트 시작 조건: 계획, 일정, 환경, 요구사항 명세서, 참여 인력의 역할, 책임 등
    • 테스트 종료 조건: 테스트 완료, 일정 만료, 비용 소진 등
  2. 테스트 분석 및 디자인
    • 테스트 목적, 원칙 등을 검토하고 사용자 요구사항 분석
  3. 테스트 케이스 및 시나리오 작성
    • 테스트 케이스 작성 > 검토 및 확인 > 테스트 시나리오 작성
  4. 테스트 수행
    • 테스트 환경(실제 시스템과 유사한 하드웨어, 소프트웨어, 네트워크 시설) 구축 > 테스트 수행
  5. 테스트 결과 및 리포팅
    • 테스트 결과서 작성
  6. 결함 추적 및 관리
    • 에러 발견 > 에러 등록 > 에러 분석 > 결함 확정 > 결함 할당(담당자 지정) > 결함 조치 > 결함 조치 검토 및 승인

Test Case

  • 소프트웨어가 사용자 요구사항을 정확히 준수했는지 확인하기 위해 설계된 입력값, 실행 조건, 기대 결과 등에 대한 명세서
  • 테스트 오류 발생률을 낮추고 인력이나 시간의 낭비도 줄일 수 있음
  • 시스템 설계 단계에서 작성하는 것이 가장 이상적
  • 작성 순서
    1. 테스트 계획 검토 및 우선순위 결정
    2. 위험 평가 및 우선 순위 결정
    3. 테스트 요구사항 정의
    4. 테스트 구조 설계 및 테스트 방법 결정: 테스트 케이스의 형식, 분류 방법 등 결정
    5. 테스트 케이스 정의: 요구사항에 따라 테스트 케이스 작성
    6. 테스트 케이스 타당성 확인 및 유지보수

Test Scenario

  • 테스트 케이스를 수행하는 구체적인 절차에 대한 명세서
  • 시스템/모듈/항복 별 여러 개로 분리해서 작성, 업무흐름이 정상적인지 확인

Test Oracle

  • 테스트 결과가 올바른지 판단하기 위해, 사전에 정의된 값을 대입해서 비교하는 기법
  • 특징: 제한된 항목에만 검증 가능, 수학적 기법을 이용해 구할 수 있음, 자동화 기능
  • 종류
    • 참 오라클: 모든 테스트 케이스에 대한 기대 결과를 제공, 모든 오류 검출 가능
    • 샘플링 오라클: 일부 테스트 케이스에 대한 기대 결과를 제공
    • 추정 오라클: 일부 테스트 케이스에 대한 기대 결과를 제공하고, 나머지는 추정해서 처리
    • 일관성 검사 오라클: 테스트 수행 전, 수행 후 값이 동일한지 확인

애플리케이션 테스트 분류

프로그램 실행 여부에 따라

  • 정적 테스트
    • 프로그램을 실행하지 않고 소스코드를 테스트, 개발 초기에 오류를 발견할 수 있어 개발 비용을 낮출 수 있음
    • 워크스루, 인스펙션, 코드검사 등
  • 동적 테스트
    • 프로그램을 실행하여 테스트, 개발의 모든 단계에서 수행
    • 화이트박스 테스트
      • 내부 소스코드를 전부 실행하여 논리적 구조 및 복잡도 검사
      • 기초경로 검사, 제어구조 검사(조건 검사, 루프 검사, 데이터 흐름 검사) 등
    • 블랙박스 테스트(기능 검사): 프로그램을 실행하여 제대로 작동하는지 검사
      • 동치분할 검사, 경계값 분석, 원인-효과 그래프 검사, 오류 예측 검사, 비교 검사 등

테스트 기반(Test Bases)에 따라

  • 명세 기반 테스트
    • 명세(사용자의 요구사항)를 모두 테스트 케이스로 만들어 테스트
    • 동등분할, 경계값 분석 등
  • 구조 기반 테스트
    • 소프트웨어 내부 논리적 흐름을 따라서 테스트
  • 경험 기반 테스트
    • 테스터의 경험을 바탕으로 진행
    • 사용자 요구사항이 불분명하거나 기간이 짧을 경우 효과적

시각에 따라

  • 검증 테스트: 개발자의 시각에서 전반적인 생산 과정이 명세서에 맞는지 테스트
  • 확인 테스트: 사용자의 시각에서 제품이 요구사항을 충족하고 정상적으로 동작하는지 테스트

목적에 따라

  • 회복 테스트: 일부러 결함을 만들어 오류를 발생시키고, 얼마나 빨리 복구하는지 확인
  • 안전 테스트: 프로그램의 보호 도구가 불법 침입으로부터 프로그램을 보호할 수 있는지 확인
  • 강도 테스트: 과부하가 발생했을 때에도 정상 작동할 수 있는지 확인
  • 성능 테스트: 응답시간, 처리량 등
  • 구조 테스트: 소프트웨어 내부의 논리적 경로, 소스코드의 복잡도 등을 평가
  • 회귀 테스트: 소프트웨어의 변경된 코드에 새로운 결함이 없는지 확인
  • 병행 테스트: 변경된 소프트웨어와 기존의 소프트웨어에 동일한 작업을 수행해서 동일한 결과를 얻을 수 있는지 확인

개발 단계에 따라

  • V모델: 소프트웨어 개발 단계는 요구사항 > 분석 > 설계 > 구현 순서로, 테스트 단계는 단위 테스트 > 통합 테스트 > 시스템 테스트 > 인수 테스트 순서로 진행
  • 단위 테스트
    • 모듈에 초점을 맞추어 진행
    • 구조 기반 테스트(화이트박스 테스트), 명세 기반 테스트(블랙박스 테스트)
  • 통합 테스트
    • 모듈을 결합(통합)하여 테스트 진행
    • 비점진적 통합 방식: 모듈을 전부 통합 --- 빅뱅 등
    • 점진적 통합 방식: 모듈을 일부 통합 --- 하향식 통합 테스트(시험용 더미 모듈 stub 사용), 상향식 통합 테스트(다른 모듈과의 인터페이스 역할을 수행하는 driver 사용), 혼합식 통합 테스트
  • 시스템 테스트
    • 프로그램이 실제 사용될 환경에서 잘 작동하는지 테스트
    • 기능적 요구사항, 비기능적 요구사항
  • 인수 테스트
    • 사용자 요구사항을 충족했는지에 중점을 두고, 사용자가 직접 테스트 진행
    • 사용자 인수 테스트, 운영상의 인수 테스트, 계약 인수 테스트, 규정 인수 테스트, 알파 테스트(개발자 앞에서 사용자들이 테스트), 베타 테스트(개발자 없이 사용자들이 테스트)

테스트 자동화 도구

정의

  • 테스트 자동화: 반복적으로 수행해야 하는 테스트를 도구를 이용해 자동으로 수행하는 것, 쉽고 효율적이며 휴먼 에러를 줄일 수 있고 정확성과 품질을 높일 수 있음
  • 장점: 테스트 데이터의 입력, 구성 등 반복 작업을 자동화하여 시간을 단축시킬 수 있음, 객관적인 평가 가능, 그래프 등 다양한 형태로 제공 가능
  • 단점: 도구 사용법을 학습해야 함, 오픈 소스가 아니라면 비용 발생
  • 고려사항
    • 모든 테스트 과정을 자동화하는 도구는 없기 때문에 용도에 맞게 적절히 선택해야 함
    • 도구를 사용하기 위한 환경설정 및 학습 기간 등을 고려하여 일정을 계획해야 함
    • 테스트 엔지니어의 프로젝트 투입 시기 결정 필요

유형

  • 정적 분석 도구: 프로그램을 실행하지 않고 소스코드의 코딩 표준, 스타일, 복잡도 등을 확인
  • 테스트 실행 도구: 프로그램을 실행해서 확인
  • 성능 테스트 도구: 가상의 사용자를 만들어 응답시간, 자원사용률 등 성능 목표를 달성하는지 확인
  • 테스트 통제 도구: 테스트 계획, 관리, 수행 등에 대한 검사
  • 테스트 하네스 도구: 모듈을 테스트하는 환경의 일부분인 코드나 데이터를 검사

테스트 수행 단계별 사용되는 도구

  • 테스트 계획 --- 요구사항 관리
  • 테스트 분석 및 설계 --- 테스트 케이스 생성
  • 테스트 수행 --- 테스트 자동화, 정적 분석, 동적 분석, 성능 테스트, 모니터링
  • 테스트 관리 --- 커버리지 분석, 형상 관리, 결함 추적 및 관리

결함 관리

결함 관리

  • 결함(Fault): 오류 발생, 작동 실패 등 설계와는 다르게 동작하는 것
  • 결함 관리 프로세스: 결함 관리 계획 > 결함 기록 > 결함 검토 > 결함 수정 > 결함 재확인 > 결함 상태 추적 및 모니터링 활동 > 최종 결함 분석 및 보고서 작성
  • 결함 분류: 시스템 결함, 기능 결함, GUI 결함, 문서 결함
  • 결함 심각도: High(프로세스 진행 불가능), Medium(시스템 흐름에 영향을 줌), Low(시스템 흐름에는 영향을 주지 않음)
  • 결함의 중요도와 심각도에 따라 우선순위를 결정함

결함 상태 추적

  • 지표
    • 결함 분포: 결함 수
    • 결함 추세: 테스트 진행 시간에 따라 달라지는 결함 수
    • 결함 에이징: 특정 결함 상태로 지속되는 시간
  • 순서
    • 결함 등록 > 결함 검토 > 결함 할당 > 결함 수정 > 결함 조치 보류(수정이 불가능하거나 연기해야 할 경우) > 결함 종료 > 결함 해제

결함 관리 도구

  • Mantis: 단위별 작업 기록, 결함 추적
  • Trac: 결함 추적, 통합 관리
  • Redmine: 프로젝트 관리 및 결함 추적
  • Bugzilla: 결함 신고, 확인, 처리 등을 관리, 우선순위 지정 가능

애플리케이션 성능

최소한의 자원과 시간을 이용하여 사용자가 요구한 기능을 최대한 많이 수행할 수 있는 정도

애플리케이션 성능 분석

  • 측정 지표
    • 처리량: 일정 시간 내 처리하는 일의 양
    • 응답 시간: 요청 전달 시점부터 응답 도착 시점까지의 시간
    • 경과 시간: 작업 의뢰 시점부터 처리 완료 시점까지의 시간
    • 자원 사용률: CPU, 메모리, 네트워크 등 자원의 사용량
  • 성능 저하가 발생하는 경우
    • DB에 필요 이상으로 많은 데이터를 요구하는 경우
    • 커넥션 풀(DB와의 Connection을 미리 만들어서 Pool에 넣어두고 사용하는 방식)의 크기를 너무 크게 설정하거나 너무 작게 설정하는 경우
    • 인터넷 접속 불량이 발생한 경우
    • 대량의 파일을 업로드하거나 다운로드하는 경우
    • 전송 실패 또는 지연이 발생한 경우

성능 테스트 도구

  • Jmeter: 다양한 프로토콜 지원
  • LoadUI: 사용자 편리성이 강화된 도구
  • OpenSTA: 부하테스트, 생산품 모니터링 등

시스템 모니터링 도구

  • 애플리케이션 실행 시 시스템 자원을 어느정도 사용하는지 분석하는 도구
  • Scouter, Zabbix(웹 기반)

애플리케이션 성능 개선

  • 소스코드 최적화
    • 클린 코드 작성: 누구나 이해하기 쉽고 수정/추가가 단순명료한 코드(가독성, 단순성, 의존성 배제, 중복성 최소화, 추상화)
    • 클래스 분할 배치: 하나의 클래스는 하나의 역할만 수행하도록
    • 느슨한 결합: 클래스 간 의존성 최소화
    • 코딩 형식 준수: 적절한 줄바꿈과 주석, 기억하기 좋고 발음하기 쉬운 변수 이름, 호출하는 함수는 선배치, 호출되는 함수는 후배치 등
  • 소스코드 품질 분석
    • 정적 분석
      • 소스코드를 실행하지 않고 코딩 표준, 스타일 등을 확인해서 코드의 복잡도, 모델 의존성, 불일치성 등을 분석
      • Pmd(미사용 변수, 최적화되지 않은 코드 파악), cppcheck(메모리, 오버플로우 분석), sonarQube(코드 복잡도 및 설계 분석), checkstyle(코드 표준 준수 여부 파악), ccm(코드 복잡도 파악), cobertura(Java 코드 복잡도 파악) 등
    • 동적 분석
      • 소스코드를 실행해서 검사
      • avalanche(프로그램에 결함이 있는지 확인), valgrind(메모리, 스레드 분석) 등

※ 강의 링크: https://inf.run/B456

소프트웨어 패키징

모듈 별로 생성한 실행 파일들을 하나로 묶어 배포용 설치 파일을 만드는 작업

고려사항

  • 운영체제, CPU, 메모리 등 최소 환경 정의
  • 매뉴얼 배포 등 고객 편의 제공, 사용자 중심
  • 패키징의 변경 사항 관리

작업 순서

  1. 기능 식별
  2. 모듈화: 기능 단위로 코드 구분
  3. 빌드 진행: 소스 코드를 실행 파일로
  4. 사용자 환경 분석
  5. 패키지 적용 및 테스트
  6. 패키징 개선
  7. 배포: 온라인, 오프라인(CD, USB 등)

Release Note

  • 사용자에게 제공하는 소프트웨어의 정보, 업데이트 내용, 테스트, 사양 등의 내용을 담은 문서
  • 구성 요소: 머리말, 개요, 목적, 문제 요약, 재현 항목, 수정/개선 내용, 사용자 영향도, SW 지원 영향도, 노트, 면책 조항, 연락처 등
  • 작성 순서: 모듈 식별 > 릴리즈 정보 확인 > 개요 작성 > 영향도 체크 > 정식 릴리즈 노트 작성 > 추가 개선 항목 식별

소프트웨어 설치 매뉴얼

  • 사용자 기준으로 설치 시작부터 완료까지 모든 과정에 대한 설명서
  • 구성
    • 서문: 문서 이력, 설치 매뉴얼의 주석, 설치 도구의 구성, 설치 환경(운영체제, CPU, 메모리 등) 체크 항목
    • 기본 사항: 소프트웨어 개요, 설치 관련 파일, 설치 아이콘, 프로그램 삭제, 관련 추가 정보
  • 작성 방법
    • 사용자가 설치 과정을 이해하기 쉽도록 작성
    • 설치 화면, 설치 중 발생할 수 있는 에러나 오류 메시지 설명, 설치 완료 및 결과, FAQ
    • 설치 시 점검 사항, 네트워크 환경 및 보안, 고객 지원 방법, 준수 정보 & 제한 보증
  • 작성 순서
    • 기능 식별 > UI 분류 > 설치 파일 확인 > Uninstall 절차 확인 > 이상 case 확인 > 최종 매뉴얼 적용

소프트웨어 사용자 매뉴얼

  • 사용자 기준으로 소프트웨어 사용에 대한 설명서, 컴포넌트(독립적인 기능 수행) 단위로 작성
  • 구성
    • 서문: 문서 이력, 사용자 매뉴얼의 주석, 기록 보관 내용
    • 기본 사항: 소프트웨어 개요, 소프트웨어 사용 환경, 소프트웨어 관리, 모델 버전 별 특징, 기능 인터페이스 특징, 소프트웨어 구동 환경
  • 작성 방법
    • 사용자가 소프트웨어를 사용하면서 알아야 할 내용들을 작성
    • 사용자 화면, 주요 기능 분류, 응용 프로그램 및 설정, 장치 연동, 네트워크 환경, 프로필 안내(구동 환경 점검), 고객 지원 방법, 준수정보 제한 보증
  • 작성 순서
    • 기능 식별 > 사용자 화면 분류 > 사용자 환경 파일(폴더 위치, log, backup 등) 확인 > 초기화 절차 확인 > 이상 case 확인 > 최종 매뉴얼 적용

형상 관리

  • 형상: 소프트웨어 개발 과정 전체에서 나오는 변경사항
  • 변경사항을 체계적으로 추적하고, 무절제한 변경을 통제하기 위해 형상 관리가 필요
  • 기능: 형상 식별(형상 관리 대장 작성), 버전 제어, 형상 통제(변경 요구 검토), 형상 감사(검증), 형상 기록
  • 주요 용어
    • 저장소: 최신 버전 파일, 변경 내역 저장
    • import: 저장소에 처음으로 파일 복사
    • checkout: 저장소로부터 파일 받기
    • checkin: 저장소에 변경한 파일 저장, 새로운 버전 갱신
    • commit: 이전 버전과의 충돌 확인 및 수정
    • update: 저장소의 최신 버전으로 동기화
  • 버전 등록 과정: import > checkout > checkin > update > diff

형상 관리 도구(버전 관리 도구)

  • 제품 소프트웨어의 신규 개발, 변경, 개선과 관련된 수정 내역을 관리하는 도구
  • 분류
    • 공유 폴더 방식
    • 클라이언트/서버 방식: 작업 내역을 서버에 축적
    • 분산 저장소 방식: 원격 저장소로부터 개발자 개인의 로컬 저장소로 복제해서 개발 후 원격 저장소에 작업 내역 전송
    • CVS(다수의 인원이 동시에 서버에 접근 가능), SVN(CVS의 단점을 개선, 개별 프로젝트에 주로 사용), RCS(소스 코드를 한 사람만 수정하도록 제한), Bitkeeper(빠른 속도, 대규모 프로젝트에 주로 사용), Git(분산 저장소 방식, 대규모/오픈소스 프로젝트에 주로 사용), Clear Case(복수 서버, 복수 클라이언트)
  • 유의점
    • 형상 관리 지침에 의거하여, 버전에 대한 정보를 언제든지 접근할 수 있어야 함
    • 개발자나 배포자 이외의 불필요한 사용자가 접근할 수 없도록 해야 함
    • 동일한 프로젝트 파일에 대해서 여러 개발자가 동시에 개발할 수 있어야 함
    • 에러 발생 시 최대한 빠른 시간 내에 복구 필요
  • 활용 방안
    • 공동 개발 및 작업 관리
    • 버전 백업 및 복구
    • 여러 버전 솔루션 작업

Digital Right Management

개요

  • 저작권: 타인의 침해를 받지 않을 독점적 권리
  • 디지털 저작권 관리: 저작권자가 배포한 디지털 컨텐츠를 저작권자가 의도한 용도로만 사용하도록 생산, 유통 등 전 과정에 걸쳐서 관리하는 것

흐름도

컨텐츠 제공자가 클리어링 하우스에 컨텐츠 등록, 컨텐츠 분배자에게 컨텐츠 전달 > 컨텐츠 분배자가 클리어링 하우스에 라이센스 요청 > 컨텐츠 소비자가 클리어링 하우스에 요금 지불 후 컨텐츠 분배자에게 라이센스 요청 > 컨텐츠 분배자가 컨텐츠 소비자에게 다운로드 권한 부여

  • 클리어링 하우스: 저작권 사용 권한, 결재 관리 등 수행
  • 패키저: 컨텐츠와 디지털 저작권 보호 프로그램을 함께 묶는 작업을 수행
  • DRM 컨트롤러: 사용 권한 통제
  • 보안 컨테이너: 컨텐츠 원본의 보호를 위한 장치

기술 요소

  • 암호화, 암호화 키 관리, 암호화 파일 생성, 컨텐츠 식별 기술, 저작권 표현, 라이센스 정책 관리, 크랙 방지, 인증

국제 표준 제품 품질

분류

  • 제품 품질 표준: ISO/IEC 9123(측정 기준 제시), ISO/IEC 14598(제품 평가 프로세스 및 평가 모듈), ISO/IEC 12119(패키지 소프트웨어 품질), ISO/IEC 25000(품질 모형, 메트릭, 요구사항, 평가)
  • 프로세스 품질 표준: ISO/IEC 9000(품질 경영, 보증), ISO/IEC 12207(소프트웨어 라이프 사이클 프로세스), ISO/IEC 155054(표준 모델), ISO/IEC 15288(시스템 생명주기), CMMI(프로세스 표준 모델)
  • ISO/IEC 12119 평가 절차: 제품 설명서 시험 > 사용자 문서 지침 > 실행 프로그램 시험 > 시험 기록 > 시험 보고서 작성
  • ISO/IEC 14598 특징: Repeatability(동일 평가자 동일 결과), Reproducibility(다른 평가자 유사한 결과), Impartiality(공정한 평가), Objectivity(객관적인 자료로 평가)

※ 강의 링크: https://inf.run/B456

Unit Module

한 가지 기능(단위 기능)을 수행하는 모듈로, 처리문, 명령문, 데이터 구조로 구성됨

단위 모듈 구현

  1. 단위 기능 명세서 작성
    • 설계 과정에서 작성하는 기능, 코드 명세서, 설계 지침 등 단위 기능을 명세화한 문서
    • 추상화(단순화) 작업 필요
  2. 입출력 기능 구현
    • 단위 기능 명세서에서 작성한 데이터 형식에 맞춰 입출력 기능 구현
    • 단위 모듈 및 사용자 인터페이스 간 연동, 통신을 위한 입출력 데이터 구현
    • Open Source API를 이용하면 쉽게 구현 가능
  3. 알고리즘 구현
    • 디바이스 드라이버 모듈: 하드웨어 주변장치의 동작을 구현한 모듈
    • 네트워크 모듈: 네트워크 장비, 통신을 위한 기능을 구현한 모듈
    • 파일 모듈: 데이터 구조 영역에 접근하는 방법을 구현한 모듈
    • 메모리 모듈: 가상 메모리에 매핑/해제하는 방법을 구현한 모듈
    • 프로세스 모듈: 하나의 프로세스 안에서 또 다른 프로세스를 생성하는 방법을 구현한 모듈

단위 모듈 테스트

  • 종류
    • 화이트 박스 테스트: 모듈 내부의 논리적인 구조나 복잡도 등 원시코드를 모두 실행하며 테스트
    • 블랙 박스 테스트: 모듈의 실행 결과를 바탕으로 테스트
  • 프로세스: 계획 및 제어, 분석 및 설계, 구현 및 실현, 평가, 완료
  • Test Case
    • 구현된 모듈이 사용자의 요구사항을 준수했는지 확인하기 위한 입력 데이터, 조건, 예상결과 등
    • 구성 요소: 식별자, 테스트 항목, 입력 명세, 출력 명세, 환경 설정, 특수 절차 요구, 의존성 기술

개발 지원 도구

Integrated Development Environment

  • 개발에 필요한 소스코드 편집기, 컴파일러, 디버거 등 도구를 통합해서 제공하는 도구
  • Eclipse, Visual Studio 등

빌드 자동화 도구

  • 전처리, 컴파일 등 과정을 통해 저장소에 있는 소스를 자동으로 읽고 빌드를 진행해서 실행파일을 만드는 도구
  • Ant, Maven(Ant의 대안)
  • Jenkins
    • 가장 많이 활용되는 온라인 빌드 자동화 도구
    • Continuous Integration/Continuous Deployment 가능, 다양한 버전 관리 도구 지원
    • 임의의 쉘 스크립트와 윈도우 배치 명령도 실행 가능
    • GUI 방식, 설치가 쉬움, 저장소 부하 감소, 실시간 피드백 가능, 분산 필드 테스트 가능, third party 플러그인 지원, 통합 가능
  • Gradle
    • 안드로이드 스튜디오의 공식 빌드 자동화 도구
    • 여러가지 언어의 빌드 환경 구성 가능
    • groovy 기반의 Domain Specific Language 빌드 스크립트 사용
    • 모든 그래들 빌드는 하나 이상의 projects(tasks)로 구성됨

기타 협업 도구(협업 소프트웨어, 그룹웨어)

  • 프로젝트 및 일정관리
  • 정보 공유 및 커뮤니케이션
  • 디자인
  • 아이디어 공유
  • API 문서화(Swagger), Git(GitHub)

※ 강의 링크: https://inf.run/B456

자료구조

자료의 구조화된 표현 및 연산, 기억장치에 데이터를 저장하고 처리하는 방법

선형구조

  • List
    • Array: Linear List, 연속된 공간에 데이터를 저장, 기억공간의 밀도가 높지만 삽입/삭제가 발생할 경우 자료의 이동이 많아짐
    • 연결 리스트: 다음 데이터의 주소(포인터)를 포함, 삽입/삭제가 용이하고 희소 행렬을 표시하기 좋지만 조회 속도가 느리고 포인터 공간이 필요함
    • 원형 연결 리스트, 이중 연결 리스트, 원형 이중 연결 리스트 등
  • Stack
    • Last In First Out, First In Last Out, 삽입(push)/삭제(pop)가 한 쪽 끝(top)에서만 발생
    • 산술식 표현, 함수, 인터럽트 복귀 주소 등에서 사용
  • Queue
    • Last In Last Out, First In First Out, 삽입은 rear, 삭제는 front에서 발생
    • 작업 스케쥴링, 버퍼 관리 등에서 사용
  • Deque
    • 삽입과 삭제를 양 쪽 끝에서 할 수 있음
    • 삽입 제한(scroll), 삭제 제한(self) 가능

비선형구조

Tree

  • cycle이 존재하지 않음
  • root node: 최상위 노드
    leaf node: 자식이 없는 노드, 차수 0
    degree(차수): 가지 수
    level(레벨): 최상위 노드로부터의 깊이
    depth(깊이): 트리의 최대 레벨
  • binary tree(이진 트리): 모든 노드의 차수가 2 이하인 트리
    • 깊이가 k일 때, 총 노드의 개수는 최대 2^k - 1개, 레벨 l 에서 노드의 개수는 2^(l - 1)개
    • 정이진트리: 모든 노드의 차수가 2인 트리
    • 전이진트리: 각 레벨에서 왼쪽부터 노드가 채워져있는 트리
    • 사향이진트리: 한 방향으로만 진행되는 이진 트리
  • 이진 트리 순회 방법
    • 중간 노드를 언제 탐색하는가?
    • 전위 순회: 중간 노드 > 왼쪽 서브트리 > 오른쪽 서브트리
    • 중위 순회: 왼쪽 서브트리 > 중간 노드 > 오른쪽 서브트리
    • 후위 순회: 왼쪽 서브트리 > 오른쪽 서브트리 > 중간 노드

그래프

  • cycle이 존재함
  • 객체 간의 관계를 표현할 수 있는 자료구조
  • 정점과 간선으로 나타냄
  • 종류
    • 무방향 그래프: 선에 방향이 없음
    • 방향 그래프: 선에 방향이 있음
    • 완전 그래프: 모든 정점들이 서로 연결되어 있음
    • 노드가 n개일 때, 무방향 완전 그래프의 간선은 n * (n-1) / 2개, 방향 완전 그래프의 간선은 n * (n-1)개
  • 네트워크 모델을 나타낼 수 있음
  • 한 정점에서 다른 정점으로 가는 경로가 2개 이상 존재할 수 있음
  • 자기 자신을 향하는 간선이나 중복된 간선은 허용하지 않음
  • 2차원 배열로 나타낼 수 있음

최소 비용 신장 트리

  • 신장 트리: cycle이 존재하지 않으면서 모든 정점들이 최소한의 간선으로 연결된 트리, 노드가 n개일 때 간선의 수는 n-1개

파일

자료를 특정 형식에 맞춰 저장한 것

파일구조

  • 순차 파일
    • 입력되는 순서대로 저장, 저장 매체를 효율적으로 사용하지만 삽입/삭제/검색하기 불편함
    • 일괄 처리에 주로 사용
  • 직접 파일
    • 임의의 저장 공간에 저장, 접근 시간이 빠르고 삽입/삭제가 용이
  • 색인 순차 파일
    • 기본 영역(데이터 저장), 색인 영역(트랙, 실린더, 마스터 등, 레코드 위치 저장), 오버플로우 영역(빈 공간이 없을 경우 대비)으로 나뉨
    • 순차/랜덤 처리 가능, 효율적으로 검색할 수 있으나 오버플로우 영역이 낭비일 수 있고 접근 시간이 느림

DataBase

정의

  • 데이터의 통합(중복 최소화), 저장(컴퓨터에 저장), 운영(정확하고 필요한 데이터), 공유가 가능한 데이터 저장소
  • 파일 시스템의 단점을 극복함
  • 특징: 실시간 접근성, 내용에 의한 참조, 동시 공유, 계속적인 변화(삽입, 삭제, 갱신)
  • 장점: 데이터의 독립성(데이터 구조가 바뀌어도 프로그램에 영향이 없는 것), 일관성, 무결성, 보안, 표준화 가능
    단점: 초기 구축비용이 크고, 대용량 디스크의 집중적인 처리로 서버에 부담 발생

Schema

  • 데이터베이스의 구조, 제약조건 등을 기술한 것
  • 외부 스키마: 사용자 관점에서 기술한 것, 사용자에 따라 다르므로 여러 개가 나올 수 있음
  • 개념 스키마: 관리자 관점에서 기술한 것
  • 내부 스키마: 물리적 저장 구조

설계

  1. 요구조건 분석: 사용자 파악, 조건 수집, 명세 기술
  2. 개념적 설계: E-R 다이어그램 등 그림으로 표현
  3. 논리적 설계: 데이터 모델링, 스키마 설계
  4. 물리적 설계: 물리적 구조 설계, 데이터 변환
  5. 구현

DataBase Management System

  • 효율적인 데이터베이스 사용환경을 제공하는 소프트웨어
  • 정의 기능: 테이블 생성/변경/삭제
  • 조작 기능: 테이블 내 데이터 검색/삽입/갱신/삭제
  • 제어 기능: 데이터베이스 접근 권한 부여/취소

Structured Query Language

DB를 조작하기 위한 언어

명령어

  • Database Definition Language
    • CREATE: 스키마 정의
    • ALTER: 스키마 수정
    • DROP: 스키마 삭제
  • Database Manipulation Language
    • INSERT: 데이터 삽입
    • UPDATE: 데이터 수정
    • DELETE: 데이터 삭제
    • SELECT: 데이터 검색
  • Database Control Language
    • GRANT: 권한 부여
    • REVOKE: 권한 취소
    • COMMIT: 정상 완료
    • ROLLBACK: 복귀

절차형 SQL

프로그래밍 언어처럼 연속적인 실행, 분기, 반복 등 제어가 가능한 SQL

  • 종류
    • 프로시저: 특정 기능을 수행하는 트랜잭션의 언어, 호출하여 실행
    • 트리거: 데이터 조작(이벤트)이 발생하면 자동적으로 수행되는 작업
    • 사용자 정의 함수: 프로시저와 유사, 반환값 존재
  • 테스트: 실행을 통해 결과 확인, SHOW 명령어로 자세한 내용 확인
  • 디버깅: 기능 적합성 여부 판단 가능
  • 쿼리 성능 최적화
    • 데이터 입출력의 성능을 향상시키기 위함
    • 성능 측정 도구 APM을 이용해 최적화할 쿼리를 선정 > 해당 쿼리에 대한 Optimizer의 실행 계획을 검토 > SQL 코드와 인덱스를 재구성
    • Application Performance Management: 접속자, 자원현황, 트랜잭션 수행 내역, 장애 진단 등 모니터링 기능 제공
    • Optimizer: 작성된 SQL이 효율적으로 수행되도록 최적의 경로를 찾아주는 DBMS 내장 모듈

Data Mapping

프로그래밍 언어로 작성한 코드와 DB의 데이터를 연결하는 방법

  • SQL Mapping: SQL을 사용하여 프로그램과 DB를 연결(JDBC, ODBC, MyBatis 등)
  • Object Relational Mapping: 객체 지향 프로그래밍 언어의 객체를 사용해 프로그램과 관계형 DB를 연결(JPA, Hibernate, Django 등)

Transaction

데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위, 또는 한번에 수행되어야 하는 일련의 연산들

  • 특징
    • Atomicity: 원자성, 수행(COMMIT)되거나 오류로 인해 수행되지 않거나(ROLLBACK) 둘 중 하나의 상태만을 취할 수 있음
    • Consistency: 일관성, 시스템 고정요소는 트랜잭션에 상관 없이 항상 같은 결과를 유지해야 함
    • Isolation: 격리성, 하나의 트랜잭션이 특정 데이터에 접근해 작업을 수행하고 있을 경우 다른 트랜잭션은 접근할 수 없음
    • Durability: 영속성, 트랜잭션이 성공적으로 수행되면 결과는 영속적임

※ 강의 링크: https://inf.run/B456

시스템 인터페이스: 시스템 간 상호작용에 있어 접속 방법, 규칙 등을 정의한 것

시스템 인터페이스 요구사항

구성

인터페이스 이름, 연계 대상 시스템, 연계 범위 및 내용, 연계 방식, 송신 데이터, 인터페이스 주기, 기타 고려사항

분석 절차

  1. 요구사항을 선별하여 목록 작성
  2. 관련 자료 준비
  3. 요구사항 명세서 확인 후 기능적, 비기능적 분류
  4. 내용 추가, 수정 사항 확인
  5. 관계자에게 요구사항 목록 전달

검증

  • 절차
    1. 요구사항 검토 계획 수립: 검토 기준 및 방법, 참여자, 체크리스트, 관련 자료, 일정 등
    2. 검토 및 오류수정: 체크리스트 항목에 따라 요구사항 명세서 검토, 오류 목록 작성
    3. 베이스라인 결정
  • 방법
    • 요구사항 검토: 수작업, 동료검토, 워크스루(요구사항 명세서를 미리 배포해서 사전에 확인), 인스펙션(명세서 작성자를 제외한 인원들이 검토)
    • 프로토타이핑
    • 테스트 설계
    • CASE 도구 활용: 일관성 분석을 위해 요구사항 변경 사항 추적 및 관리
  • 검증 항목
    • 완전성(누락 없이 모든 요구사항 반영), 일관성(모순되는 내용 없음), 명확성, 기능성, 검증가능성, 추적가능성, 변경용이성

시스템 인터페이스 송수신 시스템 식별

인터페이스 별 참여하는 송수신 시스템 식별, 연결 정보 확인

종류

  • 개발 시스템 식별: 개발하려는 시스템 식별 정보 정의 및 목록 작성
  • 내외부 시스템 식별: 개발하려는 시스템과 연결할 내외부 시스템 식별 정보 정의 및 목록 작성
  • 내외부 시스템 환경 및 관리 주체 식별: 네트워크 정보(IP, URL, Port 등), 관리 담당자 식별
  • 내외부 시스템 네트워크 연별 정보 식별: 시스템을 연결하기 위해 필요한 로그인, DB 정보 식별
  • 인터페이스 식별: 내외부 시스템 사이 인터페이스 식별

데이터

  • 식별 대상 데이터
    • 인터페이스 표준 항목: 시스템 공통부(연동에 필요한 공통 정보), 거래 공통부(연동 후 데이터 전달에 필요한 정보)
    • 송수신 데이터 항목(작업 수행에 필요한 데이터)
    • 공통 코드
  • 송수신 데이터 식별
    • 인터페이스 표준 항목과 송수신 데이터 항목 식별(인터페이스 이름, 정보 그룹, DB 등)
    • 코드성 데이터 항목 식별(코드분류명, 코드, 코드설명 등)
  • 정보 흐름(방향성) 식별

시스템 인터페이스 관련 문서화 작업

시스템 인터페이스 방법 명세화

  • 시스템 연계 기술: DBlink, API 등
  • 인터페이스 통신 유형: 단방향, 동기(요청 후 응답이 올 때까지 대기 후 처리), 비동기(요청 후 응답을 기다리지 않고 다른 작업을 수행하다가 응답이 오면 처리)
  • 인터페이스 처리 유형: 실시간 처리, 지연 처리(일정 건수가 모이면 처리), 배치 방식(대량의 데이터 처리에 적합)
  • 인터페이스 발생 주기: 수시, 매일, 주1회 등
  • 송수신 방법 명세화: 인터페이스 아이디, 인터페이스 이름, 송신 시스템, 수신 시스템 등
  • 송수신 데이터 명세화
  • 오류 식별 및 처리 방안 명세화

시스템 인터페이스 설계서

  • 시스템의 내외부 인터페이스를 식별하고 인터페이스의 명세를 기술하기 위해 작성하는 문서
  • 시스템 인터페이스 목록 + 시스템 인터페이스 정의서
    • 시스템 인터페이스 목록: 엽무 시스템과 내외부 시스템 간 인터페이스에 관해 기술한 문서
    • 시스템 인터페이스 정의서: 인터페이스 별 시스템 연계를 위해 필요한 데이터 항목, 데이터 저장소, 속성, 구현 요건 등을 기술한 문서

미들웨어

운영체제가 제공하는 서비스 외에 추가적인 서비스를 제공하는 소프트웨어

종류

  • DB: 클라이언트와 원격 DB를 연결
  • RPC(Remote Procedure Call): 응용 프로그램의 프로시저 기능을 이용해 로컬 프로시저 호출
  • MOM(Messeage Oriented Middleware): 비동기형 메시지 전달
  • TP-Monitor(Transaction Processing Monitor): 항공기, 철도 등 예약 업무 처리 및 감시, 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 경우 사용
  • ORB(Object Request Broker): CORBA 표준 스펙을 구현한 객체 지향 미들웨어
  • WAS(Web Application Server): 사용자에 요구에 따라 동적으로 컨텐츠를 처리, 웹 환경 구현

※ 강의 링크: https://inf.run/FkNC

소프트웨어 아키텍처

  • 소프트웨어의 기본 구조, 구성 요소들간의 관계
  • 소프트웨어 개발의 원칙, 지침 및 개발자들 간 소통의 도구로 사용됨

기본 원리

  • 모듈화
    • 관련된 기능들끼리 분류, 그룹화
    • 모듈의 크기가 작을수록 모듈 개수↑, 단일 모듈 개발 비용↓, 모듈 통합 비용↑
    • 모듈의 크기가 클수록 모듈 개수↓, 단일 모듈 개발 비용↑, 모듈 통합 비용↓
  • 추상화
    • 불필요한 부분은 생략하고 핵심만 남기는 것, 간략화
    • 과정 추상화: 자세한 수행 과정은 정의하지 않고, 전반적인 흐름만 파악할 수 있도록 설계
    • 데이터 추상화: 데이터의 세부적인 사항은 정의하지 않고, 구조를 대표적으로 표현할 수 있도록 설계
    • 제어 추상화: 이벤트(행위) 발생 방법을 자세히 정의하지 않고, 대표할 수 있는 표현으로 설계
  • 단계적 분해
    • 추상적인 내용에서 점점 구체화 시키는 방식, 하향식 설계 방법
    • 기능 > 알고리즘, 자료구조, ...
  • 정보 은닉
    • 외부에서 변경할 수 없도록 설계하는 방식, 캡슐화
    • 필요한 정보만 인터페이스를 통해 주고받을 수 있도록 함
    • 모듈 간 영향력이 줄어듦

설계 과정

  1. 설계 목표 설정: 시스템의 개발 방향, 우선순위, 비즈니스 목표 설정
  2. 시스템 타입 결정: 아키텍처 패턴 선택
  3. 아키텍처 패턴 적용: 시스템의 표준 아키텍처 설계
  4. 서브 시스템 구체화: 상호작용을 위한 인터페이스 정의
  5. 검토: 설계 목표에 부합하게 설계되었는지 확인

품질 평가 요소

  • 시스템 측면: 성능, 보안, 가용성(장애 발생 여부), 기능성, 사용성
  • 비즈니스 측면: 시장적시성, 비용, 예상 시스템 수명
  • 아키텍처 측면: 개념적 무결성(시스템과 구성 요소 간 일관성 유지 여부), 정확성(사용자 요구사항 충족 여부), 구축 가능성, 변경 가능성, 적응 가능성, 대체성

소프트웨어 아키텍처 패턴

  • 소프트웨어 개발에 있어 전형적인 해결 방식, 기본적인 윤곽
  • 장점: 개발 시간 단축, 고품질의 소프트웨어 개발 가능, 안정적, 의사소통 원활, 시스템 구조 이해 원활

종류

  • 레이어 패턴
    • 시스템을 레이어(계층)로 구분, 계층 간 상호작용을 통해 시스템이 작동함
    • 고전적 방법
    • 예: 네트워크 통신의 OSI 7계층 참조 모델
  • 클라이언트-서버 패턴
    • 클라이언트(client)가 서버(server)에 요청(request)을 보내면 서버가 이에 대한 응답(response)을 하는 방식
    • 서버는 항상 대기 상태를 유지
    • 예: 사용자(client)가 네이버(server)에 검색어를 입력하면(request) 검색 결과를 제공받음(response)
  • 파이프-필터 패턴
    • 각 단계를 필터 컴포넌트로 캡슐화하여 파이프를 통해 전송하는 방식
  • 모델-뷰-컨트롤러 패턴(MVC 패턴)
    • 컨트롤러(Controller)가 사용자로부터 입력을 받아 모델을 호출하면, 모델(Model)이 데이터에 접근하여 작업을 수행하고, 이 결과를 컨트롤러를 통해 뷰(View)가 받아 화면에 나타내어 사용자에게 보여주는 방식
  • 기타
    • 마스터-슬레이브 패턴: 마스터로부터 슬레이브가 명령받아 작업을 수행하는 방식
    • 브로커 패턴: 사용자의 요청에 따라 알맞게 연결해주는 방식
    • 피어-투-피어 패턴: 모든 노드가 클라이언트면서 서버인 방식
    • 이벤트-버스 패턴: 특정한 이벤트가 발생되면 처리하는 방식
    • 블랙보드 패턴: 모든 컴포넌트들은 블랙보드에 접근하여 검색할 수 있음(해결책이 명확하지 않은 경우 --- 음성인식, 차량식별 등)
    • 인터프리터 패턴: 프로그램 코드의 각 라인을 수행하는 방법을 지정하는 방식, 특정 언어로 작성된 프로그램 코드를 해석하기 위한 컴포넌트 개발에 사용

디자인 패턴

소프트웨어 개발 중 세부적인 구현 방안을 설계할 때 참고할 수 있는 문제 해결 방식

생성 패턴

  • 객체 생성과 관련된 패턴으로, 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 주지 않도록 유연성을 더해줌
  • 추상팩토리: 클래스에 의존하지 않고 인터페이스를 통해 의존하는 객체들의 그룹을 추상적으로 표현
  • 빌더: 조합하여 객체를 생성
  • 팩토리 메소드: 상위 클래스에서는 인터페이스만 정의하고, 서브 클래스에서 객체 생성을 처리하도록 캡슐화
  • 프로토타입: 원본 객체를 복제하는 방식으로 객체를 생성
  • 싱글톤: 어디서든 참조할 수 있는 하나의 객체를 생성, 단 여러 프로세스가 동시에 참조할 수는 없음

구조 패턴

  • 클래스, 객체 등을 조합하여 더 큰 구조를 만드는 패턴, 복잡한 시스템을 개발하는데 도움을 줌
  • 어댑터: 호환성이 없는 클래스를 다른 클래스가 이용할 수 있도록 함, 인터페이스가 일치하지 않았을 때 사용
  • 브리지: 기능과 구현을 나누어 별도의 클래스에서 구현
  • 컴포지트: 복합 객체와 단일 객체를 구분없이 사용
  • 데코레이터: 객체 간 결합을 통해 부가적인 기능들을 확장
  • 파사드: 복잡한 서브 클래스의 기능을 간편하게 사용하기 위해 상위 클래스에 인터페이스 구성
  • 플라이웨이트: 인스턴스를 매번 생성하지 않고 공유해서 사용, 메모리 절약 가능
  • 프록시: 접근이 어려운 객체에 접근하기 위한 인터페이스 역할을 수행

행위 패턴

  • 상호 작용, 책임 분배 등 하나의 객체로 수행할 수 없는 작업을 여러 객체에 분배하여 결합도를 최소화
  • 책임 연쇄: 하나의 객체가 작업을 처리하지 못하면 다음 객체가 처리하도록 전달
  • 커맨드: 요청을 객체 형태로 캡슐화하여 재사용할 수 있도록 함
  • 인터프리터: 언어의 문법적인 표현을 정의, SQL이나 통신 프로토콜 개발에 사용
  • 반복자: 접근이 잦은 객체에 대해 동일한 인터페이스를 사용, 순차적 접근 가능
  • 중재자: 복잡한 상호작용 과정을 객체 형태로 캡슐화, 객체 사이 의존성 감소
  • 메멘토: 이전 상태로 되돌리기
  • 옵서버: 한 객체가 변화한 경우, 해당 객체를 상속받는 객체들에 변화된 상태를 전달
  • 상태: 객체의 상태에 따라 동일한 동작을 다르게 처리
  • 전략: 동일한 계열의 알고리즘을 개별적으로 캡슐화하여 상호 교환을 가능하게 함
  • 템플릿 메소드: 상위 클래스에서는 골격을 정의하고, 하위 클래스에서는 세부 처리를 구체화
  • 방문자: 각 클래스의 처리 기능을 분리하여 별도의 클래스로 구성

객체 지향

  • 객체(Object): 데이터와 그 데이터에 관련된 모든 동작을 모두 포함한 개념
  • 객체 지향(Object Oriented): 실 세계의 개체(Entity)를 속성(Attribute)와 메소드(Method)가 결합된 형태의 객체(Object)로 표현하는 개념

구성요소

  • 객체(Object): 데이터(속성) + 연산(메소드)
  • 클래스(Class): 유사한 객체들을 모아 공통된 특성을 표현한 것, 클래스로부터 생성된 새로운 객체는 인스턴스(Instance)라고 부름
  • 메시지(Message): 객체들 간 상호작용이 일어나기 위해 필요, 메시지를 통해 객체의 동작이 수행됨

    게임(메0플)로 비유를 든다면, 클래스는 직업군, 객체는 사용자의 캐릭터(속성은 체력, 마력 등 / 메소드는 스킬 등)라고 볼 수 있음

객체 지향 기법

  • 캡슐화(Encapsulation): 보안을 위해 외부의 접근을 막는 것, 정보 은닉
  • 상속(Inheritance): 부모로부터 속성이나 메소드 등을 물려받는 것
  • 추상화(Abstraction): 단순화시켜서 나타내는 것
  • 다형성(Polymorphism): 고유한 방법으로 응답하는 것, 오버라이딩

모듈화

모듈: 소프트웨어를 각 기능별로 분할한 것, 소프트웨어 구조를 이루는 기본 단위
결합도와 응집도에 의해 독립성을 측정, 독립성이 높을 수록 잘 설계된 것

결합도(Coupling)

  • 한 모듈과 다른 모듈 간의 상호의존도, 낮을수록 독립적
  • 데이터 결합도(Data coupling): 한 모듈이 다른 모듈로 자료 요소를 전달 --- 결합도가 가장 약함
  • 스탬프 결합도(Stamp coupling): 한 모듈이 다른 모듈로 자료 구조를 전달
  • 제어 결합도(Control coupling): 한 모듈이 다른 모듈로 제어 요소를 전달
  • 외부 결합도(External coupling): 외부로 선언한 데이터를 모듈이 참조, 해당 데이터를 변경할 경우 제한적으로 영향을 끼침
  • 공통 결합도(Common coupling): 여러 모듈이 공통의 자료 영역을 사용, 공통 자료를 변경할 경우 사용하는 모든 모듈에 영향을 끼침
  • 내용 결합도(Content coupling): 한 모듈이 다른 모듈의 내용을 참조, 내용이 변경되면 영향을 끼침 --- 결합도가 가장 강함

응집도(Cohesion)

  • 한 모듈 내에 있는 구성 요소들의 관련성, 높을수록 독립적
  • 기능적 응집도(Functional cohesion): 모든 구성 요소들이 단일 문제에 관련됨 --- 응집도가 가장 강함
  • 순차적 응집도(Sequential cohesion): 모듈 내 한 구성 요소의 출력값이 다음 구성 요소의 입력값으로 전달됨
  • 통신적/교환적 응집도(Communicational cohesion): 모듈 내 구성 요소들이 동일한 입력값과 출력값을 이용하지만 서로 다른 기능을 수행함
  • 절차적 응집도(Procedural cohesion): 모듈 내 구성 요소들이 순차적으로 수행됨
  • 시간적 응집도(Temporal cohesion): 특정 시간에 처리되는 구성 요소들로 모듈이 구성됨
  • 논리적 응집도(Logical cohesion): 유사한 성격을 가지거나 특정 형태를 가지는 구성 요소들로 모듈이 구성됨
  • 우연적 응집도(Coincidental cohesion): 모듈 내 구성 요소들 사이 관련성이 없음

공통 모듈

  • 전체 프로그램의 기능 중 공통적으로 사용할 수 있는 모듈
  • 공통 모듈 명세 작성 원칙
    • 정확성: 해당 모듈이 필요한 이유를 정확하게 작성
    • 명확성: 중의적으로 해석되지 않도록 작성
    • 완전성: 해당 모듈을 구현하기 위해 필요한 모든 것을 작성
    • 일관성: 모듈의 기능들이 상호 충돌되지 않도록 작성
    • 추적성: 해당 모듈과 관련된 요구사항의 출처, 시스템과의 관계를 파악할 수 있도록 작성

코드

개념

  • 컴퓨터를 사용해 자료를 처리하는 과정에서 자료를 쉽게 추출하기 위한 기호
  • 주요 기능: 식별(성격에 따라 구분), 분류(기준), 배열(의미 부여)

종류

  • 순차 코드: 발생 순서에 따라서, 차례대로 발급하는 코드
  • 블록 코드: 공통성이 있는 데이터들끼리 블록으로 구분하는 코드
  • 10진 코드: 0부터 9까지 10개의 숫자를 이용하여 분할한 코드(도서분류코드)
  • 그룹 분류 코드: 대분류-중분류-소분류로 구성된 코드
  • 연상 코드: 연상할 수 있는 코드(TV-23 = 23인치 TV 등)
  • 표의(유효) 숫자 코드: 길이, 넓이, 부피, 지름 등 물리적인 수치를 사용한 코드
  • 합성 코드: 두 개 이상의 코드를 조합하여 나타낸 코드

※ 강의 링크: https://inf.run/FkNC

사용자 인터페이스(User Interface)

사용자와 시스템 사이에서 사용자가 시스템을 원활하게 이용할 수 있도록 도움을 주는 것

  • 역할: 물리적 제어(전달), 구성, 기능
  • 특징: 사용자의 만족도에 가장 큰 영향을 줌

구분

  • Command Line Interface: 명령어 입력하는 등 텍스트를 통해 소통하는 방식
  • Graphic User Interface: 아이콘을 클릭하는 등 그래픽 요소를 통해 소통하는 방식
  • Natural User Interface: 말이나 행동 등 신체를 움직여 소통하는 방식

기본 원칙

  • 직관성: 누구나 쉽게 이해하고 사용할 수 있어야 한다
  • 유효성: 사용자의 목적을 정확하고 완벽하게 달성할 수 있어야 한다
  • 학습성: 누구나 쉽게 배울 수 있어야 한다
  • 유연성: 사용자의 요구사항은 최대한 수용하고, 실수는 최소화할 수 있어야 한다

설계 지침

  • 사용자 중심, 일관성, 단순성, 결과 예측 가능, 가시성(기능 노출), 표준화, 접근성, 명확성, 오류 발생 해결
  • 사용자 경험(User eXperience)고려: 사용 대상, 환경, 목적, 빈도 등
  • 핵심 기능 고려: 메뉴 구조를 단순화하고 간결한 정보 제공
  • 호환성 확장성 고려: 3개 이상의 브라우저에서 동등한 서비스 제공
  • 정보 소외계층의 접근성 고려: 장애인, 고령자 등의 정보 접근 및 이용 편의 증진

한국형 웹 콘텐츠 접근성 지침

장애인과 비장애인 모두 동등하게 접근하고 사용할 수 있는 웹 콘텐츠를 제작하기 위한 지침

  • 인식의 용이성: 대체 텍스트, 멀티미디어 대체 수단, 명료성
  • 운용의 용이성: 키보드 접근성, 충분한 시간 제공, 광과민성 발작 예방, 쉬운 네비게이션
  • 이해의 용이성: 가독성, 예측 가능성, 콘텐츠의 논리성, 입력 도움
  • 견고성: 문법 준수, 웹 애플리케이션에 대한 접근성

전자정부 웹 표준 준수 지침

정부 기관의 홈페이지를 구축할 때 반영해야하는 최소한의 지침

  • 내용의 문법 준수
  • 내용과 표현의 분리 --- 웹 문서의 구조화
  • 동작의 기술 중립성 보장
  • 플러그인의 호환성
  • 콘텐츠의 보편적 표현 --- 브라우저에 독립적
  • 운영체제에 독립적인 콘텐츠 제공
  • 부가 기능의 호환성 확보
  • 다양한 프로그램 제공

UI 설계 도구

요구사항에 맞게 화면 구조, 배치 등을 설계할 때 사용하는 도구

와이어프레임

  • 기획 초기 단계에 사용, 개략적인 뼈대를 설계
  • 각 페이지 영역 구분, 컨텐츠, 텍스트 배치 등을 설계
  • 사용 도구: 손그림, 파워포인트, 키노트, 일러스트, 포토샵 등

스토리보드

  • 와이어프레임을 확장하여 컨텐츠에 대한 설명, 페이지 간 이동 흐름 등을 포함
  • 디자이너와 개발자가 최종적으로 참고하는 설계 산출 문서
  • 절차: 메뉴 구성도 만들기 - 스타일 확정 - 설계
  • 사용 도구: 파워포인트, 키노트, 스케치 등

목업(Mockup)

  • 와이어프레임보다 실제 화면에 유사하게 정적인 화면을 설계
  • 사용방법 설명, 평가, 디자인 등을 위함
  • 사용 도구: 발사믹 목업, 파워 목업 등

프로토타입

  • 실제로 구현된 것처럼 핵심적인 기능을 포함하여 간단하게 제작한 모형, 동적인 형태로 테스트가 가능함
  • 완성품을 만들기 전 사용자의 이해를 돕기 위해 제작
  • 사용 도구: 페이퍼 프로토타입 / 디지털 프로토타입(html/css, 카카오 오븐, 네이버 프로토 나우, Flinto 등)
  • 제작 단계: 요구사항 분석 - 핵심 기능 위주로 프로토타입 작성 - 사용자 피드백 - 프로토타입 보완 및 합의

Use Case

  • 사용자 측면에서 바라본 요구사항, 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술한 것
  • 자연어로 작성된 내용을 구조적으로 표현

UI 요구사항

UI 요구사항 확인

  1. 목표 정의
    • 여러 사용자를 대상으로 인터뷰 진행(개별적, 1시간 이내)
  2. 활동 사항 정의
    • 사용자의 요구사항 및 회사의 상황 등을 고려하여 UI 디자인 방향성 제시
  3. UI 요구사항 작성
    • 사용자 중심으로 다양한 의견을 고려하여 작성
    • 전체적인 구조 파악 및 검토 필요

UI 요구사항 작성 과정

  1. 요구사항 요소 확인
    • 데이터 요구: 사용자의 요구사항을 기반으로 필요한 데이터, 초기 확인 필요
    • 기능 요구: 사용자의 목적 달성을 위해 무엇을 실행해야 하는지를 동사형으로 기술
    • 제품/서비스 품질: ISO/ISE 9126(기능성, 신뢰성, 사용성, 효율성, 유지보수성, 이식성)을 기준으로 확인
    • 제약 사항: 개발 비용, 규제, 일정 등
  2. 정황 시나리오 작성
    • 사용자의 관점에서 기능 위주로 작성
    • 육하원칙에 따라 작성, 전문가에게 검토 받기
  3. 요구사항 작성
    • 정황 시나리오를 기반으로 작성
  • ISO/ISE 9126 부가 설명
    기능성: 적절성(정합성), 정밀성(정확성), 상호 운용성, 보안성, 호환성
    신뢰성: 성숙성: 고장 허용성, 회복성
    사용성: 이해성, 학습성, 운용성, 친밀성
    효율성: 시간 효율성, 자원 효율성
    유지보수성: 분석성, 변경성, 안정성, 시험성
    이식성: 적용성, 설치성, 대체성, 공존성

UI 설계서

사용자의 요구사항을 바탕으로 UI 설계를 구체화하여 작성한 문서
기획자, 개발자, 디자이너의 원활한 의사소통을 위해 필요

구성

  • UI 설계서 표지: 프로젝트 이름, 시스템 이름, 회사 로고 등
  • UI 설계서 개정 이력: 초안 이후 버전을 늘려가며 이력 작성
  • UI 요구사항 정의서: 사용자 요구사항을 정리한 문서
  • 시스템 구조: UI 요구사항 및 프로토타입을 기반으로 시스템 구조 설계
  • 사이트 맵: 전체 컨텐츠를 한 눈에 알아볼 수 있도록 메뉴별로 구분한 것
  • 프로세스 정의서
  • 화면 설계

UI 유용성에 따른 설계

  • UI 유용성: UI를 통해 사용자가 원하는 목표를 효과적으로 달성했는지를 나타내는 척도
  • 실행차를 줄이기 위한 UI 설계 원리 검토
    • 실행차: 사용자가 원하는 기능과의 차이
    • 사용자의 의도를 파악하여 불필요하거나 중복되는 기능이 있는지 확인
    • 행위 순서를 규정하고, 세분화(사용자가 임의로 순서를 변경할 수 있도록)
    • 사용자가 행위 순서를 직접적으로 파악하고 실행할 수 있도록 제공
  • 평가차를 줄이기 위한 UI 설계 원리 검토
    • 평가차: 사용자가 원하는 결과와의 차이
    • 수행한 키 조작의 결과 및 시스템 상태의 변화를 사용자가 빠르고 쉽게 지각하도록 유도

UI 시나리오 문서 작성(상세 설계)

  • UI 시나리오 문서: 실제 구현을 위해 모든 화면에 대한 자세한 설계 내용을 포함한 문서
  • 작성 원칙: 순차적 묘사, Tree 혹은 Flowchart 형태로 작성, UI 요소들 간 상호작용을 포함, 레이아웃 및 기능 정의
  • 일반 규칙
    • 주요 키의 위치와 기능
    • 공통 UI 요소
    • 기본 스크린 레이아웃
    • 기본 인터랙션 규칙
    • 공통 단위 태스크 흐름
    • 케이스 문서 --- 다양한 상황에서 공통적으로 적용되는 시스템의 동작을 정의한 문서
  • 요건: 완전성, 일관성, 이해성, 가독성, 수정 용이석, 추적 용이성
  • 기대효과: 요구사항 이해 및 의사소통에 있어 오해가 줄어들고 재작업 가능성을 낮출 수 있음, 불필요한 기능 최소화

UI 설계 관련 기타 개념

감성공학

  • 인체의 특징과 감정을 제품설계에 반영하는 기술
  • 인간 중심 설계를 기초로 함
  • 관련 기술: 생체 측정 기술, 인간의 오감 센서 및 감성 처리 기술, 감성 디자인 기술, 새로운 감성을 창출하기 위한 기술
  • 접근 방법
    • 인간의 감성 이미지를 측정: 제품에 대한 이미지를 조사, 분석하여 디자인과 연결
    • 개인이 갖고 있는 이미지를 구체화: 개인성에 중점을 둠, 문화적 감성
    • 인간의 감각을 측정하고 수학적 모델을 구축하여 활용

HCI(Human Computer Interaction)

  • 사람이 시스템을 보다 편리하고 안정적으로 사용할 수 있도록 연구하고 개발하는 학문

UX(User eXperience)

  • 사용자가 시스템을 이용하면서 느끼고 생각하는 총체적인 경험
  • 특징: 주관성(개인에 따라 다름), 정황성(환경에 따라 다름), 총체성(심리적, 감성적)

※ 강의 링크: https://inf.run/FkNC

소프트웨어 생명주기

소프트웨어 개발 과정을 단계별로 나누고, 각 단계에서 어떤 일을 해야하는지 서술한 것
비용 산정 및 개발 계획 수립에 기초를 제공하고, 개발 용어 등의 표준화 및 프로젝트 관리를 용이하게 함

폭포수 모형

  • 순차적으로 한 단계씩 진행하는 방식, 전 단계가 완료되기 전에는 다음 단계로 진행할 수 없음
  • 단점: 전 단계를 수정할 수 없어 사용자의 요구사항 변경을 반영하기 어려움 --- 요구사항이 명확한 경우에 적합함
  • 계획(타당성 검증) - 요구분석(문서화) - 설계 - 구현 - 테스트 - 유지보수

프로토타입 모형

  • 개발 초기에 시스템의 프로토타입(원형, 모형)을 만들어 사용자가 직접 사용하게 함으로써, 사용자가 만족할 때까지 프로토타입을 재구축하며 시스템을 개선하는 방식
  • 장점: 사용자의 요구사항 변경을 반영할 수 있음, 오류를 초기에 발견할 수 있음
  • 단점: 프로토타입을 개발하며 비용이나 시간 등을 낭비하게 됨
  • 요구분석 - 프로토타입 설계 - 프로토타입 개발 - 고객평가

나선형 모형

  • 고객과의 소통을 통하여 일정 단계를 반복하며 소프트웨어를 개발하는 방식, 대규모 시스템에 적합
  • 장점: 복잡해지고 있는 소프트웨어 개발 환경에 위험 요소를 분석하고 해결할 수 있도록 지원, 추가 요구사항 반영 가능, 별도의 유지보수 과정이 필요하지 않음
  • 단점: 비용이 많이 필요함
  • (계획수립 - 위험분석 - 개발 - 고객평가) 반복

애자일(Agile)

  • 고객 만족에 초점을 맞추고 요구사항에 우선순위를 부여하여 진행하는 방식, 소규모 시스템에 적합
  • 핵심가치
    • 개인과 개인 간의 상호작용
    • 작동하는 소프트웨어
    • 고객과의 협업
    • 변화 대응

요구사항

요구사항의 개념

  • 문제를 해결하기 위해 제공하는 서비스에 대한 설명 및 해당 서비스가 정상적으로 운영되기 위한 제약 조건
  • 개발하고자 하는 소프트웨어의 전반적인 내용
  • 소프트웨어 개발 및 유지보수 단계의 기준 & 근거, 개발자들의 의사소통을 원활하게 함

요구사항의 유형

  • 기술 내용을 기준으로
    • 기능 요구사항: 시스템이 어떤 기능을 수행하고, 사용자에게 무엇을 제공하는가
    • 비기능 요구사항: 장비(하드웨어, 소프트웨어), 성능(처리량, 처리속도), 인터페이스, 데이터, 테스트, 보안, 품질 등
  • 기술 관점과 대상의 범위를 기준으로
    • 시스템 요구사항: 개발자 관점, 시스템 전체
    • 사용자 요구사항: 사용자 관점

요구사항 개발 프로세스

요구 공학의 일부

  1. 도출(수집)
    • 개발자와 사용자 간 의사소통을 통해 요구사항을 도출하는 과정
    • 개발의 모든 단계에 걸쳐 진행됨
    • 방법: 인터뷰, 설문, 워크샵, 브레인스토밍 등
  2. 분석
    • 수집한 요구사항들의 명확성, 타당성을 검토
    • 비용, 일정, 개발 범위 등 설정
    • 기법
      • 요구사항 분류: 기능/비기능, 제품/개발과정, 우선순위, 영향력, 변경여부
      • 개념 모델링: 요구사항을 단순화, 개념화
      • 요구사항 할당
      • 요구사항 협상
      • 정형분석: 구문과 의미를 갖는 정형화된 언어를 이용해 요구사항을 수학적 기호로 나타낸 다음 분석
  3. 명세(문서화)
    • 요구사항을 이해하기 쉽고 명확하게 기술
  4. 확인
    • 요구사항이 정확하게 작성되었는지 검토
    • 요구되는 지식: 산업 분야, 프로젝트 환경, 업무 특성, 요구공학, 소프트웨어, 통계학 등에 대한 이해
    • 요구되는 기술: Use Case 작성 능력, UML 작성 기술, 분석 자동화 도구 및 요구사항 관리 도구 사용 능력, 리뷰 진행 능력 등
    • 기법
      • 요구사항 검토: 명확하지 않거나, 잘못된 가정을 바탕으로 하거나, 기준을 벗어났는지 등 확인
      • 프로토타이핑: 요구사항을 바탕으로 모형을 제작
      • 모델 검증: 요구사항 모델이 요구사항을 제대로 충족하는지 확인
      • 인수 테스트: 사용자 입장에서 요구사항이 모두 충족되었는지 확인

UML(Unified Modeling Language)

사용자와 개발자 사이 의사소통을 원활하게 하기 위한, 표준화된 객체 지향적인 모델링 언어
국제 표준화 기구 OMG에 의해 표준으로 지정됨

사물

  • 모델을 구성하는 기본 요소, 관계가 형성될 수 있는 대상
    이름 개념 예시
    행동 사물 시간, 공간에 따라 변하는 사물 상호작용, 상태 머신 등
    그룹 사물 그룹으로 나타내는 사물 패키지 등
    구조 사물 시스템의 개념적, 물리적 표현 클래스, 유즈 케이스, 컴포넌트, 노드 등
    주해 사물 주석, 부가적 설명을 표현하는 사물 노트

관계

  • 사물과 사물 사이의 연관성
    이름 개념 표현
    연관 관계 사물과 사물 사이 연관이 있음을 나타냄 실선(방향이 존재하는 경우 화살표도 사용, 양방향인 경우는 생략)
    집합 관계 하나의 사물이 다른 사물에 속해있음을 나타냄 더 큰 개념에 비어있는 마름모◇
    포함 관계 하나의 사물이 특정 사물에만 속해있음을 나타냄 더 큰 개념에 채워진 마름모◆
    일반화 관계 하나의 사물이 다른 사물에 비해 더 일반적인지 구체적인지 나타냄 부모 노드 쪽으로 비어있는 삼각형△
    의존 관계 특정 기간에만 유지되는 관계임을 나타냄 점선+화살표
    실체화 관계 그룹화가 가능한 관계임을 나타냄 점선+부모 노드 쪽으로 비어있는 삼각형△

다이어그램

  • 사물과 관계를 도형을 사용해 나타낸 것
  • 구조적 다이어그램(정적 모델링)
    • 클래스, 객체, 컴포넌트, 배치, 복합체 구조, 패키지
  • 행위 다이어그램(동적 모델링)
    • 유즈 케이스, 시퀀스, 커뮤니케이션, 상태, 활동, 상호작용 개요, 타이밍

요구사항 확인

분석모델에 대해 확인하고 현행 시스템에 대해 분석하는 것

현행 시스템 분석

  • 개발하려는 소프트웨어가 현행 시스템에 적용할 수 있는지 확인하기 위함
  • 지식: 산업 분야, 플랫폼, 프로젝트 환경, 가상화, 클라우드 등
    • 플랫폼: 소프트웨어를 구동시키는데 쓰이는 하드웨어와 소프트웨어의 결합
  • 기술: 환경분석, 운영체제, 저장장치, 네트워크, DBMS, 가상화 등
  • 절차
    1. 시스템의 구성, 기능, 인터페이스 파악
    2. 아키텍처(기술 요소) 및 소프트웨어(제품명, 용도, 라이센스 등) 구성 파악
    3. 하드웨어 및 네트워크(서버) 구성 파악

운영체제 분석

  • 운영체제(Operating System): 하드웨어와 소프트웨어 자원을 관리하는 시스템
  • 종류: 유닉스(대형 서버), 리눅스(중/대형 서버), 마이크로소프트 윈도우(개인 pc), IOS, 안드로이드 등
  • 운영체제 분석: 운영체제의 종류, 버전 등을 분석

네트워크 분석

  • 네트워크(Network): 디지털 전기통신망, 분산되어 있는 컴퓨터를 통신망으로 연결한 것
  • OSI(Open System Interconnection) 7계층: 물리 - 데이터링크 - 네트워크 - 전송 - 세션 - 표현 - 응용
  • 네트워크 분석: 네트워크 구조 및 사내 인터넷 데이터 센터 분석, 네트워크 구성도 작성
    • 네트워크 구성도: 서버의 위치, 서버 간의 네트워크 연결 방식 등의 정보를 포함

DBMS 분석

  • DBMS(Data Base Management System): 데이터베이스의 생성, 조회, 변경 등을 관리하는 시스템
  • 데이터베이스의 기능: 중복성 통제, 데이터 공유, 데이터 접근 통제, 인터페이스 제공, 관련성 표현, 무결성 보장
  • DBMS 분석: 논리/물리 테이블의 구조(정규화 정도, 조인의 난이도 등) 파악

비즈니스 융합 분석

  • 비즈니스(Business): 영리를 목적으로 하는 모든 활동
  • 비즈니스 융합: 비즈니스 모델의 적용 범위를 확대한 것
  • 유형: 제품 융합, 서비스 융합, 제품과 IT 융합, 서비스와 IT 융합, 제품의 서비스화, 서비스의 제품화, 제품과 서비스 융합 등
  • 비즈니스 융합 분석: 고객, 제품 및 서비스, 사업구조 분석

※ 강의 링크: https://inf.run/FkNC

+ Recent posts