[정보처리기사] 소프트웨어 개발 - 2과목 정리

2025. 1. 23. 03:55·📜 Certs/정보처리기사

1. 데이터 입출력 구현

1) 자료 구조

  • 선형 구조: 배열, 선형 리스트(연속/연결 리스트), 스택, 큐, 데크
  • 비선형 구조: 트리, 그래프

2) 선형 구조

선형 리스트

연속 리스트

  • 연속되는 기억장소(≒배열)
  • 기억장소 이용 효율 가장 좋음 (밀도 1)
  • 데이터 중간 삽입 시 빈 공간 필요, 삽입/삭제 시 자료 이동 필요

연결 리스트

  • 자료를 임의의 기억공간에 기억, 노드로 연결 → 삽입/삭제 용이
  • 기억 공간이 연속적으로 놓여있지 않아도 저장 가능
  • 순차 리스트 대비 기억 공간 효율 ↓
  • 접근 속도 느림: 포인터 찾아야 함
  • 중간 노드 끊어지면 다음 노드 찾기 어려움

스택

  • 한쪽 끝으로만 삽입, 삭제 (LIFO)
  • 스택이 가득 찬 상태에서 데이터 삽입 → 오버플로(Overflow)
  • 빈 스택에서 데이터 삭제 → 언더플로(Underflow)

응용 분야

  • 함수 호출 순서 제어
  • 인터럽트 처리
  • 수식 계산
  • 컴파일러의 언어 번역
  • 복귀 주소 저장

큐

  • 한쪽에서 삽입, 다른 쪽에서 삭제 (FIFO)
  • 시작과 끝을 표시하는 두 개의 포인터 사용

3) 비선형 구조

그래프

방향/무방향 그래프의 최대 간선 수

정점이 n개일 때,

  • 무방향 그래프: 최대 간선 수 = n(n-1)/2
  • 방향 그래프: 최대 간선 수 = n(n-1)

그래프


트리

정의

정점(노드)과 선분(브랜치)을 이용하여, 사이클을 이루지 않도록 구성한 특수한 그래프
(순환 구조가 없는 계층적 자료 구조)

관련 용어

  • 노드: 자료 항목 + 가지(branch)
  • 근 노드(Root Node): 최상위 노드
  • 디그리(차수): 각 노드에서 뻗어나온 가지의 수
  • 단말 노드(Terminal Node): 잎 노드(Leaf Node), 자식이 하나도 없는 노드, 디그리가 0
  • 자식 노드 / 부모 노드 / 형제 노드
  • 트리의 디그리: 트리 내에서 가장 높은 디그리(차수) 값
  • 레벨(Level): 최상위 루트 노드를 레벨 1 또는 0으로 봤을 때, 내려갈 때마다 1씩 증가

운행법(Tree Traversal)

  • Preorder 운행: Root → Left → Right
  • Inorder 운행: Left → Root → Right
  • Postorder 운행: Left → Right → Root

트리 운행

  • Preorder 예시
    • A13 → AB2E3 → ABDHIE3 → ABDHIECFG
  • Inorder 예시
    • 1A3 → 2BEA3 → HDIBEA3 → HDIBEAFCG
  • Postorder 예시
    • 13A → 2EB3A → HIDEB3A → HIDEBFGCA

4) 수식의 표기법

표기법

  • 전위 표기법(Prefix): 예) +AB
  • 중위 표기법(InFix): 예) A+B
  • 후위 표기법(PostFix): 예) AB+

Infix → PreFix, PostFix 변환 예시

X = A / B * (C + D) + E

  • PreFix: X + * / A B + C D E
  • PostFix: X A B / C D + * E + =
    (일반적으로 AB/CD+*E+ 형태로 쓰기도 함)

PostFix → Infix 변환 예시

A B C - / D E F + * +

→ A / (B - C) + D * (E + F)


PreFix → Infix 변환 예시

+ / A - B C * D + E F

→ A / (B - C) + D * (E + F)


5) 정렬

삽입 정렬 (Insertion Sort)

  • key 요소를 기준으로, 이미 정렬된 구간 사이의 올바른 자리를 찾아가며 삽입
  • 일반적으로 두 번째 요소부터 key로 잡고 시작

예시) 8 5 6 2 4

  1. (처음 key=5) → 5 8 | 6 2 4
  2. (다음 key=6) → 5 6 8 | 2 4
  3. (다음 key=2) → 2 5 6 8 | 4
  4. (다음 key=4) → 2 4 5 6 8

선택 정렬 (Selection Sort)

  • 현재 위치에 적절한 원소를 선택해서 맨 앞으로 가져오는 방식
  • 각 단계마다 가장 작은 값 찾아 맨 앞 값과 교체

예시) 8 5 6 2 4

  1. 최소값 2 찾아 맨 앞과 교체 → 2 5 6 8 4
  2. 남은 구간에서 최소값 4 찾아 두 번째 위치와 교체 → 2 4 6 8 5
  3. 남은 구간에서 최소값 5 찾아 세 번째 위치와 교체 → 2 4 5 8 6
  4. 남은 구간에서 최소값 6 찾아 네 번째 위치와 교체 → 2 4 5 6 8

버블 정렬 (Bubble Sort)

  • 인접한 요소들끼리 비교하여 크면 뒤로 보내는 방식
  • 한 단계 끝날 때마다 가장 큰 값이 뒤로 정렬됨

예시) 8 5 6 2 4

  1. 첫 번째 패스: (8,5) → (5,8), (8,6) → (6,8), (8,2) → (2,8), (8,4) → (4,8)
    결과: 5 6 2 4 8
  2. 두 번째 패스: (5,6) 통과, (6,2) → (2,6), (6,4) → (4,6)
    결과: 5 2 4 6 8
  3. 세 번째 패스: (5,2) → (2,5), (5,4) 통과, (4,6) 통과
    결과: 2 5 4 6 8
  4. 네 번째 패스: (5,4) → (4,5), ...
    결과: 2 4 5 6 8

퀵 정렬 (Quick Sort)

  • 피벗을 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 분할(파티션)
  • 분할과 정복 전략
  • 평균 시간 복잡도: O(n log n), 최악의 경우: O(n^2)

퀵 정렬


힙 정렬 (Heap Sort)

  • 완전 이진 트리(Complete Binary Tree)를 기반으로 한 힙(Heap)을 이용하는 정렬
  • 전이진 트리를 힙으로 구성한 뒤 정렬 수행
  • 시간 복잡도: O(n log n)

cf) 완전 이진 트리

  • 마지막 레벨 제외 모든 레벨이 노드로 꽉 차있고, 마지막 레벨은 왼쪽부터 순차적으로 채워진 형태

합병 정렬 (Merge Sort)

  • 이미 정렬된 여러 개의 부분 리스트를 합병(병합)하며 전체를 정렬
  • 시간 복잡도: O(n log n)

6) 이진 검색 (Binary Search)

  • 순서화된 자료구조(정렬된 상태)에서, 반으로 나누며 탐색 범위를 줄여가는 방식
  • 비교할 때마다 검색 범위가 절반씩 감소
  • 중간 레코드 위치 = (first + last) / 2

7) 해싱 함수 (Hash Function)

1) 제산법(Division)

  • 홈 주소: 해시테이블의 크기보다 큰 수 중 가장 작은 소수(Prime, Q)로 나눈 나머지
  • h(K) = K mod Q

2) 제곱법(Mid-Square)

  • 홈 주소: K^2의 중간 부분 값

3) 폴딩법(Folding)

  • 홈 주소: K를 여러 부분으로 나눈 후 각 부분의 합이나 XOR(배타적 논리합)

4) 기수 변환법(Radix)

  • 키 숫자를 다른 진수로 변환 후 주소 범위에 맞게 조정

5) 대수적 코딩법

  • 홈 주소: 키 값 각 자리의 비트수를 다항식의 계수로 간주, 이를 해시표 크기로 정의한 다항식으로 나눈 나머지

6) 숫자 분석법

  • 키 값 숫자의 분포를 분석하여, 비교적 고른 자리를 택해서 홈 주소 지정

7) 무작위법(Randomizing)

  • 난수를 이용한 방식

8) DB

DBMS (Database Management System)

  • 데이터베이스를 관리하고, 사용자 요구(요청)에 따라 필요한 정보를 생성해주는 소프트웨어

필수 기능

  1. 정의 기능: 데이터 타입, 구조, 제약 조건 등을 명시 가능
  2. 조작 기능: CRUD 연산에 대한 인터페이스 제공
  3. 제어 기능: CUD(Create, Update, Delete) 연산의 정확성, 데이터 무결성 유지

장점

  • 데이터 논리적/물리적 독립성 보장
  • 중복 최소화로 기억 공간 절약
  • 저장된 데이터 공동 이용, 데이터 표준화, 통합 관리, 최신성, 실시간 처리 가능
  • 데이터의 일관성/무결성, 보안 유지

단점

  • DB 전문가 부족
  • 전산화 비용 증가
  • 오버헤드(과부하) 발생 가능
  • 백업, 리커버리 어려움
  • 시스템 구조 복잡

스키마 (Schema)

  • DB 구조, 제약 조건 등에 관한 명세를 기술한 메타데이터 집합
  • 속성, 개체, 관계, 제약조건 등 포함

스키마 분류

  • 외부 스키마
    • 사용자나 개발자가 필요로 하는 부분적 DB 구조
  • 개념 스키마
    • DB 전체적인 논리적 구조
    • 모든 응용프로그램이나 사용자가 필요로 하는 전체 DB
    • 하나만 존재
  • 내부 스키마
    • 물리적 저장장치 관점에서 본 DB 구조
    • 실제로 DB에 저장될 레코드 형식, 물리적 순서 등

스키마


절차형 SQL의 테스트와 디버깅

  • 디버깅을 통해 기능의 적합성 검증, 실행 결과 확인
  • 목적: 테스트 통해 오류 발견, 디버깅으로 오류 소스 코드 추적 및 수정

2. 통합 구현

1) 단위 모듈(Unit Module)

  • SW 구현에 필요한 여러 동작 중, 단 하나의 동작을 수행하는 기능을 모듈화한 것
  • 단위 기능: 단위 모듈로 구현되는 하나의 기능
  • 사용자나 다른 모듈로부터 값을 전달받아 시작되는 작은 프로그램을 의미하기도 함
  • 두 개의 단위모듈을 합쳐서 두 개 기능 구현 가능
  • 구성요소: 처리문, 명령문, 데이터 구조 등
  • 독립적으로 컴파일, 다른 모듈에 호출/삽입 가능
  • 단위 기능 명세서 작성 후, 입출력 기능과 알고리즘 구현

2) IPC (Inter-Process Communication)

  • 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
  • 복수 프로세스를 수행하며 이뤄지는 프로세스 간 통신도 구현 가능

대표 메소드

  • Shared Memory
    • 다수 프로세스가 공유 메모리를 통해 통신
  • Socket
    • 네트워크 소켓을 통한 통신
  • Semaphores
    • 공유 자원 접근 제어를 통해 통신
  • Pipes & Named Pipes
    • 파이프라는 메모리를 공유 (선입선출), 프로세스 간 동시 접근 불가
  • Message Queueing
    • 메시지를 큐에 담아 송수신

3) 단위 모듈 테스트 (Unit Test)

  • 단위 기능을 구현하는 모듈이 정해진 기능을 정확히 수행하는지 확인
  • 화이트박스 / 블랙박스 테스트 기법 사용
  • 모듈 단독 실행 환경과 데이터가 필요
  • 기능 단위로 디버깅 용이 / 시스템 전체 수준 오류는 못 잡음

4) 테스트 케이스(Test Case)

  • 입력값, 실행조건, 기대결과 등 항목을 정리한 명세서

구성요소 (ISO/IEC/IEEE 29119-3 표준)

  1. 식별자
  2. 테스트 항목(대상)
  3. 입력 명세(입력값, 조건)
  4. 출력 명세
  5. 환경 설정(HW, SW)
  6. 특수 절차 요구사항
  7. 의존성 기술

5) 통합 개발 환경(IDE)

  • 코딩, 디버그, 컴파일, 배포 등을 제공하는 소프트웨어 개발환경
  • 대표 예: Eclipse, IntelliJ, Visual Studio, etc.

6) 빌드 도구

  • 소스 코드를 제품 소프트웨어로 만드는 과정(전처리, 컴파일, 링크 등)
  • Ant: 아파치, 자바 공식 빌드 도구
  • Maven: 아파치, Ant 대안
  • Gradle: Ant, Maven 보완

3. 소프트웨어 패키징

1) 소프트웨어 패키징

  • 모듈별로 생성한 실행 파일을 묶어 배포용 설치 파일로 만드는 작업
  • 사용자 중심으로 진행
  • 소스코드는 모듈화하여 패키징

고려사항

  1. 사용자 시스템 환경 정의 (OS, CPU, 메모리 등)
  2. UI는 시각적인 자료와 함께 제공
  3. 하드웨어와 함께 관리되도록 Managed Service 형태로 제공
  4. 내부 콘텐츠 암호화 및 보안
  5. 다른 콘텐츠 및 단말기간 DRM 연동 고려
  6. 사용자 편의성을 위한 복잡성, 비효율성 문제 고려
  7. 소프트웨어 종류에 적합한 암호화 알고리즘 적용

2) 릴리즈 노트 (Release Note)

  • 개발 과정의 릴리즈 정보를 최종 사용자와 공유하는 문서
  • 테스트 진행 방법, 결과, 소프트웨어 사양 등을 확인 가능
  • 전체 기능, 서비스 내용, 개선 사항 공유
  • 버전 관리 및 릴리즈 정보 관리 용이
  • 초기 배포 및 추가 배포 시 제공

초기 버전 작성 시 고려사항

  1. 현재 시제로 작성
  2. 신규 소스, 빌드, 변경/개선된 이력 작성
  3. 머릿말, 개요, 목적, 문제 요약, 재현 항목, 수정/개선 내용, 사용자 영향도, SW 지원 영향도, 노트, 면책 조항, 연락처 등

3) 디지털 저작권 관리(DRM)

  • 원본 콘텐츠가 아날로그라면 디지털 변환 후 패키저로 DRM 패키징
  • 콘텐츠 크기가 작은 경우(음원, 문서 등)는 실시간 패키징, 큰 경우 패키징 후 배포
  • 패키징 시 저작권자의 전자서명 포함, 라이선스 정보가 클리어링 하우스에 등록
  • 콘텐츠 사용 시, 클리어링 하우스에 등록된 라이선스로 사용자 인증 및 권한 여부 확인
  • 종량제 방식일 경우, 사용량 측정 후 요금 부과

DRM 구성 요소

  • 클리어링 하우스
    • 저작권 사용 권한, 라이선스, 암호화 키, 사용량 기반 결제 관리
  • 콘텐츠 제공자
    • 저작권자
  • 패키저
    • 콘텐츠와 메타데이터를 배포 가능한 형태로 묶어 암호화하는 프로그램
  • 콘텐츠 분배자
    • 암호화된 콘텐츠를 유통 (서버 등)
  • 콘텐츠 소비자
    • 최종 사용자
  • DRM 컨트롤러
    • 배포된 콘텐츠 이용권한 통제 프로그램
  • 보안 컨테이너
    • 콘텐츠 원본을 안전하게 유통하기 위한 전자적 보안 장치

DRM 기술 요소

  • 암호화 (+전자 서명)
  • 키 관리
  • 암호화 파일 생성(Packager)
  • 식별 기술
  • 저작권 표현
  • 정책 관리
  • 크랙 방지
  • 인증

4) 소프트웨어 매뉴얼

설치 매뉴얼

  • 사용자 관점에서 작성
  • 설치 방법 전 과정을 순서대로 기술
  • 오류 메시지, 예외 상황은 별도 분류하여 설명
  • 목차/개요, 서문, 기본 사항 포함

기본 사항

  1. 소프트웨어 개요: 주요 기능 및 UI를 그림과 함께 설명
  2. 설치 관련 파일: 설치 시 필요한 exe, ini, log 등 파일 설명
  3. 설치 아이콘(바로 가기 등)
  4. 프로그램 삭제(제거) 방법
  5. 관련 추가 정보

사용자 매뉴얼

  • 사용 과정에서 필요한 내용에 대한 문서
  • 오류 패치, 기능 업그레이드 등을 위해 매뉴얼 버전 관리 필요
  • 개별 동작 가능한 컴포넌트 단위로 작성
  • 컴포넌트 명세서, 구현 설계서 등을 토대로 작성
  • 목차/개요, 서문, 기본 사항 등 포함

5) 형상 관리 (Configuration Management)

  • Git, CVS, Subversion 등
  • SW 변경사항 추적, 통제
  • 무절제한 변경 방지
  • 버그/수정사항 추적
  • 진행 상태 및 배포본 관리 효율
  • 여러 개발자 동시 개발 가능

기능

  1. 형상 식별
    • 형상관리 대상에 이름/관리번호 부여, 계층 구조로 구분
  2. 버전 제어
    • 다른 버전의 형상 항목 관리
  3. 형상 통제(변경 관리)
    • 변경 요구 검토, 승인 등
  4. 형상 감사
  5. 형상 기록(상태 보고)

소프트웨어 버전 등록 관련 주요 기능

  • 저장소(Repository): 최신 버전 파일, 변경 정보 저장
  • 가져오기(Import): 빈 저장소에 파일 복사
  • 체크아웃(Checkout): 저장소에서 파일 받아옴
  • 체크인(Checkin): 수정된 소스를 저장소에 반영
  • 커밋(Commit): 충돌 해결 후, 최종 변경 사항 반영
  • 동기화(Synchronize)

방식별 분류

공유 폴더 방식

  • 로컬 컴퓨터의 공유 폴더에 버전 관리 자료 저장
  • SCSS, RCS, PVCS, QVCS 등

클라이언트/서버 방식

  • 중앙 서버에 저장
  • CVS, SVN(Subversion), CVSNT, Clear Case, CMVC, Perforce 등

분산 저장소 방식

  • 원격 저장소 + 분산된 개발자 PC의 로컬 저장소에 함께 저장
  • Git, GNU arch, DCVS, Bazaar, Mecurial, TeamWare, BitKepper, Plastic SCM 등

대표적 형상관리 기술

Subversion(SVN)

  • CVS 개선, 아파치에서 개발
  • 클라이언트/서버 구조
  • 서버에는 최신 파일, 클라이언트에서 받아서 수정 → 다시 서버에 반영
  • trunk 디렉토리에서 주 개발, branches 디렉토리에서 분기 개발
  • 커밋 시 리비전 번호가 1씩 증가
  • 오픈 소스, 무료
  • CVS 단점(파일/디렉토리명 변경, 이동 등)을 보완

Git

  • 리누스 토발즈 개발, 분산 버전 관리 시스템
  • 로컬 저장소 + 원격 저장소
  • 버전 관리가 로컬에서 이루어져, 네트워크 문제 시에도 작업 가능
  • 브랜치(Branch)로 기존 코드 영향 없이 다양한 테스트 가능
  • 스냅샷(Snapshot): 파일 변화 시, 이전 스냅샷 포인터 유지 → 버전 흐름 파악 용이

6) 빌드 자동화 도구

  • 소스 코드 컴파일, 모듈 묶어 실행 파일로 만드는 빌드, 테스트, 배포 과정 자동화
  • 지속적 통합(CI) 환경에서 사용

대표 도구

  • Ant, Make, Maven, Gradle, Jenkins 등

Jenkins

  • 자바 기반 오픈소스
  • 서블릿 컨테이너에서 실행되는 서버 기반 도구
  • 형상관리 도구 연동, 웹 UI 제공
  • 분산 빌드/테스트 가능

Gradle

  • Groovy 기반 오픈소스
  • Groovy로 만든 DSL 사용
  • 실행 명령을 태스크(Task)로 묶어 실행
  • 빌드 캐시 기능: 태스크 재사용 및 공유

4. 애플리케이션 테스트

1) 애플리케이션 테스트

  • 잠재 결함을 찾아내는 일련의 행위
  • 요구사항 만족 여부 확인, 기능 수행 검증

2) 테스트 관련 용어

  • 결함 집중(Defect Clustering): 대부분 결함이 일부 모듈에 집중
  • 파레토 법칙(80:20 법칙): 80% 오류는 20% 모듈에서 발견 → 특정 모듈 집중 테스트
  • 살충제 패러독스: 동일 테스트 반복 시 오류 발견 어려움, 테스트 케이스 지속 개선 필요
  • 오류 부재의 궤변: 오류가 없어도, 요구사항 불만족이면 품질이 낮다

3) 실행 여부에 따른 분류

  • 정적 테스트
    • 프로그램 실행 없이 명세서, 소스 코드 등을 대상으로
    • 예) 워크스루, 인스펙션, 코드 검사
  • 동적 테스트
    • 프로그램을 실행하여 테스트
    • 예) 블랙박스, 화이트박스 테스트

4) 테스트 기반에 따른 분류

  • 명세 기반 테스트(Specification Based)
    • 요구사항 명세를 기반
    • 예) 동등 분할, 경계 값 분석
  • 구조 기반 테스트(Structure Based)
    • SW 내부 논리 흐름 기반
    • 예) 구문/결정/조건 기반
  • 경험 기반 테스트(Experience Based)
    • 과거 경험이나 직관
    • 예) 에러 추정, 체크리스트, 탐색적 테스팅

5) 시각에 따른 분류

  • 검증 테스트
    • 개발자 시각, 명세서와 일치 여부
  • 확인 테스트
    • 사용자 시각, 요구사항 만족 여부

6) 목적에 따른 분류

  • 회복 테스트: 시스템에 결함 주어 실패 유도 → 올바르게 복구되는지
  • 안전 테스트: 보안, 보호 도구가 침입 차단하는지
  • 강도 테스트(Stress Test): 시스템 과부하 시 동작
  • 성능 테스트: 처리 속도, 자원 사용률, 반응 시간
  • 구조 테스트: SW 내부 논리, 소스코드 복잡도
  • 회귀 테스트: 변경/수정 후 새로운 결함 발생 여부
  • 병행 테스트: 변경된 SW와 기존 SW에 동일 입력 → 결과 비교

7) 화이트박스 테스트

  • 소스 코드 내부 논리 기반, 프로그램 제어 구조 중심
  • 모든 문장을 한 번 이상 실행
  • 분기점(조건/반복) 검사로 논리적 경로 제어

종류

  • 기초 경로 검사: 대표적, 논리적 복잡도 측정해 경로 기초 정의
  • 제어 구조 검사: 조건 검사, 루프 검사, 데이터 흐름 검사

검증 기준

  • 문장(구문) 커버리지: 모든 문장을 최소 1회 이상 실행
  • 분기(결정) 커버리지: 조건문 true/false 각각 한 번 이상 실행
  • 조건 커버리지: 조건문 내 개별 조건식 true/false
  • 분기/조건 커버리지

8) 블랙박스 테스트

  • 각 기능이 명세서 대로 완전한지 확인 (기능 테스트)
  • 내부 구조 X, 인터페이스만 확인
  • 요구/명세 기반, 테스트 과정 후반부

종류

  • 동등 분할 검사: 입력 자료를 타당/부적합으로 분할
  • 경계값 분석: 경계 영역에서 오류 발생 확률 높음
  • 원인-효과 그래프 검사: 입출력 상황 분석, 효율적 테스트 케이스 선정
  • 오류 예측 검사: 과거 경험/감각으로 검사 (보충적)
  • 비교 검사: 여러 버전 프로그램에 동일 자료 입력, 출력 비교

9) 개발 단계에 따른 애플리케이션 테스트

테스트 단계

단위 테스트 (Unit Test)

  • 모듈, 컴포넌트 검증
  • 사용자 요구사항 기반 기능성 테스트
  • (주로) 구조 기반 테스트
  • 알고리즘 오류, 반복문, 잘못된 수식 확인

통합 테스트 (Integration Test)

  • 단위 테스트 완료된 모듈을 결합해 시스템 완성
  • 비점진적 통합(빅뱅) vs. 점진적 통합(하향식, 상향식, 혼합식)

하향식 통합 테스트

  • 상위 → 하위 모듈
  • 초기부터 전체 구조 파악 용이
  • 스텁(Stub) 필요

상향식 통합 테스트

  • 하위 → 상위 모듈
  • 테스트 드라이버(Driver) 필요

테스트 드라이버와 스텁

  • 드라이버: 상위 모듈이 없는 상태에서 하위 모듈 테스트 시, 호출/매개변수 전달 역할
  • 스텁: 하위 모듈이 없는 상태에서 상위 모듈 테스트 시, 하위 모듈 흉내

시스템 테스트

  • 실제 사용 환경과 유사하게, 개발된 SW가 완벽히 수행되는지 테스트
  • 기능적/비기능적 요구 모두 확인

인수 테스트

  • 사용자 요구사항 충족 여부
  • 사용자(또는 요청자)가 직접 테스트
  • 알파 테스트: 개발자 앞, 통제된 환경
  • 베타 테스트: 특정 사용자가 실제 환경에서

10) 회귀 테스팅 (Regression Testing)

  • 테스트된 프로그램에 대한 재테스트
  • 통합 중 변경된 모듈, 컴포넌트 영향 검사
  • 수정 부분이 새 오류를 발생시키지 않도록 보증

11) 애플리케이션 테스트 프로세스

  1. 테스트 계획: 목표, 대상, 범위 결정
  2. 테스트 분석 및 디자인
  3. 테스트 케이스 및 시나리오 작성
  4. 테스트 수행
  5. 테스트 결과 평가 및 리포팅
  6. 결함 추적 관리

12) 테스트 케이스 (Test Case)

  • 요구사항 준수 여부 확인 위해 설계된 테스트 항목 명세서
  • 입력값, 실행 조건, 기대 결과 포함
  • (명세 기반 테스트의 산출물)
  • 시스템 설계 단계에서 작성 권장

테스트 시나리오 (Test Scenario)

  • 테스트 케이스들을 적절한 수행 순서로 묶은 집합

테스트 오라클 (Test Oracle)

  • 테스트 결과가 정상인지 판단하기 위해 참(예상) 값과 비교하는 기법

종류

  • 참 오라클: 모든 테스트 케이스에 기대값 제공
  • 샘플링 오라클: 일부 케이스만
  • 추정 오라클: 일부만 실제 결과, 나머지는 추정
  • 일관성 검사 오라클: 변경 전후 결과 동일성 확인

13) 테스트 자동화 도구

  • 수작업 테스트를 자동화 스크립트로 대체

유형

  1. 정적 분석 도구
    • 프로그램 실행 없이 코드 표준, 스타일, 복잡도 등 점검
    • 예) pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura
  2. 테스트 케이스 생성 도구
    • 자료 흐름도, 기능 테스트, 입력 도메인 분석, 랜덤 테스트 등
  3. 테스트 실행 도구
    • 자동화된 스크립트 방식
    • 데이터 주도, 키워드 주도 접근
  4. 성능 테스트 도구
  5. 테스트 통제 도구
    • 테스트 계획, 관리, 수행, 결함 관리
  6. 테스트 하네스 도구
    • 테스트 환경(드라이버, 스텁 등) 제공
    • 컴포넌트/모듈 테스트 지원

테스트 하네스 구성요소

  • 테스트 드라이버
  • 테스트 스텁
  • 테스트 슈트(테스트 케이스들의 집합)
  • 테스트 케이스
  • 테스트 스크립트
  • 목 오브젝트(Mock Object)

14) 결함 (Defect)

  • 오류, 작동 실패 등 이상 동작
  • 기대값/결과 간의 차이, 업무 내용 불일치도 결함에 포함

15) 애플리케이션 성능 분석

  • 요구 기능을 최소 자원으로 빠르게 처리하는 정도

성능 측정 지표

  • 처리량(Throughput)
  • 응답 시간(Response Time): 요청~응답
  • 경과 시간(Turnaround Time): 작업 의뢰~처리 완료
  • 자원 사용률(Resource Utilization)

빅 오 표기법 (Big-O Notation)

  • 알고리즘의 실행 시간(최악 시나리오) 표기
  • 예)
    • O(1): 입력값과 무관, 한 단계
    • O(log n): 이진 검색 등
    • O(n): 입력값에 비례
    • O(n log n): 힙정렬, 합병 정렬 등
    • O(n^2): 삽입, 선택, 버블, 퀵(최악) 등
    • O(2^n): 피보나치 등

순환 복잡도 (Cyclomatic Complexity)

  • 프로그램의 논리적 복잡도 측정
  • 맥케이브 순환도(맥케이브 복잡도) 사용
  • 제어 흐름도에서 경로 수 정의 → 테스트 상한선
    • E: 간선(화살표) 수
    • N: 노드 수
  • V(G) = E - N + 2

16) 소스 코드 최적화

  • 클린 코드: 단순 명료하고, 읽기 쉬우며, 유지보수성이 높은 코드
  • 나쁜 코드(Bad Code): 복잡, 스파게티 코드, 외계인 코드 등

클린 코드 작성 원칙

  1. 가독성
  2. 단순성: 한 번에 한 가지 처리
  3. 의존성 최소화: 변경 시 영향 최소화
  4. 중복성 최소화
  5. 추상화: 상위 수준에서 핵심 특성만 표현

17) 소스 코드 품질 분석 도구

  • 정적 분석 도구
    • 프로그램 실행 없이 코드 표준, 스타일, 결함 확인
    • 자료 흐름/논리 흐름 분석 → 비정상 패턴 감지
    • pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura
  • 동적 분석 도구
    • 실제 실행하며 메모리 누수, 스레드 결함 등 분석
    • Avalanche, Valgrind 등

4. 인터페이스

1) EAI (Enterprise Application Integration)

  • 기업 내 애플리케이션/플랫폼 간 정보 연동 솔루션
  • 비즈니스 간 통합, 연계성 증대 → 효율성/확장성 ↑

구축 유형

  1. Point-to-point
    • 1:1 연결, 변경/재사용 어려움
  2. Hub & Spoke
    • 중앙 집중형(허브), 확장/유지보수 용이, 허브 장애 시 전체 영향
  3. Message Bus(ESB)
    • 애플리케이션 사이에 미들웨어 버스, 확장성 높고 대용량 처리 가능
  4. Hybrid
    • Hub&Spoke + Message Bus 혼합

ESB (Enterprise Service Bus)

  • 서비스 중심 통합 지향
  • 애플리케이션과 Loose Coupling으로 범용성 확보
  • 관리, 보안 유지 쉬움

2) JSON (JavaScript Object Notation)

  • 속성-값 쌍, AJAX에서 XML 대체로 많이 사용

3) XML (eXtensible Markup Language)

  • 다목적 마크업 언어
  • HTML의 비호환성 문제 해결
  • 구조화된 데이터 표현

4) AJAX (Asynchronous JavaScript and XML)

  • 클라이언트-서버 간 비동기 통신 기술
  • XML(또는 JSON) 기반 데이터 교환
  • 웹 페이지 새로고침 없이 서버와 통신

5) 인터페이스 보안 기능 적용

  • 일반적으로 네트워크, 애플리케이션, DB 영역에 보안 적용

네트워크 영역

  • 스니핑(도청) 방지 위해 네트워크 트래픽 암호화
  • IPSec, SSL, S-HTTP 등
    • IPSec: IP 단에서 암호화, 양방향 암호화 가능

애플리케이션 영역

  • 소스 코드 보안 취약점 보완

데이터베이스 영역

  • DB, 스키마, 엔티티 접근 권한, 프로시저/트리거 등 관리

6) 데이터 무결성 검사 도구

  • 시스템 파일 변경 시 알려줌
  • 인터페이스 보안 취약점 분석에 사용
  • 해시를 이용해 파일 변조 감지
  • Tripwire, AIDE, Samhain, Claymore, Slipwire, Fcheck 등

7) 인터페이스 구현 검증 도구

  • xUnit
    • 단위 테스트 프레임워크(JUnit, CppUnit, NUnit, HttpUnit 등)
  • STAF(Software Testing Automation Framework)
    • 서비스 호출, 컴포넌트 재사용 등 다양한 환경 지원
    • 크로스 플랫폼, 분산 테스트 지원
  • FitNesse
    • 웹 기반 테스트 케이스 설계/실행/결과 확인
  • NTAF
    • 네이버의 테스트 자동화 프레임워크
    • FitNesse 협업 기능 + STAF 재사용성/확장성
  • Selenium
    • 브라우저 자동화 테스트 프레임워크
  • watir: Ruby 기반

8) APM (Application Performance Management/Monitoring)

  • 애플리케이션 성능 관리/모니터링
  • 접속자, 자원 현황, 트랜잭션, 장애 진단 등
  • 리소스 방식: Nagios, Zabbix, Cacti
  • 엔드투엔드 방식: VisualVM, 제니퍼, 스카우터 등

 

'📜 Certs > 정보처리기사' 카테고리의 다른 글

[정보처리기사] 정보 시스템 구축 관리 - 5과목 정리  (4) 2025.01.30
[정보처리기사] 프로그래밍 언어 활용 - 4과목 정리  (2) 2025.01.28
[정보처리기사] 데이터베이스 구축 - 3과목 정리  (3) 2025.01.28
[정보처리기사] 소프트웨어 설계 - 1과목 정리  (3) 2025.01.22
'📜 Certs/정보처리기사' 카테고리의 다른 글
  • [정보처리기사] 정보 시스템 구축 관리 - 5과목 정리
  • [정보처리기사] 프로그래밍 언어 활용 - 4과목 정리
  • [정보처리기사] 데이터베이스 구축 - 3과목 정리
  • [정보처리기사] 소프트웨어 설계 - 1과목 정리
hjwjo
hjwjo
백엔드 및 풀스택 개발에 관심 있는 초보 개발자의 개발 블로그입니다.
  • hjwjo
    Jeongwoo's Devlog
    hjwjo
  • 전체
    오늘
    어제
    • Devlog
      • 🗄️ Backend
        • Java
        • Spring
        • JPA
        • SQL
        • JSP
        • AWS
        • GCP
        • Linux
        • GitHub
        • ML
        • Security
      • 🖥️ Frontend
        • React
        • CSS
      • 🏅 Project
        • Hackathon
        • Team Project
      • 📊 Algorithm
        • BOJ
      • 📜 Certs
        • ADsP
        • SQLD
        • 정보처리기사
      • 📖
        • JavaScript
      • 일상
        • 면접후기
  • 블로그 메뉴

    • 홈
    • Devlog
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    정처기
    백준
    SQL
    http
    스프링부트
    쿼리
    jsp
    정보처리기사
    Spring
    ADsP
    DML
    AWS
    java
    GCP
    데이터베이스
    java기초
    백엔드
    springboot
    자바
    스프링
  • 최근 댓글

  • 최근 글

hjwjo
[정보처리기사] 소프트웨어 개발 - 2과목 정리
상단으로

티스토리툴바