티스토리 뷰
데이터 입출력 구현
자료구조의 구성
- 선형 구조 (Linear Structure) : 배열, 스택, 큐, 데크, 선형 리스트
- 비선형 구조 (Non-Linear Structure) : 트리, 그래프
선형 리스트 (Linear List)
- 연속 리스트 (Contiguous List) => 순차적
- 배열과 같이 연속되는 기억장소에 저장되는 자료 구조
- 기억장소를 연속적으로 배정받아, 기억장소 이용 효율은 밀도가 1로서 가장 좋다
- 중간에 데이터를 삽입하기 위해 연속된 빈 공간이 있어야 한다
- 삽입, 삭제 시 자료의 이동이 필요하다
- 연결 리스트 (Linked List) => 비순차적
- 자료들을 반드시 연속적으로 배열시키지 않고 임의의 기억공간을 기억시키되, 자료 항목의 순서에 따라 노드의 포인터 부분을 이용해 서로 연결시킨 자료 구조
- 노드의 삽입, 삭제 작업이 용이
- 기억공간이 연속적으로 놓여 있지 않아도 저장가능
- 연결을 위한 포인터가 필요하기 때문에 순차 리스트에 비해 기억 공간의 효율이 좋지 않다
- 연결을 위한 포인터를 찾는 시간이 필요하기 때문에 접근 속도가 느림
- 중간 노드 연결이 끊어지면 그 다음 노드를 찾기 힘들다
스택(Stack)
- 입출력이 한쪽 끝으로만 제한된 리스트
- 가득 찬 경우 오버플로우 (Overflow), 비어있는 상태의 경우 언더플로 (Underflow)가 발생한다
- 후입선출 (LIFO, Last In First Out) 방식
- 스택을 이용한 연산
- 재귀호출
- 후위표현 (Post-fix expression)의 연산
- 깊이 우선 탐색
- 서브루틴 호출, 인터럽트 처리, 수식 계산 및 수식 표기법에 응용
- 수식의 표기법
- 전위 표기법 (Prefix Notation) : +AB
- 중위 표기법 (Infix Notation) : A+B
- 후위 표기법 (Postfix Notation) : AB+
큐(Queue)
- 한쪽에서는 삽입 작업, 다른 한쪽에서는 삭제 작업이 이뤄진다
- Head (front)와 Tail (rear)의 2개 포인터를 갖고 있다
- 선입선출 (FIFO, First In First Out) 방식이다
- 큐를 이용한 연산
- 작업스케줄링, 너비 우선 탐색, 트리의 레벨 순회
데크(Deque)
- 삽입과 삭제가 리스트의 양쪽 끝에서 발생할 수 있는 자료 구조이다
- 스택과 큐의 장점으로 구성한 것이다
- Double Ended Queue의 약자이다
- 입력 제한 데크는 Scroll이고, 출력 제한 테크는 Shelf이다
트리(Tree)
- 그래프의 특수한 형태
- 노드 (Node)와 선분 (Branch)으로 되어 있고, 정점 사이에 사이클 (Cycle)이 형성되어 있지 않으며, 자료 사이의 관계성이 계층 형식으로 나타나는 비선형 구조
- 수식의 표기법
- 전위 순회 (Preorder Traversal) : Root → Left → Right
- 중위 순회 (Inorder Traversal) : Left → Root → Right
- 후위 순회 (Postorder Traversal) : Left → Right → Root
- 트리의 용어
- 노드 : 데이터와 링크를 통합적으로 표현
- 루트(근) 노드 : 최상위 노드
- 단말 노드 : 자식노드를 가지지 않는 노드
- 비단말 노드 : 자식노드를 갖는 노드
- 노드의 차수 (Degree) : 한 노드가 가지고 있는 서브 트리의 수
- 형제 (Siblings) : 한 부모의 자식 노드
- 노드의 레벨 : 한 노드가 레벨I에 속하면, 그 자식들은 레벨I+1에 속한다.
- 트리의 높이(Height)/깊이(Depth) : 그 트리의 최대 레벨
- 노드의 레벨 순서 : 트리의 노드들에 레벨별로 위에서 아래로, 같은 레벨 안에서 왼편에서 오른편으로 차례로 순서를 매긴 것
♣ 다음 트리를 Preorder 운행법으로 운행할 경우 다섯 번째로 탐색되는 것은? A B D C E G H F 이므로 E
그래프 (Graph) #방무완신
- 그래프 순회 방법의 종류
- 깊이 우선 탐색 (DFS), 너비 우선 탐색 (BFS)
- 방향 그래프 (Directed Graph)
- 정점을 연결하는 선에 방향이 있는 그래프
- n개의 정점으로 구성된 방향 그래프의 최대 간선 수 = n(n-1)
- 무방향 그래프 (Undirected Graph)
- 정점을 연결하는 선에 방향이 없는 그래프
- n개의 정점으로 구성된 무방향 그래프의 최대 간선 수 = n(n-1)/2
- 완전 그래프 (Complete Graph)
- 최대 수의 간선을 가진 그래프로 정점이 n개일 때 무방향 그래프는 n(n-1)/2개, 방향 그래프는 n(n-1) 개의 간선의 수를 갖는다.
- 신장 트리 (Spanning Tree)
- 그래프 G에서 E에 있는 간선과 V에 있는 모든 정점들로 구성된 트리
- 주어진 그래프 G에 대한 신장 트리는 유일하지 않다.
- 사이클이 없다.
♣ 다음 그래프에서 정점 A를 선택하여 깊이우선탐색 (DFS)으로 운행한 결과는? ABEFGCD
정렬
- 알고리즘의 복잡도
- 삽입 정렬 (Insertion Sort)
- 이미 순서화된 파일에 새로운 하나의 레코드를 순서에 맞게 삽입시켜 정렬
- 이미 순서화된 파일에 새로운 하나의 레코드를 순서에 맞게 삽입시켜 정렬
♣ [15, 11, 1, 3, 8]를 삽입 정렬 (Insertion Sort)을 이용하여 오름차순 정렬할 경우 1회전 후의 결과는? 11, 15, 1, 3, 8
- 선택정렬 (Selection Sort)
- n개의 레코드 중에서 최솟값을 찾아 첫 번째 레코드 위치에 놓고, 나머지 n-1개 중에서 다시 최솟값을 찾아 두 번째 레코드 위치에 놓는 방식을 반복하는 정렬
♣ [15, 11, 1, 3, 8]를 선택 정렬 (Selection Sort)을 사용하여 오름차순으로 정렬한 경우 PASS 3의 결과는? 1, 3, 8, 11, 15
- 버블정렬 (Bubble Sort)
- 주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하여 그 크기에 따라 레코드 위치를 서로 교환한다.
♣ [15, 11, 1, 3, 8] 버블 정렬을 이용하여 오름차순으로 정렬할 경우 Pass 2의 결과는? 1, 3, 8, 11, 15
- 쉘 정렬
- 임의의 레코드 키와 매개변수(h) 값만큼 떨어진 곳의 레코드 키를 비교하여 서로 교환해 가면서 정렬
- 퀵 정렬
- 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬
- 힙 정렬
- 정렬할 입력 레코드들로 힙을 구성하고 가장 큰 키 값을 갖는 루트 노드를 제거하는 과정을 반복하여 정렬
- 평균 수행 시간은 O(nlog2n)이다
- 완전 이진트리 (Complete Binary Tree)로 입력자료의 레코드를 구성한다
- 합병정렬
- 정렬된 N개의 데이터를 처리하는 데 O(Nlog2N)의 시간이 소요되는 정렬 알고리즘
해싱
- 제산법 (Division)
- 레코드키로 해시표의 크기보다 큰 수 중에서 가장 작은 소수로 나눈 나머지를 홈 주소로 삼는 방식
- 제곱법 (Mid-Square)
- 폴딩법(중첩법) (Folding)
- 레코드 키를 여러 부분으로 나누고, 나눈 부분의 각 숫자를 더하거나 XOR한 값을 홈 주소로 사용하는 방식
- 숫자분석법(계수분석법) (Digit Analysis)
- 키 값을 이루는 숫자의 분포를 분석하여 비교적 고른 자리를 필요한 만큼 택해서 홈 주소로 삼는 방식
- 기수변환법
- 키 숫자의 진수를 다른 진수로 변환시켜 주소 크기를 초과한 높은 자릿수를 절단하고, 이를 다시 주소범위에 맞게 조정하는 방법
알고리즘
- 주어진 작업을 수행하는 컴퓨터 명령어를 순서대로 나열한 것
- 검색은 정렬이 되지 않은 데이터 혹은 정렬이 된 데이터 중에서 키값에 해당하는 데이터를 찾는 알고리즘
- 정렬은 흩어져있는 데이터를 키값을 이용하여 순서대로 열거하는 알고리즘
통합 구현
화이트박스 테스트 (White Box Test)
- 모듈의 논리적인 구조를 체계적으로 점검할 수 있다
- 모듈 안의 작동을 직접 관찰할 수 있다
- 테스트 데이터를 이용해 실제 프로그램을 실행함으로써 오류를 찾는 동적 테스트에 해당한다
- 테스트 데이터를 선택하기 위하여 검증기준(Test Coverage)을 정한다
- Source Code의 모든 문장을 한번 이상 수행함으로써 진행된다
- 화이트박스 검사 기법 #데기조루
- 기초 경로 검사 (Base Path Testing) : 테스트 측정 결과는 실행 경로의 기초를 정의하는 지침으로 사용
- 데이터 흐름 검사 (Data Flow Testing) : 변수의 정의와 변수가 사용되는 위치에 초점을 맞춰 테스트
- 조건 검사 (Condition Testing) : 논리적 조건을 테스트
- 루프 검사 (Loop Testing) : 반복 구조에 맞춰 테스트
블랙박스 테스트 (Black Box Test)
- 프로그램의 구조를 고려하지 않는다
- 모듈 안에서 어떤 일이 일어나는지 알 수 없다
- 소프트웨어가 수행할 특정 기능을 알기 위해 각 기능이 완전히 작동되는 것을 입증하는 테스트
- 소프트웨어 인터페이스에서 실시되는 테스트
- 발견할 수 있는 오류
- 비정상적인 자료를 입력해도 오류 처리를 수행하지 않는 경우
- 정상적인 자료를 입력해도 요구된 기능이 제대로 수행되지 않는 경우
- 경계값을 입력할 경우 요구된 출력 결과가 나오지 않는 경우
- 블랙박스 검사 기법 #오동경비원
- 동등 분할 검사 (Equivalence Partitioning Testing), 동치 분할 검사
- 프로그램의 입력 조건에 타당한 입력 자료와 타당하지 않은 입력 자료의 개수를 균등하게 해 테스트 케이스를 정하고, 해당 입력 자료에 맞는 결과가 출력되는지 확인하는 기법
- 원인-효과 그래프 검사 (Cause-Effect Graphing Testing)
- 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정해 검사하는 기법
- 경계값 분석 (Boundary Value Analysis)
- 입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용해 입력 조건의 경계값을 테스트 케이스로 선정해 검사하는 기법
- 비교 검사 (Comparison Testing)
- 여러 버전의 프로그램에 동일한 테스트 자료를 제공해 동일한 결과가 출력되는지 테스트하는 기법
- 오류 예측 검사 (Error Guessing)
- 다른 블랙박스 테스트 기법으로 찾아낼 수 없는 오류를 찾아내는 일력의 보충적 검사 기법
- 동등 분할 검사 (Equivalence Partitioning Testing), 동치 분할 검사
형상 관리 (SCM, Software Configuration Management)
- 개발 과정의 변경 사항을 관리하는 것
- 소프트웨어에 가해지는 변경을 제어하고 관리한다
- 가시성과 추적성을 보장함으로써 소프트웨어의 생산성과 품질을 높일 수 있다
- 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정의 여러 방해 요인이 최소화되도록 보증
- 유지 보수 단계뿐만 아니라 개발 단계에도 적용할 수 있다
- 형상 관리의 기능 중 하나는 버전 제어 기술이다
- 프로젝트 계획, 분석서, 설계서, 프로그램, 테스트 케이스 모두 관리 대상이다
- 형상 관리를 통해 이전 리버전이나 버전에 대한 정보에 접근 가능하여 배포본 관리에 유용
- 불필요한 사용자의 소스 수정 제한
- 동일한 프로젝트에 대해 여러 개발자 동시 개발 가능
- 형상 관리 도구의 구성 요소
- 저장소 (Repository) : 최신 버전의 파일들과 변경 내역에 대한 정보들이 저장되어 있는 곳
- 가져오기 (Import) : 버전 관리가 되고 있지 않은 아무것도 없는 저장소에 처음으로 파일을 복사하는 것
- 동기화 (Update) : 저장소에 있는 최신 버전으로 자신의 작업 공간(로컬 저장소)을 동기화하는 것
- 체크아웃 (Check-Out) : 프로그램을 수정하기 위해 저장소에서 파일을 받아오는 것
- 체크인 (Check-In) : 저장소에 새로운 버전의 파일로 갱신하는 것
- 커밋 (Commit) 체크인을 수행할 때 충돌(Confilct) 날 경우 diff도구를 이용해 수정 후 갱신 완료
- 형상 관리 절차 [형상 식별 -> 형상 통제 -> 형상 감사 -> 형상 기록/보고]
- 형상 식별
- 형상 관리 계획을 근거로 형상관리의 대상이 무엇인지 식별하는 과정이다
- 형상 통제
- 식별된 형상 항목에 대한 변경 요구를 검토하여 현재의 기준선(Baseline)이 잘 반영될 수 있도록 조정
- 형상 통제가 이루어지기 위해서는 형상 통제 위원회(CCB)의 승인을 통한 변경 통제가 이루어짐
- 형상 감사
- 형상 관리 계획대로 형상관리가 진행되고 있는지, 형상 항목의 변경이 요구 사항에 맞도록 제대로 이뤄졌는지 등을 살펴보는 활동이다
- 형상 기록/보고
- 형상의 식별, 통제, 감사 작업의 결과를 기록, 관리하고 보고서를 작성하는 작업
- 형상 식별
- 버전 관리
- 공유 폴더 방식 : SCCS, RCS, PVCS, QVCS
- RCS (Revision Control System) : 동시에 소스를 수정하는 것을 방지하며 다른 방향으로 진행된 개발 결과를 합치거나 변경 내용을 추적할 수 있는 버전 관리 도구
- 클라이언트/서버 방식 : CVS, SVN(Subversion)
- 분산 저장소 방식 : Git, Bitkeeper
- 외계인코드(Alien Code)
- 아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 어려운 프로그램
제품 소프트웨어 패키징
패키징
- 패키징은 사용자 중심으로 진행한다
- 신규 및 변경 개발 소스를 식별하고, 이를 모듈화 하여 상용제품으로 패키징 한다
- 고객의 편의성을 위해 매뉴얼 및 버전 관리를 지속적으로 한다
- 범용 환경에서 사용이 가능하도록 일반적인 배포 형태로 패키징이 진행된다
- 패키징 작업 순서
- 기능 식별→ 모듈화→ 빌드 진행→ 사용자 환경 분석→ 패키징 및 적용 시험→ 패키징 변경 개선→ 배포
- 패키징 도구 활용 시 고려사항
- 반드시 내부 콘텐츠에 대한 암호화 및 보안을 고려한다
- 사용자 편의성을 위한 복잡성 및 비효율성 문제를 고려한다
- 제품 소프트웨어 종류에 적합한 암호화 알고리즘을 적용한다
- 추가로 다양한 이기종 연동을 고려한다
- 사용자 매뉴얼 작성 절차
- 작성 지침 정의 → 사용 설명서 구성 요소 정의 → 구성 요소별 내용 작성 → 사용 설명서 검토
DRM (디지털 저작권 관리, Digital Right Management)
- 디지털 콘텐츠와 디바이스의 사용을 제한하기 위해 하드웨어 제조업자, 저작권자, 출판업자 등이 사용할 수 있는 접근 제어 기술을 의미
- 디지털 미디어의 생명 주기 동안 발생하는 사용 권한 관리, 과금, 유통 단계를 관리하는 기술로도 볼 수 있다
- DRM의 구성 요소
- 콘텐츠 제공자 (Contents Provider) : 콘텐츠를 제공하는 저작권자
- 콘텐츠 분배자 (Contents Distributor) : 암호화된 콘텐츠를 유통하는 곳이나 사람
- 콘텐츠 소비자 (Customer) : 콘텐츠를 구매해서 사용하는 주체
- 패키저 (Packager) : 콘텐츠를 메타 데이터와 함께 배포 가능한 단위로 묶는다
- 보안 컨테이너 (Security Container) : 콘텐츠 원본을 안전하게 유통하기 위한 전자적 보안 장치
- ★클리어링 하우스 (Clearing House) : 키 관리 및 라이선스 발급 관리
- DRM 컨트롤러 (DRM Controller) : 배포된 콘텐츠의 이용 권한을 통제
- DRM의 핵심적 기술 요소
- 암호화 (Encryption) : 콘텐츠 및 라이선스를 암호화하고 전자서명을 할 수 있는 기술
- 키 관리 (Key Management) : 콘텐츠를 암호화한 키에 대한 저장 및 분배 기술
- 식별 기술 (Identification) : 콘텐츠에 대한 식별 체계 표현 기술
- 저작권 표현 (Right Expression) : 라이선스의 내용 표현 기술
- 암호화 파일 생성 (Packager) : 콘텐츠를 암호화된 콘텐츠로 생성하기 위한 기술
- 정책 관리 (Policy Management) : 라이선스 발급 및 사용에 대한 정책 표현 및 관리 기술
- 크랙 방지 (Tamper Resistance) : 크랙에 의한 콘텐츠 사용 방지 기술
- 인증 (Authentication) : 라이선스 발급 및 사용의 기준이 되는 사용자 인증 기술
애플리케이션 테스트 관리
테스트
- 기본 원칙
- 테스팅은 결함이 존재함을 밝히는 것
- 결함을 줄일 순 있지만, 결함이 없다고는 증명할 수 없음
- 완벽한 테스팅은 불가능
- 무한 경로, 무한 입력 값으로 인한 어려움
- 개발 초기에 테스팅 시작
- 테스팅 기간 단축, 재작업 감소로 개발 기간 단축 및 결함 예방
- 결함 집중
- 파레토(Pareto) 법칙이 좌우한다
- 애플리케이션 결함의 대부분은 소수의 특정한 모듈에 집중되어 존재한다
- 결함은 발생한 모듈에서 계속 추가로 발생할 가능성이 높다
- Pareto의 법칙 : 소프트 웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견된다
- Brooks의 법칙 : 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다
- 살충제 패러독스 (Pesticide Paradox)
- 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾지 못함
- 테스팅은 정황에 의존적
- 소프트웨어 성격에 맞게 테스트 실시
- 오류-부재의 궤변
- 요구사항을 충족시켜주지 못한다면, 결함이 없어도 품질이 높다 볼 수 없음
- 테스팅은 결함이 존재함을 밝히는 것
- 프로그램 실행 여부에 따른 테스트
- 정적 테스트
- 프로그램을 실행하지 않고 명세서나 소스 코드를 대상으로 분석하는 테스트
- 워크 스루(WalkThrough)
- 사용사례를 확장하여 명세하거나 설계 다이어그램, 원시코드, 테스트 케이스 등에 적용할 수 있다
- 복잡한 알고리즘 또는 반복, 실시간 동작, 병행 처리와 같은 기능이나 동작을 이해하려고 할 때 유용
- 단순한 테스트 케이스를 이용하여 프로덕트를 수작업으로 수행해 보는 것
- 인스펙션(Inspection)
- 계획 → 사전 교육 → 준비 → 인스펙션 회의 → 수정 → 후속 조치
- 코드 인스펙션
- 읽어보고 눈으로 확인하는 방법
- 정적 테스트 방법
- 코드 품질 향상 기법 중 하나
- 결함과 함께 코딩 표준 준수 여부, 효율성 등의 다른 품질 이슈를 검사
- 동적 테스트
- 프로그램을 실행하여 오류를 찾는 테스트
- 화이트박스 테스트, 블랙박스 테스트
- 정적 테스트
- 테스트 기반에 따른 테스트
- 명세 기반 테스트
- 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트
- 동등 분할, 경계값 분석 (블랙박스 테스트)
- 구조 기반 테스트
- 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인하는 테스트
- 구문 기반, 결정 기반, 조건 기반 (화이트박스 테스트)
- 경험 기반 테스트
- 테스터의 경험을 기반으로 수행하는 테스트
- 에러 추정, 체크 리스트, 탐색적 테스팅
- 명세 기반 테스트
- 시각에 따른 테스트
- 검증 (Verification) 테스트
- 개발자의 시각에서 제품의 생산 과정을 테스트하는 것
- 검증은 소프트웨어 개발 과정을 테스트하는 것이다.
- 작업 제품이 의 기대를 충족시키는지 측정한다.
- 단위 테스트, 통합 테스트, 시스템 테스트
- 확인 (Validation) 테스트
- 사용자의 시각에서 생산된 제품의 결과를 테스트하는 것
- 확인은 소프트웨어 결과를 테스트하는 것이다.
- 인수 테스트 (알파 테스트, 베타 테스트)
- 검증 (Verification) 테스트
- 목적에 따른 테스트
- 회복 (Recovery) 테스트 : 시스템에 고의로 실패를 유도하고 시스템이 정상적으로 복귀하는가
- 안전 (Security) 테스트 : 부당하고 불법적인 침입을 시도하여 보안시스템이 불법적인 침투를 잘 막아내는가
- 강도 (Stress) 테스트 : 시스템에 과다 정보량을 부과하여 과부하 시에도 시스템이 정상적으로 작동되는가
- 성능 (Performance) 테스트 : 사용자의 이벤트에 시스템이 응답하는 시간, 특정 시간 내에 처리하는 업무량, 사용자 요구에 시스템이 반응하는 속도 등을 테스트
- 구조 (Structure) 테스트 : 소프트웨어 내부의 논리적인 경로, 소스 코드의 복잡도 등을 평가
- 회귀 (Regression) 테스트 : 소프트웨어의 변경 또는 수정된 코드에 새로운 결함이 없음을 확인
- 병행 (Parallel) 테스트 : 변경된 소프트웨어와 기존 소프트웨어에 동일 데이터를 입력하여 결과를 비교
단위 테스트 (Unit Test)
- 구현 단계에서 각 모듈의 개발을 완료 후 개발자가 명세서의 내용대로 구현되었는지 테스트
- 모듈 내부의 구조를 구체적으로 볼 수 있는 구조적 테스트를 주로 시행
- 테스트할 모듈을 호출하는 모듈도 있고, 테스트할 모듈이 호출하는 모듈도 있다
- 개별 모듈을 시험
통합 테스트 (Integration Test)
- 시스템을 구성하는 모듈의 인터페이스와 결합을 테스트하는 것
- 빨리 파악하고자 할 때 상향식보다는 하향식 테스트가 좋다
- 단위 테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트
- 상향식 통합 테스트 (Bottom Up Integration Test)
- 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 기법
- 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터 (Cluster) 필요
- 상위 모듈 개발이 완료되지 않은 경우 드라이버 (Driver)를 사용하기도 한다
- 하위 모듈들을 클러스터 (Cluster)로 결합
- 하향식 통합 테스트 (Top Down Integration Test)
- 깊이 우선 방식 또는 넓이 우선(Breadth First) 방식이 있다
- 상위 컴포넌트를 테스트하고 점증적으로 하위 컴포넌트를 테스트한다
- 하위 컴포넌트 개발이 완료되지 않은 경우 스텁(Stub)을 사용하기도 한다
- 프로그램의 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트하는 기법
- 테스트 초기부터 사용자에게 시스템 구조를 보여줄 수 있다
- 상위 모듈에서는 테스트 케이스 사용하기 어려움
- 주요 제어 모듈은 작성된 프로그램을 사용
- 주요 제어 모듈의 종속 모듈은 스텁(Stub)으로 대체
※ 테스트 드라이버 (Test Driver) : 필요 데이터 인자를 통해 넘겨주고, 테스트 완료 후 그 결과값을 받는 역할을 하는 가상의 모듈 (상향식)
인수 테스트(Acceptance Test)
- 알파 테스트
- 개발자의 장소에서 사용자가 개발자 앞에서 행해지며, 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 검사하는 기법
- 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 기록한다
- 베타 테스트
- 필드 테스팅 (Field Testing)이라고도 불리며 개발자 없이 고객의 사용 환경에 소프트웨어를 설치하여 검사를 수행하는 인수검사 기법
- 선정된 최종 사용자가 여러 명의 사용자 앞에서 검사한다
혼합식 통합 테스트
- 하위 수준에서는 상향식 통합을, 상위 수준에서는 하향식 통합을 사용해 최적의 테스트를 지원하는 방식
- 샌드위치식 통합 테스트 방법
빅뱅 테스트
- 통합 테스트 (Integration Test) 중 비점진적 통합 방식
회귀 테스트 (Regression Testing)
- 이미 테스트된 프로그램의 테스팅 반복
- 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인
인터페이스 구현
EAI (Enterprise Application Integration)
- 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
- EAI 구축유형
- Point-to-Point
- 점 대 점으로 연결하는 방식, 변경 및 재사용이 어려움
- 가장 기본적인 애플리케이션 통합 방식으로, 애플리케이션을 1:1로 연결
- Hub & Spoke
- 단일 접점인 허브(Hub) 시스템을 통해 데이터를 전송하는 중앙 집중형 방식
- 확장 및 유지보수가 용이하지만 허브 장애 발생 시 시스템 전체에 영향을 미침
- Message Bus (ESB방식)
- 애플리케이션 사이에 미들웨어를 두어 처리하는 방식★
- 확장성이 뛰어나며 대용량 처리가 가능
- Hybrid
- Hub & Spoke와 Message Bus의 혼합방식이다
- 필요한 경우 한 가지 방식으로 EAI구현이 가능하다
- 데이터 병목현상을 최소화 할 수 있다
- Point-to-Point
인터페이스 데이터의 보안
- IPSec (IP Security)
- ESP는 발신지 인증, 데이터 무결성, 기밀성 모두를 보장한다.
- 운영 모드는 Tunnel 모드와 Transport 모드로 분류된다.
- AH는 발신지 호스트를 인증하고, IP 패킷의 무결성을 보장한다.
- SSL (Secure Socket Layer)
- 정보 보안의 안전한 거래를 허용하기 위해 Netscape사에서 개발한 인터넷 통신 규약 프로토콜
- TLS (Transport Layer Security)
- 1997년 SSL 3.0을 기반으로 프로토콜 초안 발표
- SSL과 차이점은 무결성 검사에 MD5대신 HMAC사용, 암호 알고리즘이 약간 다르다.
- S-HTTP (Secure HyperText Transfer Protocol)
- HTTP프로토콜 확장판
- HTTP 프로토콜에 송신자 인증, 메시지 기밀성과 무결성, 부인 방지 기능을 확장한 프로토콜
인터페이스 명세
- 인터페이스 구현 검증 도구
- xUnit
- Java(Junit), C++(Cppunit), .Net(Nunit), httpUnit 등 다양한 언어를 지원하는 단위 테스트 프레임워크
- STAF
- 서비스 호출, 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크
- 각 테스트 대상 분산 환경에 데몬을 사용하여 테스트 대상 프로그램을 통해 테스트를 수행하고, 통합하여 자동화하는 검증 도구
- NTAF
- STAF의 장점인 재사용 및 확장성과 FitNesse의 장점인 협업 기능을 통합한 NHN(네이버)의 테스트
- FitNesse
- 웹 기반 테스트케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크 자동화 프레임워크
- Selenium
- 다양한 브라우저 및 개발 언어를 지원하는 웹 애플리케이션 테스트 프레임워크
- watir
- Ruby 언어를 사용하는 애플리케이션 테스트 프레임워크
- xUnit
이식 (Migration)
- 기존 소프트웨어 시스템을 새로운 기술 또는 하드웨어 환경에서 사용할 수 있도록 변환하는 작업
프로그래밍 언어 선택 시 고려 사항
- 개발 정보시스템의 특성
- 사용자의 요구사항
- 컴파일러의 가용성
소프트웨어 품질 목표
- 이식성 (Portability)
- 하나 이상의 하드웨어 환경에서 운용되기 위해 쉽게 수정될 수 있는 시스템 능력
- 효율성 (Efficiency)
- 유용성 (Usability)
- 쉽게 배우고 사용할 수 있는 정도
- 정확성 (Correctness)
- 신뢰성 (Reliability)
- 무결성 (Integrity)
소스 코드 정적 분석 (Static Analysis)
- 소스 코드를 실행시키지 않고 분석
- 코드에 있는 오류나 잠재적인 오류를 찾아내기 위한 활동
- 자료 흐름이나 논리 흐름을 분석하여 비정상적인 패턴을 찾을 수 있다.
구현 단계 작업 절차
- 코딩 작업을 계획 → 코딩 → 컴파일 → 코드 테스트 → 디버깅
'IT 지식' 카테고리의 다른 글
[정보처리기사] 정보시스템 구축관리 (0) | 2023.03.26 |
---|---|
[정보처리기사] 프로그래밍 언어 활용 (0) | 2023.03.21 |
[정보처리기사] 데이터베이스 구축 (0) | 2023.03.16 |
[정보처리기사] 소프트웨어 설계 (0) | 2023.03.07 |