정보처리기사

정보처리기사 필기 2과목 - 소프트웨어 개발

aesup 2023. 5. 10. 22:28
728x90

🎁자료구조

- 자료구조는 컴퓨터 상 자료를 효율적으로 저장하기 위해 만들어진 논리적인 구조이다

자료구조 설명
선형구조 데이터를 연속으로 연결한 자료 구조
- 리스트 , 스택, 큐, 데크
비선형구조 데이터를 비연속적으로 연결한 자료 구조
- 트리, 그래프

 

선형구조

리스트

종류 설명
선형리스트 (Linear List) -배열과 같이 연속되는 기억장소에 저장되는 리스트
-선형 리스트의 대표적인 구조로는 배열등이 있음
-가장 간편한 자료 구조 이며, 접근 구조가 빠름
-자료의 삽입, 삭제 시 기존 자료의 이동이 필요
연결리스트(Linked List) -노드의 포인터 부분으로 서로 연결시킨 리스트
-연결하는 방식에 따라 단순 연결리스트, 원형 연결 리스트, 이중연결 리스트, 이중원형 연결 리스트로 구분
-노드의 삽입, 삭제가 선형 리스트와 달리 편리
-연결을 위한 포인터가 추가되어 저장공간이 추가로 필요
-포인터를 통해 찾는 시간이 추가되어 선형 리스트에 비해 느림

스택

- 스택은 한방향으로만 자료를 넣고 꺼낼 수 있는 LIFO(Last - In First - Out)형식의 자료구조이다

- 한방향으로만 POP 과 PUSH 를 할수 있다

- TOP 은 스택에서 가장 위에 있는 데이터로 스택 포인터(Stack Pointer)라고 불린다

연산 코드 설명
삽입 if Top = n Then
   Overflow
Else {
  Top = Top + 1
  insert S(Top)
}
-스택에 데이터가 n개이면 삽입할 공간이 없으므로 오버플로
-스택에 데이터가 n개가 아니면 스택 포인터 Top 값을 1을 증가
- 스택 포인터 Top 이 가리키는 곳에 데이터 삽입
삭제 If Top = 0 Then
   Underflow
Else {
 remove S(Top)
Top = Top - 1
}
- 스택에 데이터가 0개이면 삭제할 데이터가 없으므로 언더플로
- 스택에 데이터가 0개가 아니면 스택 포인터 Top 이 가리키는 곳에 데이터 삭제
- 스택 포인터 Top 값을 1감소

스택의 응용분야

인터럽트 처리 ,  함수 호출(재귀 호출) , 후위표현 연산, 깊이 우선 탐색(DFS)

 

- 큐는 한쪽 끝에서는 삽입 작업이 이뤄지고, 반대쪽 끝에서는 삭제 작업이 이루어지는 FIFO(First - In First-Out)

- ENQUEUE :  데이터를 차례대로 넣는 연산

- DEQUEUE :  처음 저장된 데이터부터 하나씩 꺼내는 연산

 

데크

- 데크는 큐의 양쪽 끝에서 삽입과 삭제를 할 수 있는 자료구조이다

- 두개의 포인터를 사용하여, 양쪽의 삭제/삽입이 가능하다

 

 

비선형구조

트리

- 트리는 데이터들을 계층화 시킨 자료 구조이다

- 그래프의 특수한 형태로 노드와 선분으로 되어있고, 정점 사이에 사이클이 형성되어 있지 않으며, 자료 사이의 관계성이 계층 형식으로 나타나는 비선형 구조이다

- 인덱스를 조작하는 방법으로 가장 많이 사용하는 구조이다

- 트리는 노드와 노드를 연결하는 링크로 구성된다

- 배열과 달리 노드들이 포인터로 연결되어 노드의 상한선이없다

 

트리의 용어

용어 설명
루트노드(Root Node) 트리에서 부모가 없는 최상위 노드, 트리의 시작점
단말노드(Leaf Node) 자식이 없는 노드, 트리의 가장 말단에 위치
레벨(Level) 루트 노드를 기준으로 특정 노드까지의 경로길이
조상노드(Ancestor Node) 특정노드에서 루트에 이르는 경로상 모든 노드
자식노드(Child Node) 특정노드에 연결된 다음 레벨의 노드
부모노드(Parent Node) 특정 노드에 연결된 이전 레벨의 노드
형제노드(Sibiling) 같은 부모를 가진 노드
깊이(Depth) 루트 노드에서 특정 노드에 도달하기 위한 간선의 수
차수(Degree) 특정 노드에 연결된 자식 노드의 수
- 트리의 차수를 고르라는데 특정 노드를 언급하지 않을 경우, 트리에서 가장 큰 차수를 가지는 값을 찾으면 된다

 

트리 순회 방법

방법 설명
전위 순회
(Pre-Order Traversal)
root - > left - > right
중위 순회
(In-Order Traversal)
left -> root -> right
후위 순회
(Post - Order Traversal)
left -> right - > root

트리 순회 예시

pre :  A B D E C F G

in : D B E A F C G

post :  D E B F G C A

 

트리 순회 예시2

구하고자 하는 정보 결과
차수 3
B의 차수 3
전위 순회 (Preorder) A-B-D-E-F-H-I-C-G
중위 순회 (Inorder) D-B-E-H-F-I-A-C-G
후위 순회 (Postorder) D-E-H-I-F-B-G-C-A

 

수식 변환 문제

3+2를 표현하는 방식

Prefix : +32

Infix : 3+2

postfix : 32+

 

그래프

- 그래프는 노드와 노드를 연결하는 간선을 하나로 모아놓은 자료구조이다

- 트리는 사이클이 없는 그래프이다

- 방향그래프 : 정점을 연결하는 선에 방향이 있는 그래프

                        n개의 정점으로 구성된 방향 그래프의 최대 간선 수는 n(n-1)

- 무방향그래프 : 정점을 연결하는 선에 방향이 없는 그래프

                           n개의 정점으로 구성된 방향 그래프의 최대 간선 수는 n(n-1)/2

탐색방법 설명
깊이 우선 탐색
(DFS; Depth-First Search)
최대한 깊이 내려간 뒤, 더이상 깊이 갈곳이 없을 경우 옆으로 이동
너비 우선 탐색
(BFS; Breadth-First Search)
최대한 넓게 이동한 다음 더 이상 갈 수 없을때 아래로 이동

🎁물리 데이터 저장소

순서 변환단계
1 단위 개체를 테이블로 변환
2 속성을 컬럼으로 변환
3 UID를 기본 키로 변환
4 관계를 외래 키로 변환
5 컬럼 유형과 길이 정의
6 반 정규화 수행

 

인덱스 (Index) 설계

1. 인덱스 적용 기준

- 조회 및 출력 조건으로 사용되는 컬럼인 경우 적용한다

- 인덱스 자동생성 기본키와 유니크 키의 제약조건을 사용할 경우 적용한다

- 분포도가 좋은 컬럼은 단독적으로 생성한다

- 자주 조합되어 사용되는 컬럼은 결합 인덱스로 생성한다

 

2. 설계시 고려사항

- 지나치게 많은 인덱스는 오버헤드로 작용한다

- 인덱스는 추가적인 저장 공간이 필요함을 고려해야 한다

- 넓은 범위를 인덱스 처리 시 오히려 전체 처리보다 많은 오버헤드를 발생시킬 수 있음에 유의한다

- 인덱스와 테이블의 저장공간을 적절히 분리 될 수 있도록 설계해야한다

 

뷰 설계

1. 뷰 설계시 고려사항

- 뷰 사용에 따라 수행속도에 문제가 발생할 수 있다

- 뷰 SELECT 문의 조건은 최적의 엑세스 경로를 사용할 수 있도록 한다

 

2. 뷰 적용 기준

- 인덱스의 단점을 해결한 기법으로 분포도가 넓을 수록 오히려 유리하다

 

ORM (Object Relational Mapping) 프레임워크

- 관계형 데이터 베이스와 객체지향 프로그래밍 언어 간 호환되지 않는 데이터를 변환 하는 프로그래밍 기법

- iBatis , MyBatis, Embeded SQL

 

트랜잭션 인터페이스(Transaction Interface)

- 트랜잭션 인터페이스는 데이터 베이스 트랜잭션의 입출력과 기능 형태를 정의한 인터페이스이다

- 트랜잭션 인터페이스는 ACID 원칙을 기반으로 설계된다

 

트랜잭션 인터페이스의 특징

특징 설명
원자성(Atomicity)  트랜잭션 연산을 데이터베이스 모두에 반영 또는 반영하지 말아야함
(완전하게 수행완료 안되면 수행되지 않아야함)
일관성(Consistency) 트랜잭션이 실행을 성공적으로 완료할시 일관성 있는 데이터 베이스 상태를 유지
격리성(Isolation) 둘 이상 트랜잭션 동시 실행 시 한개의 트랜잭션만 접근이 가능하여 간섭 불가
영속성(Durability) 성공적으로 완료된 트랜잭션 결과는 영구적으로 반영됨

 

프로시저

- 프로시저는 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다

- 데이터 베이스 내부에 저장되고 일정한 조건이 되면 자동으로 수행된다

 

PL/SQL 의 장점

- 컴파일 불필요

- 모듈화 가능

- 절차적 언어사용

- 에러처리

 

트리거

- 특정 테이블에 삽입, 수정, 삭제 등의 데이터 변경 이벤트가 발생시 DBMS 에서 자동적으로 실행되도록 구현된 프로그램


🎁통합구현

단위 모듈 구현의 개념

- 단위 모듈 구현은 소프트웨어 개발에 있어 기능을 단위 모듈별로 분할하고 추상화하여 성능을 향상시키고,

유지보수를 효과적으로 하기 위한 구현 기법

 

단위 모듈 구현의 원리

- 정보 은닉(Information Hiding) : 어렵거나 변경 가능성이 있는 모듈을 타 모듈로부터 은폐

- 분할과 정복(Divide & Conquer) : 복잡한 문제를 분해, 모듈 단위로 문제 해결

- 데이터 추상화(Data Abstraction) : 각 모듈 구조를 엑세스하고 수정하는 함수내에 자료구조의 표현 내역을 은폐

- 모듈 독립성(Module Independency) :  낮은 결합도와 높은 응집도를 가짐

 

구현 단계에서 작업 절차

코딩 계획 -> 코딩 - > 컴파일 -> 테스트

 

재사용 기법

- 재사용은 이미 개발되어 기능, 성능 및 품질을 인정 받았던 소프트웨어의 전체 또는 일부분을 다시 사용하는 기법

구분 설명
재공학 (Re-Engineering) 기존 소프트웨어를 버리지 않고 기능을 개선시키거나 기능을 새로운 소프트웨어로 재활용
(고도화)
역공학(Reverse Engineering) SW 에 대한 디버깅, 디컴파일 등의 분석을 통해 기존 제품에 구현된 구조, 원리, 기술 ,  알고리즘 등을 역으로 분석하여 재구성
재개발(Re - Development) 기존 시스템 내용을 참조하여 완전히 새로운 시스템을 개발

 

IDE (Integrated Development Environment)도구

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

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

- 이클립스, 비주얼 스튜디오

 

형상관리의 개념

- 형상관리는 소프트웨어 생명주기 동안 발생하는 변경사항을 체계적으로 관리하여 소프트웨어의 품질 보증을 향상시키는 관리적 활동이다

- 형상관리는 개발 과정의 변경 사항을 관리한다

- 형상관리 관리 항목으로는 프로젝트 요구 분석서, 소스 코드, 운영 및 설치 지침서가 있다

- 유지보수 뿐만아니라 개발 단계에도 사용할수있다

- CVS , SVN , Git

절차 설명
1. 형상 식별 - 형상 관리 계획을 근거로 관리의 대상이 무엇인지 식별하는 활동
2. 형상 통제 - 형상 항목의 변경사항에 대하여, 형상통제위원회(CCB)가 승인/기각/보류를 결정하고, 승인된 변경사항의 이행을 체계적으로 통제하는 활동
3. 형상 감사 - 형상 관리 계획대로 형상 관리가 진행되고 있는지 형상 항목의 변경이 요구사항에 맞도록 제대로 이뤄졌는지 등을 살펴보는 활동
4. 형상 기록 -소프트웨어 형상 및 변경 관리에 대한 각종 수행결과를 기록하는 활동

형상 관리 도구

도구 설명
CVS  가장 오래된 형상관리 도구중의 하나로서 중앙 집중형 서버 저장소를 두고 클라이언트가 접속해서 버전 관리를 실행하는 형상 관리 도구
- 직관 적이고 비교적 단순한 명령세트
- 텍스트 기반 소스 코드 위주 지원
- 등록된 파일 및 디렉토리 의 변동이 불편
- 커밋 실패등에 대한 롤백 기능 미지원
SVN 중앙 집중형 클라이언트-서버 방식으로 CVS 의 단점을 보완
- 커밋 실패시 롤백 가능
Git 리누스 토발즈가 2005년 리눅스 커널의 개발을 위해 만든 형상 관리 시스템
- 분산 저장소 방식

 

애플리케이션 배포 도구

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

- 기술요소 : 암호화, 키관리, 식별기술, 저작권 표현, 암호화 파일 생성, 정책 관리, 크랙 방지, 인증

 

애플리케이션 배포 도구 활용 시 고려사항

- 제품 소프트웨어 패키징 도구 및 애플리케이션 배포 도구 활용 시 암호화/보안, 이기종 연동, 복잡성 및 비효율 문제, 최적합 암호화 알고리즘 적용

 

DRM (Digital Rights Management)

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

- 저작권자와 콘텐츠 유통업자 사이의 거래구조 투명성 제공

- 사용가능 횟수, 유효기간, 사용 환경 등을 정의 가능

- 자유로운 상거래 제공

구성요소 설명
콘텐츠 제공자
(Content Provider)
콘텐츠를 제공하는 저작권자
콘텐츠 소비자
(Content Customer)
콘텐츠를 구매해서 사용하는 주체
콘텐츠 분배자
(Content Distributor)
암호화된 콘텐츠를 유통하는 곳이나 사람
클리어링 하우스
(Clearing House)
- 저작권에 대한 사용권한, 라이선스 발급, 사용량에 따른 관리 등을 수행하는곳
- 키관리 및 라이선스 발급 관리
- 콘텐츠 권한 정책, 라이선스 관리를 수행
DRM 콘텐츠 서비스하고자 하는 암호화된 콘텐츠, 콘텐츠와 관련된 메타 데이터, 콘텐츠 사용정보를 패키징하여 구성된 콘텐츠
패키저 콘텐츠를 메타 데이터와 함께 배포 가능한 단위로 묶는도구
DRM 컨트롤러 배포된 디지털 콘텐츠의 이용 권한을 통제

DRM 의 기술요소

-  암호화 ,  키관리, 식별 기술, 저작권 표현, 암호화 파일 생성, 정책 관리 , 크랙 방지, 인증

 

국제 제품 품질 표준

품질 표준 설명
ISO/IEC 9126 ISO/IEC 9126 의 품질 모델은 소프트웨어 품질을 측정하고, 평가하기 위해서 소프트웨어의 품질요소와 특성을 정의
ISO/IEC 14598 소프트웨어 제품 평가 프로세스평가 모듈을 제공
ISO/IEC 12119 소프트웨어 패키지 제품에 대한 품질 요구사항 및 테스트 국제 표준
ISO/IEC 25000 품질 표준을 모두 통합하여 통합적인 국제표준

 

ISO/IEC 9126  의 소프트웨어 품질 특성

품질 특성 설명
기능성 (Functionality) 명시된 요구와 내재된 요구를 만족하는 기능을 제공하는 소프트웨어 제품의 능력
신뢰성(Reliability) 명시된 조건에서 사용될 때 성능 수준을 유지할 수 있는 소프트웨어 제품 능력
- 주어진 시간동안 주어진 기능을 오류없이 수행하는 정도
사용성(Usability) 사용자에 의해 이해되고 학습되고 사용되고, 선호될 수 있는 소프트웨어 제품의 능력
효율성(Effciency) 명시된 조건에서 사용되는 자원의 양에 따라 요구된 성능을 제공하는 소프트웨어 제품의 능력
유지보수성(Maintainability) 소프트웨어 제품이 변경되는 능력
이식성(Portability) 하나 이상의 하드웨어 환경에서 운용되기 위해 쉽게 수정될 수 있는 시스템의 능력

 

소프트웨어 공학

- 소프트웨어 공학은 소프트웨어의 개발, 운용, 유지보수 및 파기에 대한 체계적인 접근 방법

- 현대적인 프로그래밍 기술을 계속적으로 작용

- 개발된 소프트웨어의 품질이 유지되도록 지속적 검증 수행

- 소프트웨어 개발 관련 사항 및 결과에 대한 명확한 기록 유지

 

공학적으로 잘된 소프트웨어 의 특성

- 소프트웨어는 유지보수가 용이해야 한다

- 소프트웨어는 신뢰성이 높아야한다

- 소프트웨어는 충분한 테스팅을 거쳐야한다

 

소프트웨어 공학 관련 법칙

법칙 설명
브룩스의 법칙 (Brooks) "지체되는 소프트웨어 개발 프로젝트에 인력을 추가하는것은 개발을 늦출 뿐이다" 라고 주장한 법칙
- 인력때매 방해
파레토 법칙 (Pareto) 전체 결과의 80% 가 전체 원인의 20% 에서 일어나는 현상을 나타낸 법칙
- 소프트웨어 테스트 원리중 20% 의 모듈에서 80% 의 결함이 발견된다는 '결합 집중' 원리를 내포
롱테일 법칙 (Long Tail) 사소해보이는 80% 의 다수가 20%의 소수 핵심보다도 뛰어난 가치를 창출해낸다는 법칙
파레토 법칙의 반대

 

빌드 자동화 도구

도구 설명
젠킨스(Jenkins) -> 지금 내가 사용하는 툴 자바 기반의 오픈소스로 가장 많이 활용되는 빌드 자동화 도구
, 지속적 통합관리
- 서블릿 컨테이너
그래들(Gradle) 그래들은 그루비와 유사한 도메인 언어를 채용, 현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 자동화 시스템

🎁애플리케이션 테스트 관리

테스트 케이스(Test Case)

- 테스트 케이스는 특정 요구사항에 준수하는지를 확인하기 위해 개발된 입력값, 실행 조건, 예상된 결과의 집합

 

테스트 케이스 작성 절차

순서 절차
1 테스트 계획 검토 및 자료 확보
2 위험 평가 및 우선순위 결정
3 테스트 요구사항 정의
4 테스트 구조 설계 및 테스트 방법 결정
5 테스트 케이스 정의
6 테스트 케이스 타당성 확인 및 유지보수

테스트 오라클

- 테스트 오라클은 테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교

 

테스트 레벨 종류

종류 설명  기법
단위 테스트(Unit Test) - 사용자 요구사항에 대한 단위 모듈, 서브루틴 등을 테스트 하는 단계

- 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춘 테스트

- 자료구조, 인터페이스 , 독립적 기초 경로, 오류 처리 경로 , 경계 조건 등을 검사

- 단위 테스트는 명세 기반 테스트(블랙박스테스트) ,  구조 기반 테스트(화이트 박스 테스트)로 나뉘지만 주로 구조 기반 테스트 위주로 수행한다
-인터페이스 테스트
-자료 구조 테스트
-실행 경로 테스트
-오류 처리 테스트
통합 테스트(Integration Test) - 단위 테스트를 통과한 컴포넌트 간의 인터페이스를 테스트 하는 단계

- 소프트웨어 각 모듈간의 인터페이스 관련 오류 및 결함을 찾아내기 위한 체계적인 테스트 기법
- 빅뱅 테스트
- 상향식/하향식 테스트
시스템 테스트(System Test) - 개발 프로젝트 차원에서 정의된 전체 시스템 또는 제품의 동작에 대해 테스트 하는 단계

- 통합된 단위 시스템의 기능이 시스템에서 정상적으로 수행되는 지 검증하는 테스트

- 기능적 요구사항 테스트: 블랙박스, 명세서, 비즈니스 절차, 유스케이스
- 기능/ 비기능 요구사항 테스트
인수 테스트(Acceptance Test) - 계약상의 요구사항이 만족되었는지 확인하기 위한 테스트 단계

- 최종 사용자와 업무의 이해관계자 등이 테스트를 수행함으로써 개발된 제품에 대해 운영 여부를 결정하는 테스트
- 알파/ 베타 테스트

 

테스트 시나리오

- 테스트 시나리오는 애플리케이션의 테스트되어야 할 기능 및 특징, 테스트가 필요한 상황을 작성한 문서이다

 

정적 테스트 : 테스트 대상을 실행하지 않고 구조를 분석하여 논리성을 검증하는 테스트

- 동료 검토, 워크 스루, 인스펙션(담당자 없이 리뷰)

 

동적 테스트 : 소프트웨어를 실행하는 방식으로 테스트를 수행하여 결함을 검출하는 테스트

- 화이트박스, 블랙박스

 

블랙박스 테스트

- 프로그램 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트 이다

- 소프트웨어의 특징, 요구사항, 설계 명세서 등에 초점을 맞춰 테스트가 이뤄진다

- 기능 및 동작 위주의 테스트를 진행하기 때문에 내부 구조나 작동 원리를 알지 못해도 가능하다

- 명세테스트

 

블랙박스 테스트 유형

- 동등 분할 테스트, 경곗값 분석 테스트, 결정 테이블 테스트, 상태전이 테스트, 유스케이스 테스트, 분류 트리 테스트, 페어 와이즈 테스트, 원인 - 결과 그래프 테스트, 비교 테스트

 

화이트박스 테스트

- 각 응용 프로그램의 내부 구조와 동작을 검사하는 소프트웨어이다

- 코드분석과 프로그램 구조에 대한 지식을 바탕으로 문제가 발생할 가능성이 있는 모듈 내부를 직접 관찰하고, 테스트 하는 방법

- 소스 코드의 모든 문장을 한번 이상 수행함으로써 진행

- 논리적 경로를 점검

 

화이트박스 테스트 유형

- 구문커버리지, 결정 커버리지, 조건 커버리지, 변경 커버리지, 다중 조건 커버리지, 경로 커버리지, 제어 흐름 테스트, 데이터 흐름 테스트

 

테스트 시간에 따른 분류

분류 설명
검증 (Verification) 소프트웨어 개발과정을 테스트
확인(Validation) 소프트웨어 결과를 테스트

 

테스트 목적에 따른 분류

분류 설명
회복 테스트 (Recovery) 고의로 실패 유도, 정상적 복귀 여부 테스트
안전 테스트 (Security) 보안적인 결함을 미리 점검
성능 테스트(Performance) 시스템이 반응하는 속도 등을 측정
강도 테스트(Stress) 시스템 처리 능력 이상의 부하 임계점 이상의 부하를 가하여 비정상적인 상황에서의 처리를 테스트
구조 테스트( Structure) 시스템의 내부 논리 경로 , 소스 코드의 복잡도를 평가하는데 필요한 테스트
회귀(Regression) 회귀 테스트는 오류를 제거하거나 수정한 시스템에서 오류제거와 수정에 의해 새로이 유입된 오류가 없는지 확인하는 일종의 반복 테스트 기법
병행테스트(Parallel) 결과 비교

 

소프트웨어 테스트의 원리

원리 설명
결함 존재 증명 테스트는 결함이 존재함을 밝히는 활동
완벽 테스팅은 불가능 무한경로, 무한 입력 값으로 인한 완벽한 테스트는 어렵다
초기 집중 개발 초기에 체계적인 분석 및 설계가 수행되면 개발기간을 단축할 수 있고 결함 예방 가능
결함 집중 소프트웨어 테스트 원리중 20% 의 모듈에서 80% 의 결함이 발견된다
- 파레토 법칙
살충제 페러독스 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾지 못한다는 원리
정황 의존성 소프트웨어의 성격에 맞게 테스트 해야함
오류-부재의 궤변 요구사항을 충족시키지 못하면 결함이 없다해도 품질이 높을수없음

 

결함의 개념

- 결함은 개발자 오류로 인해 만들어지는 문서 또는 코딩 상의 결점으로 소프트웨어가 개발자가 설계한 것과 다르게  동작하거나 다른 결과가 발생하는 현상

 

정적분석도구 : PMD , CheckStyle ,  Splint, Cppcheck , SonarQube

동적분석도구 : Avalanche, Valgrind

 

테스트 스텁 : 하향식 통합시험을 위해 일시적으로 필요한 조건만을 가지고 임시로 제공되는 시험용 모듈

- 일시적으로 필요한 조건만을 가지고 임시로 제공되는 시험용 모듈

- 하위 모듈이 없는 경우

 

테스트 드라이버 : 상향식 통합시험을 위해 모듈 테스트 수행 후의 결과를 도출하는 시험용 모듈

- 결과를 도출하는 시험용 모듈

- 상위 모듈이 없는 경우

 

하향식 통합시험

- 메인 제어 모듈로부터 아래 방향으로 제어의 경로를 따라 이동하면서 하향식으로 통합하는 테스트이다

 

상향식 통합시험

- 애플리케이션 구조에서 최하위 레벨의 모듈 또는 컴포넌트로부터 점진적으로 상위 모듈과 함께 테스트하는 기법

 


🎁알고리즘

알고리즘은 어떠한 문제를 해결하기 위한 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 기법

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

 

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

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

 

해싱함수(Hashing Function) 

- 해쉬함수는 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수

 

해싱함수

제산법 (division): 나머지 연산자%를 사용하여 테이블 주소를 계산하는 방식

제곱법(square): 제곱법은 레코드 키값을 제곱한 후에 결과 값의 중간 부분에 있는 몇 비트를 선택하여 해시 테이블의 홈 주소로 사용하는 방식

숫자 분석법(Digit Analysis) : 비교 적 고른 분포 자리수를 선택하여 레코드의 홈 주소로 사용

폴딩법(Folding) : 레코드 키를 여러 부분으로 나누고, 나눈 부분의 각 숫자를 더하거나 XOR 한 값을 홈 주소로 사용하는 방식

기수변환법(Radix) : 키를 변환하여 홈주소 얻음

 

1. 순차 검색 (Sequential Search) O(n)

- 배열의 처음부터 끝까지 차례대로 비교하여 원하는 데이터를 찾아내는 알고리즘

- 순차검색 예제

아래 리스트에서 901을 찾는다

92, 100, 215 , 341, 625, 716, 812, 813 , 820, 901, 902

- 첫번 째 레코드에 있는 92와 901을 비교

- ...

- 찾으려는 값과 같으면 순차 탐색 종료. 10번의 시도로 찾을 수 있음

 

2. 이진 검색 (Binary Search) O(log2n)

- 정렬되어 있는 리스트에서 탐색 범위를 좁혀가며 데이터를 탐색

- 탐색 효율이 좋고 탐색 시간이 적게 소요

- 가운데 레코드를 찾기위해서 아래 식을 사용

M = (F + L)/2

M : 남은 범위에서 가운데 레코드 번호

F : 남은 범위에서 첫 번 째 레코드 번호

L : 남은 범위에서 마지막 레코드 번호

 

이진 탐색 동작 방식
1. 배열의 중간 값을 찾음
2. 중간 값과 검색 값을 비교
2-1. 중간 값이 검색 값과 같으면 끝.
2-2. 중간 값보다 검색 값이 크다면 오른쪽 구간을 탐색
2-3. 중간 값보다 검색 값이 작다면 왼쪽 구간을 탐색
3.값을 찾거나 간격이 비었을 때까지 반복

이진 검색으로 14 를 찾아라 => 비교되는 횟수 : 3

STEP 1.

배열의 중간값 :(0+14)/2 = 7

중간값보다 검색값이 크므로 오른쪽 탐색

 

STEP2.

7+1 = 8

(8+14)/2 = 11

arr[11] = 12

값 : 12

 

STEP3.

11+1 = 12

(12+14)/2 = 13

arr[13] = 14

값: 14

 

3. 퀵 정렬(Quick Sort) O(nlog2n)

- 퀵 정렬은 피벗을 두고 피벗의 왼쪽에는 피벗보다 작은 값오른쪽에는 큰값을 두는 과정을 반복하는 알고리즘이다

- 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬한다

최적 수행 시간: O(nlog2n)

평균 수행 시간:O(nlog2n)

최악 수행 시간: O(n2)

 

4. 합병 정렬(Merge Sort)

- 합병 정렬은 전체 원소를 하나의 단위로 분할 한 후 분할 한 원소를 다시 합병해서 정렬하는 알고리즘

최적 수행 시간: O(nlog2n)

평균 수행 시간:O(nlog2n)

최악 수행 시간: O(nlog2n)

 

5. 힙정렬(Heap Sort)

- 정렬할 입력 레코드들로 힙을 구성하고 가장 큰 키값을 갖는 루트 노드를 제거하는 과정을 반복하여 정렬하는 알고리즘

최적 수행 시간: O(nlog2n)

평균 수행 시간:O(nlog2n)

최악 수행 시간: O(nlog2n)

 

6. 거품 정렬(Bubble Sort) O(n2)

- 인접한 2개의 레코드 키값을 비교하여 그 키에 따라 레코드 위치를 서로 교환

 

7. 삽입 정렬(Insertion Sort) O(n2)

- 삽입정렬은 2번째 키와 첫번째 키를 비교하여 순서 대로 나열하고, 이어서 3번째 키를 1,2 번째 키와 비교해 순서대로 나열하고, 계속해서  n번째 키를 앞의 (n-1)개 키와 비교하여 순서대로 나열 , 알맞는 순서에 삽입

 

8. 선택 정렬(Selection Sort) O(n2)

- 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 정렬되지않은 부분의 가장 앞 데이터랑 교환

 

 

베드 코드 유형

- 오염, 문서부족, 의미 없는 이름, 높은 결합도, 아키텍처 침식, 외계인 코드, 스파게티 코드, 알 수 없는 변수명, 로직 중복

 

클린 코드 작성 원칙

- 가독성, 단순성, 의존성 최소, 중복성 제거, 추상화

 

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

복잡도 = E(간선) - N(노드) + 2

복잡도 = 조건 분기문 + 1

 

EAI

- 기업에서 운영되는 서로 다른 플랫폼 및 애플리케이션 간의 정보 전달 , 연계, 통합을 가능하게 해주는 솔루션

728x90