본문 바로가기
IT License/정처기-2과목

2021 #정보처리기사 필기요약 #2-2. 통합구현, 배포, 버전관리

by 시뮝 2021. 2. 27.
728x90
2021년 NCS기반 정처기 필기입니다. 이기적2020과 수제비2021 수험서를 함께 보고 공부한 기록입니다.

참고1. 노랑마킹은 시험에 나온 중요한 부분입니다.

참고2. 주황강조는 약어 혹은 중요한 내용입니다.

참고3. 회색마킹은 예시입니다.


제 2과목 소프트웨어 개발 > 통합 구현


통합구현

(1) 단위 모듈 구현

단위 모듈 구현은 소프트웨어 개발에 있어 기능을 단위 모듈별로 분할하고 추상화하여 성능을 향상시키고, 유지보수를 효과적으로 하기 위한 구현 기법이다.

 

단위 모듈 구현 원리 (정분추모)

  • 보 은닉 (Information Hiding)
  • 할과 정복 (Divide & Conquer)
  • 이터 추상화 (Data Abstraction)
  • 듈 독립성 (Module Independency)

 

재사용(Reuse) 종류

구분 설명
재공학 기존 소프트웨어 기능 개선 or 기능 재사용 기법,
장점으로는 위험부담 감소, 비용 절감, 개발 기간 단축, 시스템 명세의 오류억제가 있다.
역공학 SW에 대한 디버깅, 디컴파일 등의 분석을 통해 기존 제품에 구현된 구조, 원리, 기술, 알고리즘 등을 역으로 분석하여 재구성하는 기법
재개발 기존 시스템 내용을 참조하여 완전히 새로운 시스템을 개발, 새로운 기능 추가, 기존 시스템의 기능 변경 기법

 

단위 모듈 테스트의 종류

종류 설명
블랙박스 테스트 명세 기반 테스트, 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트(기능 테스트)
화이트박스 테스트 구조 기반 테스트, 모듈 내부 소스 코드를 보면서 수행하는 테스트
메서드 기반 테스트 메서드 기반 테스트, 메서드에 서로 다른 파라미터 값을 호출하면서 테스트
화면 기반 테스트 사용자 시나리오 기반 테스트, 개발 후 화면에 직접 데이터를 입력하여 수행하는 테스트

 

블랙박스/화이트박스 테스트 상세 바로가기

출처: https://simuing.tistory.com/entry/2021-정보처리기사-필기요약-테스트-구 [시뮝 연구소]

 

2021 #정보처리기사 필기요약 #2-4. 테스트, 구현

2021년 NCS기반 정처기 필기입니다. 이기적2020과 수제비2021 수험서를 함께 보고 공부한 기록입니다. 참고1. 노랑마킹은 시험에 나온 중요한 부분입니다. 참고2. 주황강조는 약어 혹은 중요한 내용

simuing.tistory.com

 


(2) 통합구현 관리

IDE(Integrated Development Environment) 도구

코딩, 디버그, 컴파일, 배포 등 프로그램 개발과 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어이다.

ex) 이클립스 / 비주얼 스튜디오 / 엑스 코드 등

 

IDE 제공기능

개발환경 지원 / 컴파일 / 디버깅 / 외부 연계 / DB 연동

 

협업 도구

통합 구현 관리를 위해 개발자 간 상호 소통을 하는 협업 도구이다.

ex) 구글 드라이브 / 깃허브 / 에버노트 / 레드 펜 / 마인드 마이스터 / 트렐로 / 레드마인 / 지라 / 구글캘린더 등

  • 분류: 문서 공유 / 소스 공유 / 아이디어 공유 / 디자인 공유 / 마인드 맵 / 프로젝트 관리 / 일정 관리

 

협업 도구 기능

  • 개발자 간 커뮤니케이션
  • 일정 및 이슈 공유
  • 개발자 간 집단 지성 활용

 

형상 관리 도구

형상 관리(Configuration Management)는 개발 과정의 변경 사항을 관리한다.

ex) CVS, SVN, Git 등

 

형상관리 관리항목 (분코지) [2020년 4회]

  • 프로젝트 요구 석서
  • 소스
  • 운영 및 설치 침서

 

형상 관리 도구의 주요 기능 (인아커) [2020년 3회]

  • 체크(Check-In)
  • 체크웃(Check-Out)
  • 밋(Commit)

제 2과목 소프트웨어 개발 > 제품 소프트웨어 패키징


제품 소프트웨어 패키징

(1) 애플리케이션 패키징

애플리케이션 패키징(Application Packaging)은 개발이 완료된 소프트웨어를 배포하고 설치할 수 있도록 고객에게 전달하기 위한 형태로 제작하고, 설치와 사용에 대한 제반 내용을 포함하는 메뉴얼을 작성하는 활동이다. 사용자 중심으로 진행된다.

 

애플리케이션 패키징 고려사항 (환유관변)

  • 사용자 시스템 경 정의
  • UI 제공
  • 리 서비스 형태로 제공
  • 패키징의 경 및 개선 관리 고려

 

애플리케이션 패키징 프로세스

  1. 기능 식별
  2. 모듈화(Modularity)
  3. 빌드 진행
  4. 사용자 환경 분석
  5. 패키징 적용 시험
  6. 패키징 변경 개선

(2) 애플리케이션 배포 도구

애플리케이션 배포 도구는 배포를 위한 패키징 시에 디지털 콘텐츠의 지적 재산권을 보호하고 관리하는 기능을 제공하며, 안전한 유통과 배포를 보장하는 도구이자 솔루션이다.

 

애플리케이션 배포 도구의 기술 요소 (DRM 기술요소와 동일) (암키식저 파정크인)

호화 / 관리 / 별 기술 / 작권 표현 / 암호화 일 생성 / 책 관리 / 랙 방지 /

 

애플리케이션 배포 도구 활용 시 고려사항 (암이복최)

  • 호화/보안
  • 기종 연동(DRM 연동 고려)
  • 잡성 및 비효율성 문제
  • 적합 암호화 알고리즘 적용

(3) 애플리케이션 모니터링 도구

애플리케이션 모니터링 도구는 제품 소프트웨어를 사용자 환경에 설치한 후 기능 및 성능, 운영 현황을 모니터링하여 제품을 최적화하기 위한 도구이다.

 

애플리케이션 모니터링 도구의 기능

2020년 1회 기출에 "소스 코드 품질분석 도구 중 정적 분석 도구가 아닌 것은?" 문제가 출제되었습니다.

기능 설명 도구
변경 관리 종속관계 모니터링 ChangeMiner
성능 관리 트랜잭션 수량, 처리시산, 응답시간 모니터링 Jeniffer, Nmon
정적 분석 소스코드 잠재적 문제 발견, 코딩 규칙 오류 발견 PMD, Cppcheck, Checkstyle, SonarQube
동적 분석 프로그램 결함 및 취약점 동적 분석 도구 Avalanche, Valgrind

 

애플리케이션 모니터링 도구 활용에 따른 효과

서비스 가용성 / 서비스 성능 / 장애인지/리소스 측정 / 근본 원인 분석


(4) 디지털 저작권 관리(DRM; Digital Rights Management)

DRM은 디지털 콘텐츠에 대한 권리정보를 지정하고 암호화 기술을 이용하여 허가된 사용자의 허가된 권한 범위 내에서 콘텐츠의 이용이 가능하도록 통제하는 기술이다.

 

DRM의 특징

거래 투명성 / 사용규칙 제공 / 자유로운 상거래 제공

 

DRM 구성요소 (제콘패 클 소컨보)

구분 구성요소 구성요소별 설명
콘텐츠 공자 
DRM 텐츠, 서비스하고자 하는 암호화된 콘텐츠, 콘텐츠와 관련된 메타데이터, 콘텐츠 사용 정보를 패키징하여 구성된 콘텐츠
키저(Packager) 암호화된 콘텐츠, 콘텐츠 관련 메타 데이터, 클리어링 하우스에서 부여받은 콘텐츠 사용정보를 암호화한 콘텐츠로 변환하는 도구
리어링 하우스  콘텐츠 정책,
콘텐츠 라이선스,
콘텐츠 관리정보,
콘텐츠 사용정보
클리어링 하우스(Clearing House): 키 관리 및 라이선스 발급 관리
콘텐츠 비자
DRM 트롤러 배포된 콘텐츠의 이용 권한을 통제
안 컨트롤러 원본 콘텐츠를 안전하게 유통하기 위한 전자적 보안 장치

 

DRM의 기술요소 (암키식저 파정크인)

호화 / 관리 / 별체계 표현 / 작권 표현 / 암호화 일 생성 / 책 관리 / 랙 방지 /


제품 소프트웨어 매뉴얼 작성

(1) 제품 소프트웨어 매뉴얼

사용자 중심의 기능 및 방법을 나타낸 설명서와 안내서를 의미한다.

종류 설명
제품 소프트웨어 설치 매뉴얼 사용자가 제품을 구매한 후 최초 설치 시 참조하는 매뉴얼이다.
설치 시작부터 완료할 때까지의 전 과정을 빠짐없이 순서대로 설명한다.
제품 소프트웨어 사용자 매뉴얼 설치와 사용에 필요한 제반 절치 및 환경 등 전체 내용을 포함하는 문서이다.
개발된 컴포넌트 사용 시에 알아야할 내용을 기술한다.

 

(2) 국제 표준 제품 품질 특성

국제 표준 제품 품질 특성은 제품에 대하여 명확하게 정의된 특성을 의미하며, 품질을 평가하는 기준 항목이다.

 

국제 제품 품질 표준 

  • IT 프로젝트를 진행하거나, 완성된 IT 제품에 대해 기능성, 신뢰성 등을 평가하는 기준이 되는 국제 표준이다.
  • ISO/IEC 9126은 품질 특성 및 측정 기준을 정의하고 있는 표준으로 1991년에 제정된 후 1994년부터 품질 특성과 내부 품질과 외부 품질을 조정하고, 품질 측정 절차를 별도의 ISO/IEC 14598 표준으로 분리하였다.
품질 표준 설명
ISO/IEC 9126 소프트웨어 품질 측정, 평가를 위해 소프트웨어 품질요소와 특성을 정의
ISO/IEC 14598 소프트웨어 제품 평가 프로세스 및 평가 모듈 제공
ISO/IEC 12119 소프트웨어 패키지 제품에 대한 품질 요구사항 및 테스트 국제 표준 [2020년 3회]
ISO/IEC 25000 소프트웨어 품질 평가 통합 모델, SQuaRE로도 불리며, ISO/IEC 9126과 ISO/IEC 14598, ISO/IEC 12119를 통합하고, ISO/IEC 15288을 참고한 소프트웨어 제품 품질에 대한 통합적인 국제표준

 

ISO/IEC 9126의 소프트웨어 품질 특성 (기신사효유이)

품질 특성 설명 품질 부특성
능성 (Functionality) 요구 만족 기능 제공 능력 적합성, 정확성, 상호 운용성, 보안성, 준수성 등
뢰성 (Reliability) 주어진 시간 내 오류 없이 수행하는 정도 [2020년 3회] 성숙성, 결함 허용성, 회복성, 준수성 등
용성 (Usability) 이해, 학습, 사용 선호 능력 이해성, 학습성, 운용성, 친밀성, 준수성 등
율성 (Efficiency) 자원의 양에 따른 성능 제공 능력 시간 반응성, 자원 효율성, 준수성 등
지보수성 (Maintainability) 제품 변경(수정,개선,개작) 능력 분석성, 변경성, 안정성, 시험성, 준수성 등
식성 (Portability) 환경 전이 능력 적응성, 설치성, 공존성, 대체성, 준수성

 

ISO/IEC 14598의 소프트웨어 품질 특성 (반재공객)

특성 설명
복성 (Repeatability) 특정 제품을 동일 평가자가  동일 사양으로 평가하면 동일한 결과가 나와야 한다.
현성 (Reproducibility) 특정 제품을 다른 평가자가 동일 사양을 평가하면 유사한 결과가 나와야 한다.
정성 (Impartiality) 평가가 특정 결과에 편향되지 않아야 한다.
관성 (Objectivity) 평가 결과는 객관적 자료에 의해서만 평가되어야 한다.

 

ISO/IEC 25000 구성요소 (관모측요평)

품질 리(2500n) / 품질 델(2501n) / 품질 정(2502n) / 품질 구(2503n) / 품질 가(2504n)

 

국제 프로세스 품질 표준

  • ISO/IEC 9001
  • ISO/IEC 12207 : 기본 프로세스, 지원 프로세스, 조직 프로세스로 구성되어 있다.
  • ISO/IEC 15504 (SPICE)
  • CMMi : 프로세스 영역, 목표, 실행, 공통특징으로 구성되어 있다.

 

소프트웨어 품질 측정을 위해 고려해야 할 항목

  • 개발자 관점 : 정확성 / 신뢰성 / 효율성 / 무결성 / 유연성 / 이식성 / 간결성 / 재사용성 / 상호 운용성

 

소프트웨어 공학의 기본원칙

소프트웨어 위기 (Software Crisis)

구분 설명
위기의 원인 소프트웨어의 특징 이해 부족
소프트웨어의 관리 부재
소프트웨어 복잡도 및 크기 증가
소프트웨어 제품 수명주기 단축
위기 극복 방안 공학적 접근, 표준화, 자동화 도구, 품질 보증

 

소프트웨어 공학(Software Engineering; SE)

구분 설명
원칙 품질 높은 소프트웨어 상품 개발, 지속적인 검증 시행, 결과에 대한 명확한 기록 유지
관련 법칙 브룩스의 법칙(Brooks' Law) : 일정이 지연된다고 해서 Project 말기에 새로운 인원을 추가 투입하면 Project는 더욱 지연되게 된다.
파레토 법칙(Pareto Principle) : 소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견된다.
롱테일 법칙(Long Tail) : 사소해 보이는 80%의 다수가 20%의 소수 핵심보다도 뛰어난 가치를 창출해낸다.

제품 소프트웨어 버전 관리

소프트웨어 버전 관리 도구

형상 관리 지침을 활용하여 제품 소프트웨어의 신규 개발, 변경, 개선과 관련된 수정 사항을 관리하는 도구이다.

 

제품 소프트웨어 버전 관리

소프트웨어 개발과 관련하여 코드와 라이브러리, 관련 문서 등 시간의 변화에 따른 변경을 관리하는 전체 활동을 의미한다.

 

소프트웨어 버전 관리 도구 유형

버전 관리 도구 유형 예시 설명
공유 폴더 방식 RCS, SCCS 약속된 위치의 공유 폴더에 복사하는 방식
클라이언트/서버 방식 CVS, SVN 중앙에 버전 관리 시스템을 항시 동작시킴
분산 저장소 방식 Git, Bikeeper 로컬 저장소와 원격 저장소로 분리된 구조

 

많이 활용되는 버전 관리 도구별 특징

유형 버전 관리 도구 설명
클라이언트-서버
방식
CVS 가장 오래된 형상 관리 도구 중의 하나
SVN CVS의 단점을 보완해 가장 널리 사용되고 있는 도구
분산형 방식 Git 각 PC 스스로 완전한 저장소가 구성되며, 필요에 따라 중앙 집중형 방식으로도 운영

 

소프트웨어 버전 관리 도구 사용 시 유의사항

  • 버전에 대한 쉬운 정보 접근성
  • 불필요한 사용자에 대한 접근 제어
  • 동일 프로젝트에 대한 동시 사용성
  • 빠른 오류 복구

빌드 자동화 도구

빌드 자동화 구성요소

구성요소 설명 도구
CI 서버
(Continuous Integration)
빌드 프로세스를 관리하는 서버 (지속적 통합관리 서버) Jenkins / Hudson
SCM
(Source Code Management)
소스 코드 형상 관리 시스템 SVN / Git
빌드 도구
(Build Tool)
컴파일, 테스트, 정적분석 등을 통해 동작 가능한 소프트웨어 생성 Ant / Maven
테스트 도구
(Test Tool)
작성된 테스트 코드에 따라 자동으로 테스트를 수행해주는 도구로, 빌드 도구의 스크립트에서 실행 Junit / Selenium
테스트 커버리지 도구
(Test Coverage Tool)
테스트 코드가 대상 소스 코드에 대해 어느 정도 커버하는지 분석하는 도구 Emma
인스펙션 도구
(Inspection Tool)
프로그램을 실행하지 않고, 소스 코드 자체로 품질을 판단할 수 있는 정적 분석 도구
코딩 표준 준수 검사, 코드 메트릭 측정, 중복 코드 검사, 코드 인스펙션 검사
CheckStyle / Cppcheck

 

빌드 자동화 도구 - 젠킨스(Jenkins)

  • 젠킨스는 자바(JAVA) 기반의 오픈소스로 가장 많이 사용되는 빌드 자동화 도구이다.
  • 지속적 통합관리(CI)를 가능하게 한다.
  • 서블릿 컨테이너 서버 기반으로 구동되는 시스템이며, CVS, SVN, Git 등 다양한 버전 관리 도구를 지원한다.

 

빌드 자동화 도구 - 그래들(Gradle)

  • 그래들은 그루비(Groovy)와 유사한 도메인 언어를 채용했다.
  • 안드로이드 앱을 만드는 데 필요한 안드로이드 스튜디오의 공식 빌드 자동화 시스템이다.
  • 실행할 처리 명령들을 모아 태스크로 만든 후 태스크 단위로 실행한다.
  • 자바(JAVA), C/C++, 파이썬(Python) 등과 같은 여러 가지 언어를 지원한다.
  • 자바 가상머신(JVM) 위에서 동작하는 동적 스크립트 언어이다.

알고리즘(Algorithm)

  • 알고리즘은 어떠한 문제를 해결하기 위한 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 기법이다.
  • 알고리즘의 표현은 자연어, 순서도, 의사 코드, 프로그래밍 언어를 이용하는 방법이 있다.
  • 프로그래밍 언어가 아니더라도 알고리즘의 표현은 가능하다.

 

알고리즘 기법 (분동탐백) [2020년 3회]

*알고리즘 설계 기법을 묻는 문제가 영어로 나온 적이 있습니다.

기법 설명
할과 정복
(Divide and Conquer)
문제를 나눌 수 없을 때까지 나누고, 각각을 풀면서 다시 병합하여 문제의 답을 얻는 알고리즘
적계획법
(Dynamic Programming)
어떤 문제를 풀기 위해 그 문제를 더 작은 문제의 연장선으로 생각하고, 과거에 구한 해를 활용하는 방식의 알고리즘
욕법
(Greedy)
결정을 해야할 때마다 그 순간에 가장 좋다고 생각되는 것을 해답으로 선택함으로써 최종적인 해답에 도달하는 방식의 알고리즘
트래킹
(Backtracking)
어떤 노드의 유망성 점검 후, 유망하지 않으면 그 노드의 부모 노드로 되돌아간 후 다른 자손노드를 검색하는 알고리즘

 

시간 복잡도에 따른 알고리즘 분류

복잡도 설명 대표 알고리즘
O(1) 상수형 복잡도 해시 함수(Hash Function)
자료 크기 무관, 항상 같은 속도로 작동
알고리즘 수행 시간이 입력 데이터 수와 관계없이 일정
O(logn) 로그형 복잡도 이진 탐색(Binary Search)
문제를 해결하기 위한 단계의 수가 logn번만큼의 수행 시간을 가짐
O(n) 선형 복잡도 순차 탐색(Sequential Search)
입력 자료를 차례로 하나씩 모두 처리
수행 시간이 자료 크기와 직접적 관계로 변함 정비례
O(nlogn) 선형 로그형 복잡도 퀵 정렬(Quick sort),
병합 정렬(Merge sort)
(합병 정렬)
문제를 해결하기 위한 단계의 수가 nlogn번만큼의 수행시간을 가짐
O(n²) 제곱형 주요 처리 루프 구조가 2중인 경우 거품 정렬(Bubble sort), 삽입 정렬(Insertion sort), 선택 정렬(Selection sort)
n크기 작을 때에는 n²이 nlogn보다 빠를 수 있음

 

거품 정렬(Bubble Sort) 알고리즘

  • 거품 정렬은 두 인접한 원소를 검사하여 정렬하는 방법이다.
  • '요소의 개수-1'번 반복하게 되면 모든 숫자가 정렬된다.

거품 정렬(Bubble Sort)

 

삽입 정렬(Insertion Sort) 알고리즘

  • 삽입 정렬은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하며, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다.

삽입 정렬(Insertion Sort)

 

선택 정렬(Selection Sort) 알고리즘

  • 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 정렬되지 않은 부분의 가장 앞의 데이터와 교환해나가는 알고리즘이다.

선택 정렬(Selection Sort)

 


소스 코드 품질 분석

  • 소스 코드 품질 분석은 소스 코드에 대한 코딩 스타일, 설정된 코딩 표준, 코드의 복잡도, 코드 내에 존재하는 메모리 누수 현황, 스레드의 결함 등을 발견하기 위한 활동이다.

 

소스 코드 품질 분석 도구

구분 도구명 설명
정적 분석 도구 pmd JAVA 및 타 언어 소스 코드에 대한 버그, 데드 코드 분석
cppcheck C/C++ 코드에 대한 메모리 누수, 오버플로우 등 문제 분석
SonarQube 소스 코드 품질 통합 플랫폼, 플러그인 확장가능
checkstyle JAVA 코드에 대한 코딩 표준 검사 도구
ccm 다양한 언어의 코드 복잡도 분석 도구, 리눅스, 맥 환경 CLI 형태 지원
cobertura jcoverage 기반의 테스트 커버리지 측정 도구
동적 분석 도구 Avalanche Valgrind 프레임워크 및 STP 기반 소프트웨어 에러 및 취약점 동적 분석 도구
Valgrind 자동화된 메모리 및 스레드 결함 발견 분석 도구

 

맥케이브 회전 복잡도(McCabe Cyclomatic Complexity)

맥케이브 회전 복잡도는 소프트웨어의 제어 흐름을 그래프로 표현하고 소스 코드의 복잡도를 정량적으로 나타내는 지표이다.

 

맥케이브 회전 복잡도 측정 방식

구분 항목 대표 알고리즘
계산식 V(G) = E - N + 2 복잡도 V(G)는 노드(N) 수와 간선(E) 수로 계산
V(G) = P + 1 복잡도 V(G)는 조건 분기문(P)의 수로 계산
그래프 구성 Node 동그라미, 프로세싱 태스크 표현
Edge 실선 화살표, 태스크 간의 제어 흐름 표현

 

맥케이브 회전 복잡도 측정 예시문제

제어 흐름 그래프 맥케이브 회전 수 (McCabe Cyclomatic)
*맥케이브 회전 수 구하는 공식 : V(G) = E - N + 2

V(G) = E - N + 2
      = 화살표 수 - 노드 수 + 2
      = 6 - 4 + 2
      = 4

 


코드 최적화(Code Optimization)

  • 읽기 쉽고 변경 및 추가가 쉬운 클린 코드를 작성하는 것이다.
  • 소스 코드 품질을 위해 기본적으로 지킬 원칙과 기준을 정의하고 있다.

 

배드 코드(Bad Code) 유형

배드 코드 유형 설명
오염 비즈니스 기능을 수행하지 못하는 많은 컴포넌트들이 존재
문서부족 현재 코드와 문서가 불일치함
의미 없는 이름 함수, 클래스, 컴포넌트 이름들이 명확한 의미를 갖지 못하거나 실제 작동과 불일치
높은 결합도 복잡한 연결
아키텍처 침식 아키텍처가 구별되지 않음
외계인 코드
(Alien Code)
아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 어려운 코드
스파게티 코드
(Spaghetti Code)
코드 작동은 정상적으로 하지만, 사람이 파악하기 어려운 코드
알 수 없는 변수명 변수나 메서드에 대한 이름 정의를 알 수 없는 코드
로직 중복 동일한 처리 로직이 중복되게 작성된 코드

 

클린코드(Clean Code)의 작성 원칙 (가단의 중추)

독성 / 순성 / 존성 최소 / 복성 제거 / 상화

 


 

 

 

 

참고※수제비에 나온 약어가 아닌 창조 약어: 분코지
728x90

댓글