정처기 필기: 2과목 - 소프트웨어 개발

윤뿔소·2024년 2월 16일
0

정보처리기사

목록 보기
4/7

자료구조

  1. 시간 복잡도 n^2 정렬 알고리즘

    • 버블 정렬 (Bubble Sort): 인접한 두 요소를 비교하여 필요에 따라 교환하는 알고리즘.
      => 얘는 1 Pass마다 큰 값이 뒤로 감.
    • 선택 정렬 (Selection Sort): 가장 작은 요소를 선택하여 앞으로 이동시키는 알고리즘.
      => 얘는 1 Pass마다 작은 값이 맨앞으로 감.(전체 배열 비교 후 작은 값이 맨앞으로)
    • 삽입 정렬 (Insertion Sort): 각 요소를 이미 정렬된 배열에 삽입하여 정렬하는 알고리즘.
      => 얘는 1 Pass마다 작은 값이 큰 값보다 앞으로 감.(정렬된 배열 속에 존재)
  2. 자료 구조

    • 선형 구조: 배열, 연결 리스트, 스택, 큐 등 요소들이 선형적으로 배치된 구조
    • 비선형 구조: 트리, 그래프 등 요소들이 계층적이지 않은 구조
    • 파일 구조 : 순차파일, 색인파일, 직접파일
  1. 스택

    • 후입 선출 (LIFO, Last In First Out) 원칙에 따라 데이터를 저장하고 접근하는 자료 구조
  2. 깊이 우선 탐색 순회

    • 전위 순회 (Pre-order Traversal)
      루트, 왼쪽 서브트리, 오른쪽 서브트리 순서로 탐색
    • 중위 순회 (In-order Traversal)
      왼쪽 서브트리, 루트, 오른쪽 서브트리 순서로 탐색, 루트가 중간에 있어야함. 서브트리가 부모라면 그 자식 서브트리로 가서 다시 해야함.
    • 후위 순회 (Post-order Traversal)
      왼쪽 서브트리, 오른쪽 서브트리, 루트 순서로 탐색
  3. 깊이 우선 탐색 (DFS, Depth-First Search)

    • 그래프의 모든 정점을 탐색하는 알고리즘으로, 가능한 멀리까지 이동한 후 되돌아와서 다른 경로를 탐색하는 방식.
  4. 정규법 : 개어려음..

패키징 도구

고려사항 및 구성 요소

패키징 도구는 불법 복제나 라이센스 보호 등을 위해 쓴다. 이것만 알아둬도 추론 가능!

  • 사용자에게 배포되는 소프트웨어임을 고려하여 반드시 내부 콘텐츠에 대한 암호화 및 보안을 고려한다.
  • 다양한 이기종 콘텐츠 및 단말기 간 DRM 연동을 고려한다.
  • 사용자 편의성을 위한 복잡성 및 비효율성 문제를 고려한다.
  • 제품 소프트웨어에 적합한 암호화 알고리즘을 적용하여 범용성에 지장이 없도록 고려한다.
  • 구성 요소 : 암호화(Encryption), 키 관리(Key Management), 암호화 파일 생성(Packager), 식별 기술, 저작권 표현, 정책 관리, 크랙 방지, 인증
    => 패키징 도구는 불법 복제를 막는다는 것만 알면 추론 가능

패키징 후 DRM 구성 인원들

디지털 권리 관리(Digital rights management, DRM)는 출판자 또는 저작권자가 그들이 배포한 디지털 자료나 하드웨어의 사용을 제어하고 이를 의도한 용도로만 사용하도록 제한하는 데 사용되는 모든 기술들을 지칭하는 용어.
=> 걍 저작권 + SW 관리/유통 과정임.

  • 콘텐츠 제공자(Contents Provider): 콘텐츠를 제공하는 저작권자
  • 콘텐츠 분배자(Contents Distributor): 쇼핑몰 등으로 암호화된 콘텐츠 제공(분배)
  • 패키저(Packager): 콘텐츠를 메타 데이터와 함께 배포 가능한 단 위로 묶는 기능
  • 보안 컨테이너(Security Container): 원본을 안전하게 유통하려는 전자적 보안 장치
  • DRM Controller: 배포된 콘텐츠의 이용 권한을 통제
  • 클리어링 하우스(Clearing House): 키 관리 및 라이선스 발급 관리

SW 테스트=검사

테스트 방식

  • 단위 테스트: 개발자가 원시코드를 대상으로 각각의 단위를 다른 부분과 연계되는 부분은 고려하지 않고 단위 자체에만 집중하여 테스트.
    => 모듈 간 상호작용 당연히 못보고, '개별 모듈을 시험~' 이런 식으로 개별(Unit)이 쓰여지면 무조건 이거.
  • 인수 테스트: SW 제품에 대한 요구사항이 제대로 이행되었는지 점검, 알파(개발자관점)/베타 테스트가 나오면 무조건 이거.

  • 하향식 테스트 통합: 상위 컴포넌트부터 테스트 하면서 통합하기.
    => 스텁 사용. / 우선 통합법, 깊이 우선 통합법, 넓이 우선 통합법 등.
  • 상향식 테스트 통합: 하위 컴포넌트부터 테스트 하면서 통합하기.
    => 드라이버 사용.
  • 테스트 스텁(Stub): 테스트 대상 코드와 연동하여 호출되는 메소드나 함수를 대신하여 동작하는 가짜 객체 또는 메소드. 걍 미완성 모듈 대신 쓸 수 있는 허수아비라고 생각하면 좋음.
    => 상위 - 하위 모듈 방향으로 통합 테스트를 진행 하는 하향식 테스트에서 사용.
  • 테스트 드라이버(Driver): 테스트 대상 코드를 호출하여 테스트하는 코드 또는 객체. 테스트 대상을 제어하고 동작시키는데 사용되는 도구를 의미.
    => 하위 - 상위 모듈로 통합하면서 테스트하는 상향식 테스트에서 사용.

그 외 빅뱅 통합(한꺼번에 테스트) 등이 있음.

블랙박스 테스트

특정 기능을 수행하는지 입증하는 테스트. 거의 마무리 단계에서 하는 테스트

  • 경계값 분석: 경계값을 테스트해 분석하는 기법. 최소, 중간(다수일수도), 최대 경계값을 넣어 분석하는 것임.
    ex) 100 만점에 - A:81~100, B:60~80이라면 유의미한 경계값은 59, 60, 61, 79, 80, 81, 99, 100, 101 등이 있다.

화이트박스 테스트는? 모듈의 원시 코드를 오픈시킨 상태에서 코드의 논리적 모든 경로를 테스트하는 방법. 기초 경로 검사(제어 흐름 그래프를 분석하여 선형 독립 실행 경로 집합을 찾음), 제어 구조 검사, 조건, 루프 등 함수, 변수 등의 소스 코드 관련 테스트를 담당한다.

테스트 용어

  • 살충제 패러독스(Presticide Paradox): 동일한 테스트 케이스로 반복 테스트시 결함을 발견할 수 없으므로 주기적으로 테스트 케이스를 리뷰하고 개선해야 함.
  • 파레토의 법칙: 2 대 8 법칙, 20%의 원인이 80%의 결과를 차지한다. SW에서는 20% 코드에서 80%의 에러가 뜬다.
    => 결함 집중: 애플리케이션 결함의 대부분은 소수의 특정한 모듈에 집중되어 존재.
  • 테스트 오라클: 테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교하는 기준 및 기법
    참, 샘플링, 휴리스틱, 일관성 검사 등

Tools(도구) 종류 정의

빌드, 형상관리 등 도구들은 종류를 잘 보자.

빌드

효율적으로 파일을 도출하기 위함.

  • Jenkins : JAVA 기반 빌드 도구
  • Makefile
  • Ant : 아파치 재단에서 개발한 자바의 공식적인 빌드 도구
  • Maven : 아파치 재단에서 개발, Ant 대안으로 개발되었음
  • Gradle : Ant, Maven 의 보완으로 개발된 빌드 도구(안드로이드 스튜디오 주 빌드 도구), JVM

형상관리

Git처럼 어떠한 변경사항을 기록으로서 남기기 위함. 개발 프로세스에서 생산되거나 사용되는 작업 산출물, 작업 산출물들의 집합체.
대표적인 소프트웨어 형상항목 : 프로젝트 요구 분석서, 운영 및 설치 지침서, 요구사항 명세서, 설계/인터페이스 명세서, 테스트 설계서, 소프트웨어 품질보증, 형상관리, V&V 계획서와 같은 계획서, 코드 모듈 (소스와 오브젝트 모두)

그 외 짜잘

소프트웨어 품질 측정 시 관점 별 분류

  • 사용자 관점 : 제품의 신뢰성, 효율성, 사용 용이성, 간결성 등
  • 개발자 관점 : 검증 가능성, 유지보수성, 이식성, 무결성, 사용성 등
  • 프로젝트 관리자 관점 : 프로세스의 생산성, 제어 용이성

RCS(Revision Control System)

  • CVS와의 차이점은 소스 파일의 수정을 한 사람만으로 제한한다.
  • 다수의 사용자가 동시에 파일 수정을 할 수 없도록 파일 잠금 방식으로 버전을 관리하는 도구이다.
  • 다른 방향으로 진행된 개발 결과를 합치거나 변경 내용을 추적할 수 있다.

SVN 명령어

  • check-ingit push와 같이 저장소에 수정한 파일 갱신.
  • check-outgit pull과 같이 저장소 파일 불러오기(인출)

저장소 입장에서 생각하면 된다. 저장소 입장에서 check-out은 저장소의 데이터가 나가는 거니까!

Mccabe 순환(Cyclomatic)복잡도 계산 방식

  • 복잡도 = 화살표 수 - 노드 수 + 2(제어 흐름 그 래프를 통해 파악)
  • 복잡도 = 영역 수(폐 구간)+ 1(제어 흐름 그래프를 통해 파악)
  • 복잡도 = 의사 결정수 + 조건 수 + 1(프로그램 코 드상에서 파악, 제어흐름도를 그리기 어려운 경우 활용한다.)
    6(화살표) - 4(노드) + 2 = 4

소스코드 품질분석 도구

  • 정적
    pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura, FindBugs
  • 동적
    Avalanche, Valgrind 등
    => 동적만 보자

외계인코드(Alien Code)

아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 어려운 프로그램을 의미한다.

profile
코뿔소처럼 저돌적으로

0개의 댓글