💡 정보처리기사 필기 기출(2020-2022) 2과목 총정리!
소프트웨어 테스트 단계
- 단위 테스트 (Unit Test) 개발 후 개발자가 명세서의 내용대로 정확히 구현되었는지 테스트
- Test Stub 인자를 통해 받은 값으로 기능을 수행한 후, 그 결과를 테스트할 모듈에 넘겨주는 역할 (테스트 대상 모듈이 호출하는 하위 모듈 역할)
- Test Driver 필요 데이터를 인자를 통해 넘겨주고, 테스트 완료 후 그 결과값을 받는 역할을 하는 가상의 모듈 (시험 대상 모듈을 호출함)
- 발견할 수 있는 오류 알고리즘 오류에 따른 원치 않은 결과 탈출구 없는 반복문의 사용 틀린 계산 수식에 따른 잘못된 결과
- 통합 테스트 (Integration Test) 시스템을 구성하는 모듈의 인터페이스와 결합을 테스트하는 것 (모듈 간 상호작용)
- 상향식 : 하위 모듈 → 상위 모듈 방향으로 통합
- 최하위 모듈 먼저 구현하고 테스트
- Test Driver 사용
- 하위 모듈을 클러스터로 결합 → 상위 모듈에서 드라이버 작성 → 클러스터 단위로 테스트 진행
- 하향식 : 상위 모듈 → 하위 모듈 방향으로 통합
- 최상위 모듈 먼저 구현하고 테스트
- Test Stub 사용
- 깊이 우선, 넓이 우선 통합법
- 빨리 파악하고자 할 때 사용
- 빅뱅 (한꺼번에)
- 샌드위치 (상향+하향)
- 시스템 테스트 기능(사용자가 요구한거) / 비기능(보안, 성능)
- 인수 테스트 알파(사용자+개발자) / 베타(개발자 빠짐)
- 설치 테스트
프로그램 실행 여부에 따른 분류
- 정적 테스트 프로그램을 실행하지 않고 명세서나 소스 코드를 대상으로 분석하는 테스트
- 동료 검토, 워크 스루, 인스펙션 → FTR 에도 나옴 (정형)
- 동적 테스트 프로그램을 실행하여 오류를 찾는 테스트 소프트웨어 개발의 모든 단계에서 테스트를 수행함
- 화이트 박스 테스트 : 구조 기반 테스트, 모듈 내부 소스 코드를 보면서 수행하는 테스트, 논리적인 모든 경로를 테스트 (동적)
- 논리 흐름도(Logic-Flow Diagram)를 이용
- 모든 문장을 한 번 이상 수행
- 프로그램의 구조를 고려한다.
테스트 종류
- 기초 경로 검사(Base Path Testing)
- 제어 구조 검사(Control Structure Testing) : 조건, 루프, 데이터 흐름 검사
- 블랙 박스 테스트 : 명세 기반 기능 테스트, 사용자의 요구사항 명세를 보면서 수행하는 테스트 (정적)
- 프로그램의 구조를 고려하지 않는다.
- 테스트 과정의 후반부에 적용
테스트 종류
- 동치 분할, 경계값, 원인-효과 그래프, 오류 예측, 비교 검사
테스트 목적에 따른 분류 (회안성구회병)
회복(Recovery) 테스트 / 안전(Security) 테스트 / 성능(Performance) 테스트 / 구조(Structure) 테스트 / 회귀(Regression) 테스트 / 병행(Parallel) 테스트 → 중국의 회안성에 사는 구회병씨
- 회복테스트 - 시스템에 여러 가지 결함을 주어 실패하도록 한 후 올바르게 복구되는지를 확인하는 테스트
- 강도테스트 - stress test 과다한 정보량을 투입
- 성능테스트 - 실시간 성능 테스트, 응답 속도, 처리량 등을 측정
- 구조테스트 - 내부 논리 경로, 코드 복잡도 평가
- 회귀테스트 - 소프트웨어의 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트
- 병행테스트 - 변경전과 후의 프로그램에 동일한 데이터를 입력하여 결과를 비교하는 테스트
- 안전 테스트 - 시스템에 설치된 시스템 보호 도구가 불법적인 침입으로부터 시스템을 보호할 수 있는지를 확인하는 테스트
테스트 시각에 따른 분류
- 검증 : 소프트웨어 개발 과정 테스트 (요구 명세의 기능, 비기능)
- 확인 : 소프트웨어 결과 테스트
소프트웨어 테스트의 원리
- 테스팅은 결함이 존재함을 밝히는 활동이다.
- 완벽한 테스팅은 불가능하다.
- 테스팅은 개발 초기 단계에서부터 시작해야 한다
- 결함 집중
파레토 법칙이 좌우한다.(오류의 80%는 전체 모듈의 20%에서 발견)
결함의 대부분은 소수의 특정한 모듈에 집중되어 존재한다.
- 살충제 패러독스(Pesticide Paradox)
동일한 테스트 케이스를 반복하면 더 이상 새로운 결함이 발견되지 않는 현상
- 테스팅은 정황(Context)에 의존
소프트웨어의 종류나 목표 등에 따라 해당 소프트웨어에 맞는 테스트 방식이 적용되어야 한다.
- 오류 부재의 궤변
거의 모든 결함을 확인 후 제거하였다고 해도 사용자의 요구 또는 비즈니스 목적을 충족시키지 못하는 경우 품질이 높다고 할 수 없다.
소프트웨어 형상 관리
(SCM; Software Configuration Management)
버전관리를 포함하여 프로젝트 진행상황, 빌드와 릴리즈 퍼블리싱까지 모두 관리할 수 있는 통합 시스템
- 형상 감사 : 무결성 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 과정
- 형상 관리 도구 : GIT, CVS, Subversion 등
소프트웨어 버전 관리 (Version Management)
- 가져오기(Import) : 버전 관리가 되지 않은 아무것도 없는 저장소에 처음으로 파일을 복사함
- 인출(Check-Out) : 프로그램 수정을 하기 위해 저장소에서 파일을 받아옴, 버전 관리를 위한 파일도 받아옴
- 체크인(Check-in) : 체크아웃한 파일의 수정을 완료한 후 저장소의 파일을 새로운 버전으로 갱신
- 예치(Commit) : 인출한 파일을 수정한 후 설명을 붙여 저장소에 예치 체크인을 수행할 때 이전에 갱신된 내용이 있는 경우에는 충돌을 알리고 diff 도구를 이용해 수정한 후 갱신 완료
- 동기화(Update) : 커밋 후 저장소에 있는 최신 버전으로 자신의 작업 공간을 동기화
- 차이(Diff) : 새로운 개발자가 추가된 파일의 수정 기록을 확인하면서 이전 개발자가 처음 추가한 파일과 이후 변경된 파일의 차이를 확인
소프트웨어 버전 등록 과정
가져오기(import) → 인출(Check-Out) → 예치(Commit) → 동기화(Update) → 차이(Diff)
소프트웨어 버전 관리 도구
- RCS (Revision Control System)
- 소스 파일 수정을 한 사람으로 제한
- 파일 잠금 방식으로 버전을 관리
- 다른 방향으로 진행된 개발 결과를 합치거나 변경 내용을 추적할 수 있다.
- CVS (Concurrent Versions System)
- RCS 기반의 버전 관리 시스템
- Eclipse 에 통합된 소스 컨트롤 툴
소스 코드 분석 도구
- 정적 분석 도구 작성한 소스 코드를 실행하지 않고 코딩 표준이나, 코딩 스타일, 결함, 오류 등을 확인하는 코드 분석 도구
- PMD, Cppcheck, SonarQube, ccm, Checkstyle 등
- 동적 분석 도구 작성한 소스 코드를 실행해 코드에 존재하는 메모리 누수, 스레드 결함 등 분석
코드 인스펙션
- 정적 테스트에 활용
- 결함을 포함해 모든 것이 표준대로 되어있는지 확인하기 위함
인스펙션 과정
계획 → 사전 교육 → 준비 → 인스펙션 회의 → 수정(수정 사항 있을시 → 계획) → 후속 조치
결함(Fault)의 정의
오류 발생, 작동 실패 등과 같이 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것을 의미
소프트웨어 품질 목표
목표 | 설명 |
---|
정확성(Correctness) | 사용자의 요구 기능을 충족시키는 정도 |
신뢰성(Reliability) | 정확하고 일관된 결과를 얻기 위해 요구된 기능을 오류 없이 수행하는 정도 |
효율성(Efficiency) | 요구되는 기능을 수행하기 위해 필요한 자원의 소요 정도, 자원의 낭비정도 |
무결성(Integrity) | 허용되지 않는 사용이나 자료의 변경을 제어하는 정도 |
사용용이성(Usability) | 사용에 필요한 노력을 최소화하고 쉽게 사용할 수 있는 정도 / 적절한 사용자 인터페이스와 문서를 가지고 있는정도 |
유지보수성(Maintainability) | 사용자의 기능 변경의 필요성을 만족하기 위하여 소프트웨어를 진화하는 것이 가능한 정도 |
유연성(Flexibility) | 소프트웨어를 얼마만큼 쉽게 수정할 수 있는가 하는 정도 |
시험역량(Testability) | 의도된 기능을 수행하도록 보장하기 위해 프로그램을 시험 할 수 있는 정도 |
이식성(Portability) | 다양한 하드웨어 환경에서도 운용 가능하도록 쉽게 수정 될 수 있는 정도 |
재사용성(Reusability) | 전체나 일부 소프트웨어를 다른 목적으로 사용 할 수 있는가 하는 정도 |
상호운용성(Interoperability) | 다른 소프트웨어와 정보를 교환할수 있는 정도 |
디지털 저작권 관리 (DRM, Digital Right Management)
구성요소
- 클리어링 하우스(Clearing House): 저작권에 대한 사용 권한, 라이선스 발급, 사용량에 따른 관리 등을 수행하는 곳
- 콘텐츠 제공자(Contents Provider): 콘텐츠를 제공하는 저작권자
- 패키저(Packager): 콘텐츠를 메타 데이터(데이터의 속성 정보를 설명하는 데이터)와 함께 배포 가능한 형태로 묶어 암호화하는 프로그램
- 콘텐츠 분배자(Contents Distributor): 암호화된 콘텐츠를 유통하는 곳이나 사람 - ex) 멜론
- 콘텐츠 소비자(Customer): 콘텐츠를 구매해서 사용하는 주체 - ex) 멜론 이용자
- DRM 컨트롤러(DRM Controller): 배포된 콘텐츠의 이용 권한을 통제하는 프로그램 - ex) 멜론 플레이어
- 보안 컨테이너(Security Container): 콘텐츠 원본을 안전하게 유통하기 위한 전자적 보안 장치
기술 요소
- 암호화(Encryption): 콘텐츠 밑 라이선스를 암호화하고 전자 서명을 할 수 있는 기술
- 키 관리(key Management): 콘텐츠를 암호화한 키에 대한 저장 및 분배 기술
- 암호화 파일 생성(Pakager): 콘텐츠를 암호화된 콘텐츠로 생성하기 위한 기술
- 식별 기술(Identification): 콘텐츠에 대한 식별 체계 표현 기술
- 저작권 표현(Right Expression): 라이선스의 내용 표현 기술
- 정책 관리(Policy Management): 라이선스 발급 및 사용에 대한 정책 표현 및 관리 기술
- 크랙 방지(Tamper Resistance): 크랙에 의한 콘텐츠 사용 방지 기술
- 인증(Authentication): 라이선스 발급 및 사용의 기준이 되는 사용자 인증 기술
자료구조
- 선형 구조 : 큐, 스택, 리스트, 데크
- 데크 : 양 쪽 끝에서 삽입, 삭제를 모두 허용
- 비선형 구조 : 트리, 그래프
이진 트리 순회
- 너비 우선 탐색 (BFS, Breadth First Search) queue 데이터 구조 사용
- 깊이 우선 탐색 (DFS, Depth First Search) stack 데이터 구조 사용
- 전위 순회(preorder) Root - Left - Right
- 중위 순회(inorder) Left - Root - Right
- 후위 순회(postorder) Left - Right - Root
알고리즘 개발 단계
문제 정의 -> 모델 고안 -> 명세 작성 -> 설계 -> 검증 -> 분석(복잡도 등) -> 구현 -> 테스트 -> 문서화
알고리즘 - 정렬
- 삽입 정렬 (Insertion Sort) O(N^2) 최상 : O(N) 2번 째 값부터 앞의 값들과 비교해서 정렬시킨다 (한 번 삽입하면 pass 1)
- 선택 정렬 (Selection Sort) O(N^2) 1번 째 값부터 뒤에 값들과 비교해서 정렬시킨다 (마지막 값까지 비교 완료되면 pass 1)
- 버블 정렬 (Bubble Sort) O(N^2)
- 힙 정렬 (Heap Sort) O(nlog2n)
- 완전이진트리(complete binary tree)
- 2-WAY 합병 정렬(Merge Sort) O(nlog2n)
- 퀵 정렬 (Quick Sort) O(nlog2n) 최악 : O(n^2)