선택정렬 : O(n^2)
삽입정렬 : O(n^2)
버블정렬 : O(n^2)
합병정렬 : O(Nlog2N)
노드와 트리
- 루트 노드(root node) : 부모가 없는 노드. 트리는 하나의 루트 노드만을 가진다.
- 단말 노드(leaf node) : 자식이 없는 노드이다.
- 내부(internal) 노드 : 리프 노드(단말노드) 가 아닌 노드.
- 링크(link) : 노드를 연결하는 선 (edge, branch 라고도 부름).
- 형제(sibling) : 같은 부모를 가지는 노드.
- 트리의 차수(degree of tree): 트리의 최대 차수
· 디지털 저작권 관리의 기술 요소 ( DRM; Digital Right Management )
· 키 관리(Key Management) : 콘텐츠를 암호화한 키에 대한 저장 및 분배 기술
· 암호화 파일 생성(Packager) : 콘텐츠를 암호화된 콘텐츠로 생성하기 위한 기술
· 식별 기술(Identification) : 콘텐츠에 대한 식별 체계 표현 기술
· 저작권 표현(Right Expression) : 라이선스의 내용 표현 기술
· 정책 관리(Policy Managemnet) : 라이선스 발급 및 사용에 대한 정책 표현 및 관리 기술
· 크랙 방지(Tamper Resistance) : 크랙*에 의한 콘텐츠 사용 방지 기술
. 암호화(Encryption) : 콘텐츠 및 라이선스를 암호화하고 전자 서명할 수 있는 기술
· 인증(Authentication) : 라이선스 발급 및 사용의 기준이 되는 사용자 인증 기술
전위 순위 (Preorder) : Root - Left - Right (위 ~왼~오른쪽)
중위순위 (Inorder) : Left - Root - Right (왼쪽~ 위 ~ 아래)
후위순위 (Postorder) : Left - Right - Root (밑에서 위로)
테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견된다는 법칙
> Pareto 법칙
<알고리즘 시간 복잡도>
알고리즘 시간복잡도 O(1) > 알고리즘 수행시간이 입력 데이터 수와 관계없이 일정
비례하지 않는(항상 일정한) O(1)
로그에 비례하는 O(log2^n)
정비례하는(선형) O(n)
로그*변수에 비례하는(선형 로그) O(nlog2^n)
제곱에 비례하는 O(n^2)
세제곱에 비례하는 O(n^3)
지수 비례하는 O(2^n)
팩토리얼에 비례하는 O(n!)
O(n)은 선형 복잡도(linear complexity)라고 부르며, 입력값이 증가함에 따라 시간 또한 같은 비율로 증가하는 것을 의미한다.
O(log n)은 로그 복잡도(logarithmic complexity)라고 부르며, Big-O표기법중 O(1) 다음으로 빠른 시간 복잡도를 가진다.
O(n2)은 2차 복잡도(quadratic complexity)라고 부르며, 입력값이 증가함에 따라 시간이 n의 제곱수의 비율로 증가하는 것을 의미한다.
O(1)는 일정한 복잡도(constant complexity)라고 하며, 입력값이 증가하더라도 시간이 늘어나지 않는다.
O(1) : 상수형 복잡도 (해시 함수)
O(logN) : 로그형 복잡도 (이진 탐색)
O(N) : 선형 복잡도 (순차 탐색)
O(NlogN) : 선형 로그형 복잡도 (퀵 정렬, 병합정렬)
O(N^2) : 제곱형 (거품 정렬, 삽입 정렬, 선택 정렬)
개발자의 장소에서 사용자가 개발자 앞에서 행하는 기법이며, 일반적으로 통제된 환경에서 사용자와 개발자가
함게 확인하면서 수행되는 검사
> 알파검사
선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법 ,
개발자 없이 고객의 사용 환경에 소프트웨어를 설치하여 검사를 수행
> 베타테스트
화이트박스 테스팅 (White Box Testing ) 의 종류 : Condition Testing, Loop Testing, Data Flow Testing
Source Code 의 모든 문장을 한번 이상 수행함으로서 진행된다.
모듈 안의 작동을 직접 관찰 할 수 있다.
산출물의 각 기능별로 적절한 프로그램의 제어구조에 따라 선택, 반복 등의 부분들을 수행함으로써 논리적 경로 점검을 한다.
EAI 구축유형 : 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달 연계 통합등 상호연동이 가능하게 해주는 솔루션
Point- to-Point : 가장 기본적인 애플리케이션 통합 방식 1:1로 연결
Hub & Spoke : 단일 접점인 허브 시스템을 통해 데이터 전송하는 중앙 집중형 방식
Message Bus : 애플리케이션 사이에 미들웨어를 두어 처리하는 방식
Hybrid : Hub & Spoke 와 Message Bus 혼합 방식
SMPT : 타인에게 메일을 보낼 때 그 매일은 SMPT로 전송 > SMPT서버에서 프로그램을 구동하여 해당 메일 주소로 이메일을 보냄
< 인터페이스 보안을 위한 네트워크 영역에 적용될 수 있는 솔루션 >
IPsec (IP security) : 네트워크 계층에서 IP 패킷 단위의 데이터 변조 방지 및 은닉 기능을 제공하는 프로토콜
SSL (Secure Sockets Layer) : TCP/IP 계층과 애플리케이션 계층 사이에서 인증 , 암호화 , 무결성을 보장하는 프로토콜
S-HTTP(Secure Hypertext Transfer Protocol) : 클라이언트와 서버 간에 전송되는 모든 메시지를 암호화 하는 프로토콜
반정규화 중복테이블 추가방법
- 진행 테이블 추가 / 집계 테이블 추가 / 특정 부분만을 포함하는 테이블 추가
처리량감소, 속도향상을 위해 저장공간을 투자하는 것
(집)계 테이블 추가 - sum,avg 등의 계산 미리 수행
(중)복 테이블 추가 - 서버 분리 또는 업무 구별
(이)력 테이블 추가 - 레코드 중복 저장
(부)분 테이블 추가 - 접근 시도가 많은 자료만 모아두기
(진)행 테이블 추가 - A에 접근하기위해 다수의 테이블을 거칠 경우 간소화
<정적 분석 도구>
pmd : 소스 코드에 대한 미사용 변수 최적화안된 코드 등 결함을 유발할 수 있는 코드 검사
cppcheck : C/C++ 코드에 대한 메모리 누수 오버플로우 등 분석
SonarQube : 중복 코드 복잡도 코딩 설계 등을 분석하는 소스 분석 통합 플랫폼
checkstyple: 자바 코드에 대해 소스코드 표준을 따르고 있는지 검사
ccm : 다양한 언어의 코드 복잡도를 분석
cobertura : 자바 언어의 소스코드 복잡도 분석 및 테스트 커버리지 측정
<동적 분석 도구 >
Avalanche : Valgrind 프레임워크 및 STP 기반 / 프로그램 결함 및 취약점 분석
valgrind: 프로그램 내에 존재하는 메모리 및 쓰레드 결함 분석
소프트웨어 품질 측정 (개발자 관점)
정확성 (correctness): 시스템의 사양과 설계, 구현에 있어서 오류가 없는 정도
신뢰성 (reliability): 정해진 상황에서 언제든지 필요한 기능을 수행할 수 있는 시스템의 능력 - 고장 사이의 시간
효율성 (efficiency): 메모리와 실행 시간 같은 시스템 리소스의 최소 사용
무결성 (integrity): 시스템이 프로그램이나 데이터에 대한 허용되지 않거나 잘못된 접근을 막는 정도. 무결성의 기본 개념에는 데이터의 적절한 접근을 보장할 뿐만 아니라 권한이 없는 사용자의 접근 제한 기능이 포한된다. 즉, 병렬 데이터를 갖는 데이블은 병렬로 변경되고 날짜 필드는 타당한 날짜만을 포함하는 식이다
이식성
사용성
상호운용성
유용성(usability): 사용자가 시스템을 배우고 사용하는 데 있어서의 용이함
견고성(robustness): 시스템이 잘못된 입력이나 악조건에서도 기능을 계속해서 수행할 수 있는 정도
적응성(adaptablility): 시스템을 변경하지 않고 설계된 환경에서 뿐만 아니라 다른 응용 분야나 환경에서도 사용될 수 있는 정도
<인터페이스 구현 검증도구>
xUnit : Java, C++ 등 다양한 언어 지원하는 단위 테스트 프레임워크
STAF : 서비스 호출 및 컴포넌트 재사용 등 환경 지원하는 테스트 프레임워크
각 테스트 대상 분산 환경에 데몬을 사용하여 테스트 대상 프로그램을 통해 테스트를 수행하고 , 통합하여 자동화하는
검증도구
FitNesse : 웹 기반 테스트케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크
NTAF : FitNesse의 장점인 협업 기능과 STAF의 장점인 재사용 및 확장성을 통합한 네이버의 테스트 자동화 프레임워크이다.
Selenium : 다양한 브라우저 및 개발 언어 지원하는 웹 애플리케이션 테스트 프레임워크
Watir : Ruby를 사용하는 애플리케이션 테스트 프레임워크
Ruby : 인터프리터 방식의 객체지향 스크립트 언어
ISO/IEC 9126의 소프트웨어 품질 특성 중 기능성(Functionlity)의 하위 특성
적합성 , 정확성 , 상호 운용성 ,보안성 , 준수성
( 학습성은 사용성(Usability)의 하위 특성이다.)
ISO/IEC 9126 제품특성
기능성 : 적합성 정확성 상호운용성 보안성 준수성
신뢰성 : 성숙성 결함허용성 복구성
사용성 : 이해성 학습성 운용성 준수성
효율성 : 시간반응성 자원효율성 준수성
유지보수성 : 분석성 변경성 안정성 시험성 준수성
이식성 : 적응성 설치성 공존성 대체성 준수성
국제 제품 품질 표준
- ISO/IEC 9126 : 품질·특성 정의
- ISO/IEC 14598 : 품질 향상 및 품질 선정 기준 제공
- ISO/IEC 12119 : 품질 요구사항 및 테스트 국제 표준
- ISO/IEC 25000 : 소프트웨어 품질 평가 통합 모델, 4+1 구조
국제 프로세스 품질 표준
- ISO/IEC 9001 : 품질 보증
- ISO/IEC 12207 : 체계적 관리
- ISO/IEC 15504(SPICE) : 프로세스 평가 및 개선으로 품질 향상
- CMMI : 기존 CMM 모델 통합, ISO/IEC 15504(SPICE) 준수
소프트웨어 공학
- 브룩스 법칙 : 인력 추가는 생산성 향상이 아닌 방해
- 파레토 법칙 : 소프트웨어 모듈 20%에서 80%의 결함 발견
- 롱테일 법칙 : 80% 다수가 20% 소수보다 뛰어난 가치 창출(파레토 반대)
지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. > Brooks의 법칙
동일 테스트 케이스로 동일 테스트 반복 시 더 이상 결함이 발견되지 않은 현상 > 살충제 페러독스 Pesticide Paradox
결함을 모두 제거해도 사용자 요구사항을 만족시키지 못하면 해당 소프트웨어는 품질이 높다고 말할 수 없다. >
오류 - 부재의 궤변 Absence of Errors Fallacy
소프트웨어 형상 관리 > 개발과정에서 소프트웨어의 변경사항을 관리하기 위해 개발된 일련의 활동.
동치분할검사 : 입력자료에 초점을 맞춰 케이스를 만들고 검사하는 방법 (블랙박스 테스트 종류)
알파 테스트 : 개발자의 장소에서 사용자가 개발자 앞에서 행하는 기법 (인수테스트)
베타 테스트 : 선정된 최종 사용자가 여러명의 사용자 앞에서 행하는 테스트기법 (인수테스트)
형상검사 (구성검토, 검사 ) : 구성요소 , 목록, 유지보수를 위한 모든 사항이 표현 되었는가 검사
하향식 통합에 있어서 모듈 간의 통합 시험을 위해 일시적으로 필요한 조건만을 가지고 임시로 제공되는 시험용 모듈
: Strub ( 스텁 )
상향시 통합시 상위 모듈이 없으므로, 상위 모듈 역할을 하는 테스트 드라이버(Driver)를 이용
: Driver
특정 작업을 수행하는, 이름이 있는 PL/SQL BLOCK
: Procedure
첫 번째 집합의 임의의 한 원소가 두 번째 집합의 오직 한 원소에만 대응하는 관계
: Function
<패키징 고려사항>
- 사용자의 운영체제, CPU, 메모리 등에 필요한 최소 환경 정의
- UI는 편의성, 직관성을 고려해야하고 매뉴얼과 일치시켜 패키징
- 소프트웨어와 하드웨어가 함께 관리될 수 있도록 Managed Service 형태로 제공
- 암호화, 모듈화하여 배포(다양한 기종에서 사용이 가능해야함)
패키지 소프트웨어의 일반적인 제품 품질 요구사항 및 테스트를 위한 국제 표준
● 소프트웨어 제품의 품질
● ISO/IEC 9126의 품질모델 준수
● 테스트 절차 규정
> ISO/IEC 12119
<선택정렬>
선택 정렬은 데이터 배열에서 가장 작은 데이터를 선택하여 앞으로 보내는 정렬
형상관리 도구의 기능
- 체크아웃 / 체크인
- 커밋
- 수정
형상 관리 도구의 종류
CVS : 가장 오래된 형상관리 도구 , 중앙 집중서버 저장소를 두고 버전 관리를 실행 및 파일 단위의 변경사항 관리
SVN : 중앙 집중형 서버 방식이지만 CVS의 단점을 보완해 가장 널리 사용되고 있는 도구
Git : 공개 소프트웨어 커뮤니티 중심으로 사용 저변에 많이 확대 , 분산형 방식으로 필요에 따라 중앙 집중형 방식으로도
운영 SVN이나 CVS 와 다른 명령어가 있어 혼란 야기
블랙박스 테스트 유형
- 동등 (동치) 분할 검사 : 입력조건에 유효한 값과 무효한 값을 균등하게 하여 테스트 케이스를 설계하는 방법
- 경계값 분석 : 입력 조건의 경계에서 오류가 발생할 확률이 높기 때문에, 입력 조건의 경계값을 테스트 케이스로 설계하는 방법
- 원인 - 효과 그래프 검사 : 입력 데이터 간의 관계와 출력에 미치는 영향을 분석 , 효용성이 높은 테스트 케이스를
설계
- 오류 예측 검사 : 과거의 경험이나 확인자의 감각에 의존하는 테스트 케이스 설계방법
- 비교검사 : 여러 버전의 프로그램에 동일한 자료를 제공해서 테스트 하는 방법
- 조건, 루프 검사
화이트 박스 테스트 유형
- 기초 경로 검사
- 제어 구조 검사
* 조건검사 (Condition Testing)
* 루프검사 (Loop Testing)
* 데이터 흐름 검사
문장검증 : 프로그램의 모든 문장이 적어도 한번씩 수행되는 검증기준
선택검증 : 선택하는 부분만 검증
경로검증 : 수행 가능한 모든 경로 검사
조건검증 : 문장 내 조건식을 조사하는 기준
소프트웨어 품질 목표 중 주어진 시간동안 주어진 기능을 오류없이 수행하는 정도를 나타낸 것 은?
> 신뢰성
소프트웨어 품질
기능성 : 사용자 요구사항을 정확하게 만족하는 기능을 제공하는지 여부
신뢰성 : 요구된 기능을 정확하고 일관되게 오류없이 수행할 수 있는 정도
사용성 : 사용자와 컴퓨터 사이에 발생하는 어떠한 행위에 대해 사용자가 정확하게 이해하고 사용하며 향후 다시 사용하고 싶은 정도
효율성 : 요구하는 기능을 할당된 시간동안 한정된 자원으로 얼마나 빨리 처리할 수 있는지 정도
유지 보수성 : 환경 변화 or 새 요구사항 발생 시 소프트웨어 개선 및 확장할 수 있는 정도
이식성 : 타 환경에서도 얼마나 쉽게 적용할 수 있는지 정도
<알고리즘 설계 기법 >
Divide and Conquer(분할 정복 알고리즘)
그대로 해결할 수 없는 문제를 작은 문제로 분할하여 문제를 해결하는 알고리즘
Greedy(탐욕 알고리즘)
현재 시점에서 가장 최적의 방법을 선택하는 알고리즘
Backtracking
모든 조합을 시도하여 문제의 답을 찾는 알고리즘
해를 찾는 도중 해가 아니어서 막히면, 되돌아가서 다시 해를 찾아가는 기법을 말합니다. 최적화 문제와 결정 문제를 푸는 방법이 됩니다.
물리데이터 저장소의 파티션 설계에서 파티션 유형
범위 분할 (Range Partitioning) : 지정한 열의 값을 기준으로 분할
해시 분할 (Hash Partitioning) : 해시 함수를 적용한 결과 값에 따라 데이터 분할
조합 분할 (Composite Partitioning) : 범위 분할 후 해시 함수를 적용하여 다시 분할
< 데이터 병목 현상 >
병의 목 부분처럼 넓은 길이 갑자기 좁아짐으로써 대표적으로 교통 정체 현상,
컴퓨터 성능 저하 현상이 그 예이다.
컴퓨터 성능 저하 현상은 엄청난 양의 데이터를 순식간에 내보내더라도 메모리가 이를 제대로 소화하지 못해 성능이 떨어지는 현상을 예로 들 수 있습니다. 주로 용량이 적은 주변기기를 사용할 때 많이 발생하죠. 즉 담을 수 있는 데이터의 양은 적으나 한꺼번에 많은 양의 데이터가 유입 됨으로써 컴퓨터가 느려지는 현상을 말합니다.
EAI (Enterprise Application Integration) 구축유형 중 Hybrid --> Hub & spoke && messageBus
- Hub & Spoke 와 Message Bus 의 혼합방식이다
- 필요한 경우 한가지 방식으로 EAI 구현이 가능하다.
- 데이터 병목현상을 최소화 할 수 있다.
Hub & Spoke = 그룹내 담당 허브가 고장나면 전체에 영향이 간다.
messageBus = 그룹 담당
테스트의 결과가 참인지 거짓인지를 판단하기 위해 사전에 정의된 참 값을 입력하여 비교하는 기법 및 활동
종류에는 참 , 샘플링 , 휴리스틱 , 일관성 검사가 존재함
> 테스트 오라클
구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서
> 테스트 케이스
테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스들을 묶은 집합
> 테스트 시나리오
<빌드 자동화 도구>
빌드를 포함하여 테스트 및 배포를 자동화 하는 도구
- Ant , Make , Maven , Gradle, Jenkins 등이 있다.
Jenkins
- JAVA기반의 오픈 소스 형태
- 서블릿 컨테이너에서 실행되는 서버 기반 도구
- 친숙한 Web GUI 제공
- 분산 빌드나 테스트 가능
Gradle
- Groovy를 기반으로 한 오픈 소스 형태
- 안드로이드 앱 개발 환경에서 사용
- 행할 처리 명령들을 모아 태스크로 만든 후 태스크 단위로 실행
해싱함수의 종류
제산법 / 제곱법 / 중천법(폴딩법) / 숫자분석법 / 기수 변환법 / 무작위방법
해싱함수 중 레코드 키를 여러 부분 나누고 ,나눈 부분의 각 숫자를 더하거나 XOR한 값을 홈주소로 사용하는 방식
> 폴딩법
레코드키를 해시표로 나눈 나머지를 홈 주소로 사용
> 제산법
키 숫자의 진수를 다른 진수로 변환시켜 주소 크기 를 초과한 높은 자릿수 절단, 다시 주소 범위에 맞게 조정
> 기수변환법
키 값을 이루는 숫자의 분포를 분석하여 비교적 고른 자리를 필요한 만큼 선택
> 숫자분석법
물리적 저장 장치의 입장에서 본 데이터베이스 구조로서 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고
저장 데이터 항목의 표현 방법 , 내부 레코드의 물리적 순서 등을 나타낸다.
> 내부 스키마
외부스키마 : 개인 또는 응용 개발자 입장에서 보는 데이터베이스
n개의 노드로 구성된 무방향 그래프
> n(n-1)/2
정점이 n개인 그래프에서 최대 간선수
> n(n-1)
디지털 저작권 관리 (DRM) 구성 요소
콘텐츠 제공자 (Contents Provider) : 콘텐츠를 제공하는 저작권자
콘텐츠 분배자 (Contents Distributor) : 암호화된 콘텐츠를 유통하는 곳 또는 사람
클리어링 하우스 (Clearing House) : 키 관리 및 라이선스 발급관리
패키저 - 콘텐츠를 메타 데이터와 함께 배포 가능한 형태로 묶어 암호화
클리어링 하우스 : 키관리 및 라이센스 발급관리
DRM 컨트롤러 : 배포된 콘텐츠의 이용권한을 통제
한번에 한가지 처리만 수행
클래스/메소드/함수를 최소 단위로 분리
> 단순성
전위 표기법 (prefix) - 연산자가 앞에
중위 표기법 (infix ) - 연산자가 안에
후위 표기법(postfix) - 연산자가 뒤에
<선형구조>
: 배열 , 선형리스트 , 스택 , 큐 , 데크
스택: 한쪽 끝으로만 삽입, 삭제 작업이 이뤄짐 , 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입 선출
서브루틴 호출 , 인터럽트 처리 , 수식 계산 및 수식 표기법에 응용된다.
재귀호출 ( 함수 내부에서 함수가 자기 자신을 또다시 호출하는 행위 ) , 후위표현의 연산 , 깊이 우선 탐색
QUE : 한쪽에는 삽입 작업 , 다른 한쪽에는 삭제 작업이 이루어짐 , 가장 먼저 삽입된 자료가 가장 먼저 삭제되는 선입선출 선택정렬 (가장 작은 값을 위치가 정렬되어지지 않는 최초의 값과 바꿈)
top과 bottom 2개로 이뤄져있음
<비선형 구조>
: 트리, 그래프
트리는 정점(node)와 선분(branch)를 이용하여 사이클을 이루지 않도록 구성한 그래프의 특수한 형태
체크박스 : 여러개의 선택상황에서 1개 이상의 값을 선택할 수 있는 버튼
라디오버튼 : 여러 항목 중 하나만 선택할 수 있는 버튼
텍스트박스 : 사용자가 데이터를 입력하고 수정할 수 있는 상자
재사용성 : 소프트웨어 일부분을 다른 시스템에서 사용할 수 있는 정도
가시성 : 대상을 확인 할 수 있는 정도
이진검색 알고리즘
: 탐색 효율이 좋고 탐색 시간이 적게 소요된다.
검색할 데이터가 정렬되어 있어야한다.
비교 횟수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어든다.
피보나치 검색 :
피보나치 수열에 따라 다음에 비교할 대상을 선정하여 검색
< 테스트케이스의 구성요소 >
식별자(항목 식별자, 일련번호)
테스트항목(테스트 대상-모듈 또는 기능)
입력 명세(입력 데이터 또는 테스트 조건)
출력 명세(테스트 케이스 수행 시 예상되는 출력 결과)
환경 설정(필요한 하드웨어나 소프트웨어의 환경)
특수 절차 요구(테스트 케이스 수행 시 특별히 요구되는 절차)
의존성 기술(테스트 케이스 간의 의존성)
소프트웨어 설치 메뉴얼
제품 소프트웨어 개요
설치 관련 파일
프로그램 삭제
chief programmer team : 효율성을 제고하기 위하여 능력과 경험이 풍부한 책임 프로그램 작성자를 중심으로 하여 구성한 개발 팀
<정렬종류>
퀵정렬 : 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬하는 방식
삽입정렬 : 가장 간단한 정렬 방식, 이미 순서화된 파일에 새로운 하나의 레코드를 순서에 맞게 삽입시켜 정렬
쉘정렬: 삽입정렬의 확장 개념 ,입력파일을 매개변수 값으로 서브파일 구성하고 각 서브파일을 삽입정렬 방식으로 순서 배열하는 과정을 반복하는 정렬
선택정렬 : n 개의 레코드 중에서 최소값을 찾아 첫번째 레코드 위치에 놓고 , 나머지 n-1개 중에서 다시 최소값을 찾아 두번째 레코드 위치에 놓는 방식을 반복하는 정렬
버블정렬 : 주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하여 그 크기에 따라 레코드 위치를 서로 교환하는 정렬방식
힙 정렬 ( Heap Sort) : 전이진 트리를 이용한 정렬방식
정렬할 입력 레코드들로 힙을 구성하고 가장 큰 키 값을 갖는 루트 노드를 제거하는 과정을 반복하여 정렬하는 기법이다
평균 수행시간은 O(nlog2n)이다
완전 이진트리(complete binary tree)로 입력자료의 레코드를 구성한다.
최악 : 0(nlog n)
2-way 합병정렬 : 이미 정렬되어 있는 두 개의 파일을 한개의 파일로 합병하는 정렬 방식
체크인(Check-In ) : 버전 관리 항목 중 저장소에 새로운 버전의 파일로 갱신하는 것
형상 감사: 기준선의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업
<소프트웨어 버전 등록>
저장소: 최신 버전의 파일들과 변경 내역에 대한 정보들이 저장되어 있는 곳
가져오기(import): 버전 관리가 되고 있지 않은 아무것도 없는 저장소에 처음으로 파일을 복사
체크아웃: 프로그램을 수정하기 위해 저장소에서 파일을 받아 옴, 소스 파일과 함께 버전 관리를 위한 파일들을 받아 옴
체크인: 체크아웃한 파일의 수정을 완료한 후 저장소의 파일을 새로운 버전으로 갱신
커밋: 체크인을 수행할 때 이전에 갱신된 내용이 있는 경우에는 충돌을 알리고 diff 도구를 이용해 수정한 후 갱신 완료
동기화: 저장소에 있는 최신 버전으로 자신의 작업공간을 동기화
소프트웨어 테스트의 기본원칙
-살충제 패러독스: 동일한 테스트 케이스로 반복 실행하면 더이상 새로운 결함을 발견할 수 없으므로
주기적으로 테스트 케이스를 점검하고 개선해야 한다.
-오류 부재의 궤변: 사용자의 요구사항을 만족하지 못한다면 오류를 발견하고 제거해도 품질이 높다고 말할 수 없다.
-결함 집중 : 파레토 법칙이 좌우 , 애플리케이션 결함의 대부분은 소수의 특정한 모듈에 집중 , 결함은 발생한 모듈에서 계속 추가로 발생
명세기반 테스트 : 주어진 명세를 빠짐없이 테스트 케이스로 구현하고 있는지 확인하는 테스트
구조기반 테스트 : 프로그램 내부 구조 및 복잡도를 검증하는 화이트박스 테스트 시행, 제어 흐름과 조건 결정 등이 목적
성능 테스트 도구(Performance Test Tools) : 애플리케이션의 처리량, 응답시간, 경과시간, 자원 사용률 등 성능 목표 달성 여부 확인 , 인위적으로 적용한 가상 사용자를 만들어 테스트 수행
분산 저장소 방식 : 하나의 원격 저장소와 개발자 PC의 로컬 저장소에 저장 자신의 로컬 저장소로 복사해 작업, 로컬 저장소에서 우선 반영(commit) 그 후 원격 저장소에 반영(push) , 문제가 생겨도 로컬 저장소의 자료를 이용해 작업 가능
로컬 저장소에서 작업 및 처리 속도 빠름
공유 폴더 방식 : 로컬 컴퓨터의 공유 폴더에 저장되어 관리 공유폴더의 파일을 자기 pc로 복사 후 이상 유무 확인
클라이언트/서버 방식 : 중앙 시스템(서버)에 저장되어 관리 방식 개발자별로 자신의 pc(클라이언트)로 복사
모든 버전 관리는 서버에서 수행 , 서버에 문제 생기면 다른 개발자 협업 및 버전 관리 작업 중단
테스트와 디버그의 목적
: 테스트는 오류를 찾는 작업 , 디버깅은 오류를 수정하는 작업
'정보처리기사(필기)' 카테고리의 다른 글
3과목 : 데이터베이스 구축 (0) | 2022.06.24 |
---|---|
1과목 : 소프트웨어 설계 (1) | 2022.06.24 |
5과목 정리 : 정보시스템 구축 및 관리 (0) | 2022.06.22 |
GoF(Gangs of Four) 디자인 패턴 (0) | 2022.04.01 |
2022년 정처기 2과목 (0) | 2022.03.29 |