이론공부/자격증
정보처리기사(개념정리) - 2과목 소프트 웨어 개발
DJ.Kang
2025. 7. 16. 23:39
□ 정렬 알고리즘 시간 복잡도 ☆☆☆☆☆
- 평균 O(n²) : 선삽버
- 평균 O(n log n) : 퀵힙병
정렬 알고리즘 | 최선 (Best) | 평균 (Average) | 최악 (Worst) |
선택 정렬 | O(n²) | O(n²) | O(n²) |
삽입 정렬 | O(n) | O(n²) | O(n²) |
버블 정렬 | O(n²) | O(n²) | O(n²) |
쉘 정렬 | O(n) | O(n^1.5) | O(n²) |
퀵 정렬 | O(n log n) | O(n log n) | O(n²) |
힙 정렬 | O(n log n) | O(n log n) | O(n log n) |
병합 정렬 | O(n log n) | O(n log n) | O(n log n) |
버킷 정렬 | O(d·n) | O(d·n) | O(d·n) |
□ 테스트 ☆☆☆☆☆
- 테스트 유형 분류
- 테스트 목적 : 회복, 안전, 강도, 성능, 구조, 회귀, 병행
- 테스트 기반 : 명세기반, 구조기반, 경험기반
- 테스트 하네스 도구
- 테스트 드라이브
- 테스트 스텁
- 테스트 슈트
- 테스트 케이스
- 테스트 스크립트
- 목 오브젝트
구분 | 테스트 드라이버(Test Driver) | 테스트 스텁(Test Stub) |
대상 | 상위 모듈이 없는 경우 | 하위 모듈이 없는 경우 |
목적 | 하위 모듈 테스트용 | 상위 모듈 테스트용 |
방향 | 하향식 통합 테스트에서 사용 | 상향식 통합 테스트에서 사용 |
역할 | 테스트 모듈을 호출 | 테스트 모듈에 호출됨 |
행동 | 인자를 넘겨주고 결과를 받음 | 결과를 만들어 테스트 모듈에 넘김 |
- 테스트 단계
□ 프로그램 품질관리 ☆☆☆☆☆
- 동료 검토(Peer Review)
- 2~3명이 진행하는 리뷰 형태
- 작성자가 코드를 설명하고 이해 관계자들이 설명을 들으면서 결함을 발견하는 형태로 진행
- 워크스루(Walkthrough)
- 교육 목적이나 문제의 식별등이 목적
- 문제 해결 자체에 중점을 두지 않음
- 미리 준비된 자료를 바탕으로 정해진 절차에 따라 평가
- 오류 조기 검출이 목적
- 검조 자료를 회의 전에 배포하여 사전 검토 후 짧은 시간동안 회의 진행
- 인스펙션(Inspection)
- 오류 발견과 수저에 중점
- 저작자 외의 다른 전문가 또는 팀이 검사하여 오류를 찾아내는 방식
- 워크스루를 발전시킨 형태
□ 디지털 저작권 관리(DRM) ☆☆☆☆☆
- 기술요소
- 암호화 : 콘텐츠 및 라이선스 암호화
- 키관리 : 콘텐츠를 암호화한 키에 대한 저장 및 배포 기술
- 식별기술 : 콘텐츠에 대한 식별체계 표현 기술
- 저작권 표현: 라이선스의 내용 표현 기술
- 정책 관리 : 라이선스 발급 및 사용에 대한 정책표현
- 크랙 방지 : 크랙에 의한 콘텐츠 사용방지 기술
- 인증 : 라이선스 발급 및 사용의 기준이 되는 인증 기술
- 인터페이스 : 상이한 DRM 플랫폼 간의 상호 호환성 인터페이스
- 사용권한 : 콘텐츠의 사용에 대한 권한을 관리하는 기술 요소
- 구성요소
- 콘텐츠 분배자(Contents Distributor) : 암호화된 콘텐츠를 유통하는 곳 또는 사람
- 패키저(Packager) : 콘텐츠를 메타데이터와 함께 배포가능한 형태로 묶어 암호화
- 클리어링 하우스(Clearing House) : 키 관리 및 라이센스 발급 관리
- DRM 컨트롤러(DRM Controller) : 배포된 콘텐츠의 이용권한을 통제
□ 화이트박스 블랙박스 테스트 ☆☆☆☆☆
- 화이트 박스 테스트
- 프로그램 내부 구조, 동작을 디테일하게 검사
- 내부 소스코드를 테스트 하는 기법
- 개발자 관점
- 문장검증, 선택검증, 경로검증, 조건검증
- 블랙 박스 테스트
- 소프트웨어 내부 구조나 작동 원리를 모르는 상태에서 동작을 검사
- 내가 원하는 기능이 예측한 대로 정상 동작하는지를 확인
- 사용자 관점
- 동등 분할 기법, 경계값 분석 기법, 오류 예측 기법, 원인 결과 그래프 기법, 의사결정 테이블 테스팅, 상태 전이 테스팅
□ 소프트웨어 품질 목표 ☆☆☆☆☆
- 무결성(Integrity) : 시스템이 프로그램이나 데이터에 대한 허용되지 않거나 잘못된 접근을 막는 정도
- 신뢰성(Reliability) : 정해진 상황에서 언제든 필요한 기능을 수행할 수 있는 시스템의 능력
- 사용성(Usability) : 사용자가 시스템을 배우고 사용하는 데 있어서의 용이함
- 효율성(Efficiency): 메모리와 실행 시간 같은 시스템 리소스의 최소 사용
- 정확성(Correntness) : 시스템의 사양과 설계, 구현에 있어서 오류가 없는 정도
- 이식성(Adaptability) : 시스템을 변경하지 않고 설계된 환경에서 뿐만 아니라 다른 응용 분야 등 에서도 사용될 수 있는 정도
- 정밀성(Accuracy) : 구성된 시스템에 오류가 없는 정도
- 견고성(Robustness) : 시스템이 잘못된 입력이나 악조건에서도 기능을 계속 수행할 수 있는 정도
□ 전위식, 후위식 변환 및 계산방법 ☆☆☆☆☆
- 전위식 변환
- 중위식을 뒤에서부터 읽는다.
- 피연산자는 바로 출력(앞에 적는다)
- 연산자는 Stack의 Top에 있는 연산자와 비교해서 Top 연산자의 우선순위가 높으면 Top을 pop하고 다시 비교 낮으면 push
- 변환 [ A * ( B + C ) - D ]
남은식 | 현재 | 출력 | 스택 | 비고 |
A * ( B + C ) - D | D | [ ] | [ ] | 피연산자 바로 출력 |
A * ( B + C ) - | - | [ D ] | [ - ] | 연산자 push |
A * ( B + C ) | ( B + C ) | [ +BCD ] | [ - ] | 괄호가 닫힐 때 까지 push 후 pop |
A * | * | [ +BCD ] | [ - * ] | 스택의 Top( - ) 우선순위가 낮으므로 psuh |
A | A | [ A+BCD ] | [ - * ] | 식이 끝났으므로 모두 pop |
[ -*A+BCD ] |
- 계산 [ -*A+BCD ]
- 오른쪽에서 왼쪽으로 읽는다.
- 피연산자는 push
- 연산자를 만나면 피연산자 두개를 꺼내서 계산(Top이 좌항)하고 그 덩어리를 push
현재 | 스택 | 연산 | 연산 후 스택 |
D | [ ] | [ D ] | |
C | [ D ] | [ D, C ] | |
B | [ D, C ] | [ D, C, B ] | |
+ | [ D, C, B ] | B + C | [ D, (B + C) ] |
A | [ D, (B + C) ] | [ D, (B + C), A] | |
* | [ D, (B + C), A] | A * (B + C) | [ D, (A * (B + C)) ] |
- | [ D, (A * (B + C)) ] | A * (B + C) - D | [ A * (B + C) - D ] |
- 후위식 변환
- 중위식을 좌에서 우로 읽는다.
- 피연산자는 바로 출력
- 연산자는 Top과 비교 현재 연산자의 우선순위가 낮거나 같으면 Top을 pop 하고 다시비교 높으면 push
□ 소스코드 품질분석 도구 ☆☆☆☆
- 정적 분석 도구 : pmd, cppcheck, SonarQube, ccm, SonarQube, FindBug, corbertura 등
- 동적 분석 도구 : valance, Avalanche, Valgrind
□ NS Chart ☆☆☆
- 구조적 프로그램의 순차, 선택, 반복의 구조를 사각형으로 도식화하여 알고리즘의 논리적 기술에 중점을 둔 도형식 표현 방법
- 조건이 복합되어있는 곳의 처리를 시각적으로 명확히 식별하는 데 적합
- 제어구조 :순차, 선택및 다중 선택, 반복
- 박스 다이어그램이라고도 한다
□ 소프트 웨어 버전 관리도구 ☆☆☆
- 분산 저장소 방식: 하나의 원격 저장소와 개발자 PC의 로컬 저장소에 저장 ex) git
- 공유 폴더 방식 : 로컬 컴퓨터의 공유 폴더에 저장되어 관리
- 클라이언트/서버 방식 : 중앙 시스템(서버)에 저장되어 관리 방식
□ 인터페이스 구현 검증 도구 ☆☆☆
- xUnit : Java, C++ 등 다양한 언어를 지원하는 단위 테스트 프레임워크
- STAF : 서비스 호출 및 컴포넌트 재사용 등 환경을 지원하는 테스트 프레임워크
- FitNesse : 웹 기반 테스트케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크
- NTAF : FitNesse의 장점인 협업 기능과 STAF의 장점인 재사용 및 확장성을 통합한 네이버의 테스트 자동화 프레임워크
- Selenium : 다양한 브라우저 및 개발 언어를 지원하는 웹 애플리케이션 테스트 프레임워크
- Watir : Ruby를 사용하는 애플리케이션 테스트 프레임워크
□ 테스트 케이스의 구성요소 ☆☆
- 식별자(항목 식별자, 일련번호)
- 테스트 항목(테스트 대상 모듈 또는 기능)
- 입력 명세(입력 데이터 또는 테스트 조건)
- 출력 명세(테스트 케이스 수행 시 예상되는 결과)
- 환경 설정(필요한 하드웨어나 소프트웨어 환경)
- 특수 절차 요구(테스트 케이스 수행 시 특별히 요구되는 절차)
- 의존성 기술(테스트 케이스 간의 의존성)
□ 해싱 함수(Hashing Function) ☆☆
- 제산법 : 해시표로 나눈 나머지 계산
- 제곱법 : 큰 수를 제곱수 단위로 분할하여 계산
- 중첩(폴딩)법 : 수를 여러 부분으로 나누어 각각 계산 후 다시 합치는 방법
- 숫자분석법 : 숫자의 자릿수별 특성을 분석하여 계산을 단순화
- 기수변환법 : 다른 진수로 변환하여 계싼
- 무작위방법 : 임의의 수나 값(난수)을 이용해 문제를 해결하거나 근사하는 방법
□ 인터페이스 보안 ☆☆
- 네트워크 영역
- IPSec : IP계층에서 무결성과 인증을 보장하는 인증헤더와 암호화를 이용해 보안서비스 제공
- SSL : 상호 인증 및 전송 시 데이터 무결성을 보장
- S-HTTP : 웹상에서 클라이언트와 서버간의 메세지를 암호화 하여 전송
□ 반정규화 유형 중 중복 테이블 추가 방법 ☆☆
- 집계 테이블 추가
- 중복 테이블 추가
- 이력 테이블 추가
- 부분 테이블 추가
- 진행 테이블 추가
□ SPCIE 모델의 레벨 ☆
레벨 | 단계 | 설명 |
레벨 5 | 최적(optimizing) 단계 | 정의된 프로세스와 표준 프로세스가 지속적으로 개선되는 단계 |
레벨 4 | 예측(predictable) 단계 | 표준 프로세스 능력에 대하여 정량적인 이해와 성능이 예측되는 단계 |
레벨 3 | 확립(established) 단계 | 표준 프로세스를 사용하여 계획되고 관리된 단계 |
레벨 2 | 관리(managed) 단계 | 프로세스가 정해진 절차에 따라 이루어져 산출물을 내며, 모든 작업이 계획되고 추적되는 단계 |
레벨 1 | 수행(performed) 단계 | 해당 프로세스의 목적은 달성하지만 계획되거나 추적되지 않은 단계 |
레벨 0 | 불완전(incomplete) 단계 | 프로세스가 구현되지 않거나 프로세스 목적을 달성하지 못한 단계 |
□ 응집력 ☆☆
기능적(Functional) > 순차적(Sequential) > 교환적(Communicational)> 절차적(Procedural)
> 시간적(Temporal) > 논리적(Logical) > 우연적(Coincidental)