반응형
91. 애플리케이션 테스트(B)
1. 애플리케이션 테스트
- 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 개발된 SW가 고객의 요구사항을 만족시키는지 확인(Validation), 기능을 정확히 수행하는지 검증(Verification)
2. 애플리케이션 테스트의 기본 원리
- 완벽한 테스트 불가능
- 결함을 줄일 수 있지만 결함이 없다고 증명할 수는 없음
- 파레토 법칙(Pareto Principle)
- 20%에 해당하는 코드에서 전체 결함의 80%가 나옴
- 살충제 패러독스 (Pesticed Paradox)
- 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상
- 테스팅은 정황(Context)의존
- SW의 특징, 테스트 환경, 테스터의 역량 등 정황(Context)에 따라 테스트 결과가 달라짐. 정황에 따라 테스트를 다르게 수행해야 함
- 오류-부재의 궤변(Absence of Errors Fallacy)
- SW의 결함을 모두 제거해도 사용자의 요구사항을 만족시키지 못하면 해당 SW는 품질이 높다고 할 수 없음
- 테스트와 위험은 반비례
- 테스트를 많이 하면 할수록 미래에 발생할 위험을 줄일 수 있음
- 테스트의 점진적 확대
- 테스트는 작은 부분에서 점점 확대해야함
- 테스트의 별도 팀 수행
- 테스트는개발자와 관계없는 별도 팀에서 수행해야 함
92. 애플리케이션 테스트의 분류 (B)
1. 프로그램 실행 여부에 따른 테스트
- 정적 테스트
- 프로그램을 실행하지 않고 명세서나 코드를 대상으로 분석하는 테스트
- 코딩 표준, 코딩 스타일, 코드 복잡도, 남은 결함 등을 발견하기 위해 사용
- 워크스루, 인스펙션, 코드 검사 등
- 동적 테스트
- 프로그램을 실행하여 오류를 찾음
- 모든단계에서 테스트 수행
- 블랙박스/화이트박스 테스트
2. 테스트 기반(Test Bases)에 따른 테스트
- 명세 기반 테스트
- 사용자의 요구사항에 대한 명세를 빠짐없이 TC로 만들어 구현하고 있는지 확인하는 테스트
- 동등 분할, 경계 값 분석 등
- 구조 기반 테스트
- SW 내부의 논리 흐름에 따라 TC를 작성하고 확인하는 테스트
- 구문 기반, 결정 기반, 조건 기반 등
- 경험 기반 테스트
- 유사 SW나 기술 등에 대한 테스터의 경험을 기반으로 수행
- 요구사항에 대한 명세가 불충분하거나 테스트 시간에 제약이 있는 경우 효과적
- 에러 추정, 체크리스트, 탐색적 테스팅
3. 시각에 따른 테스트
- 검증(Verification)
- 개발자의 시각에서 테스트
- 명세서대로 되었는지 테스트
- 확인(Validation)
- 사용자의 시각에서 테스트
- 요구한대로 제품이 완성됐는지, 제품이 정상 동작하는지 테스트
4. 목적에 따른 테스트
- 회복(Recovery) 테스트
- 시스템에 결함을 주어 실패하도록 한 후 올바르게 복구되는지 확인하는 테스트
- 안전(Security) 테스트
- 시스템에 설치된 보호 도구가 침입으로부터 보호할 수 있는지 확인하는 테스트
- 강도(Stress) 테스트
- 과도한 정보나 빈도 등을 부과하여 과부하 시에 정상적으로 실행되는지 확인하는 테스트
- 성능(Performance) 테스트
- 실시간 성능이나 전체적인 효율성을 진단하는 테스트, 응답시간, 처리량 등을 테스트
- 구조(Structure) 테스트
- 내부의 경로, 코드의 복잡도 등을 평가하는 테스트
- 회귀(Regression) 테스트
- SW의 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트
- 병행(Parallel) 테스트
- 변경된 SW와 기존 SW에 동일한 테이터를 입력하여 결과를 비교하는 테스트
93. 테스트 기법에 따른 애플리케이션 테스트 (A)
1. 화이트박스 테스트(White Box Test)
- 모듈의 원시 코드를 오픈시킨 상태에서 원시코드의 논리적인 모든 경로를 테스트하여 TC를 설계하는 방법
- 모듈 안의 작동을 직접 관찰
- 원시 코드(모듈)의 모든 문장을 한 번 이상 실행함으로써 수행
2. 화이트박스 테스트의 종류
- 기초 경로 검사 (Base Path Testing)
- TC 설계자가 절자척 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트
- 대표적인 화이트박스 테스트
- 제어 구조 검사(Control Structure Testing)
- 조건 검사(Condition Testing) : 프로그램 모듈 내에 있는 논리적 조건을 테스트하는 TC 설계 기법
- 루프 검사(Loop Testing) : 반복 구조에 초점을 맞춰 실시하는 TC 설계 기법
- 데이터 흐름 검사 (Data Flow Testing) : 변수의 정의와 변수 사용의 위치에 초점을 맞춘 TC 설계 기법
3. 화이트박스 테스트의 검증 기준
- 문장 검증 기준(Statement Coverage)
- 소스 코드의 모든 구문이 한 번 이상 수행되도록 TC 설계
- 분기 검증 기준(Branch Coverage)
- 코드의 모든 조건문에 대해 조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행되도록 TC 설계
- 결정 검증 기준(Decision Coverage)라고도 함
- 조건 검증 기준(Condition Coverage)
- 조건문에 포함된 개별 조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행되도록 TC 설계
- 분기/조건 기준(Branch/Condition Coverage)
- 분기 검증과 조건 검증을 모두 만족하는 설계
4. 블랙박스 테스트
- SW가 수행할 특정 기능을 알기 위해 각 기능이 완전히 작동되는 것을 입증하는 테스트, 기능 테스트라고도 함
- 사용자의 요구사항 명세서를 보며 테스트
- 주로 구현된 기능을 테스트
- SW 인터페이스를 통해 실시
5. 블랙박스 테스트의 종류
- 동치 분할 검사(Equivalence Partitioning Testing, 동치 클래스 분해)
- 입력조건에 맞는 조건과 맞지 않는 조건의 개수를 균등하게 하여 테스트
- 동등 분할 기법이라고도 함
- 경계값 분석(Boundary Value Analysis)
- 입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높음
- 입력 조건의 경계값을 TC로 선정하여 테스트
- 원인-효과 그래프 검사 (Cause-Effect Graphing Testing)
- 입력과 출력에 영향을 미치는 상황을 체계적으로 분석하여 효용성이 높은 TC를 선정하여 검사
- 오류 예측 검사 (Error Guessing)
- 과거의 경험이나 확인자의 감각으로 테스트
- 비교 검사(Comparison Testing)
- 여러 버전의 프로그램에 동일한 테스트를 넣어 동일한 결과가 나오는지 테스트
94. 개발 단계에 따른 애플리케이션 테스트 (A)
1. 개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트로 분류됨. 이를 테스트 레벨이라 함
- 개발단계와 테스트를 연결한 것을 V-모델 이라함
2. 단위 테스트(Unit Test)
- 코딩 직후 SW 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트
- 인터페이스, 외부적 IO, 자료 구조, 독립적 기초 경로, 오류 처리 경로, 경계 조건 등을 검사
- 사용자의 요구사항을 기반으로 한 기능성 테스트를 최우선
- 구조 기반과 명세 기반으로 나뉘지만 주로 구조 기반 테스트를 시행
3. 통합 테스트(Integration Test)
- 단위 테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트
- 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사
4. 시스템 테스트(System Test)
- 개발된 SW가 완벽하게 수행되는가를 점검하는 테스트
- 기능적 요구사항과 비기능적 요구사항으로 구분하여 각각을 만족하는지 테스트
5. 인수 테스트(Acceptance Test)
- 개발한 SW가 사용자의 요구사항을 충족하는지에 중점을 두고 테스트
- 사용자가 직접 테스트
- 인수 테스트 종류
사용자 인수 테스트
- 사용자가 시스템 사용의 적절성 여부를 확인
운영상의 인수 테스트
- 시스템 관리자가 시스템 인수시 수행하는 테스트
- 백업/복원 시스템, 재난 복구, 사용자 관리, 정기 점검 등 확인
계약 인수 테스트
- 계약상의 인수/검수 조건을 준수하는지 확인
규정 인수 테스트
- SW가 정부 지침, 법규, 규정 등 규정에 맞게 개발되었는지 확인
알파 테스트
- 개발자의 장소에 사용자가 개발자 앞에서 하는 테스트
- 테스트는 통제된 환경에서 행해짐, 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인
베타 테스트
- 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트
- 실업무를 가지고 사용자가 직접 테스트
95. 통합 테스트(A)
1. 통합 테스트(Integration Test)
- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트
- 비점진적 통합 방식
- 단계적으로 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트
- 빅뱅 통합 테스트 방식
- 점진적 통합 방식
- 모듄 단위로 단계적으로 통합하면서 테스트
- 하향식 통합 테스트, 상향식 통합 테스트, 혼합식 통합 테스트
2. 하향식 통합 테스트(Top Down Integration Test)
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
- 깊이 우선 통합법(DFS), 넓이 우선 통합법(BFS) 사용
- 절차
- 주요 제어 모듈은 작성된 프로그램을 사용, 주요 제어 모듈의 종속 모듈들은 스텁(Stub)으로 대체
- 깊이 우선, 넓이 우선 등의 방식에 따라 하위 모듈인 스텁들이 한번에 하나씩 실제 모듈로 교체됨
- 모듈이 통합될 때마다 테스트 실시
- 새로운 오류가 발생하지 않음을 보증하기 위해 회귀테스트 실시
* 스텁 : 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구, 일시적인 필요한 조건만을 가지고 있는 시험용 모듈
3. 상향식 통합 테스트 (Bottom Up Integration Test)
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
- 절차
- 하위 모듈들을 클러스터(Cluster)로 결합
- 상위 모듈에서 테이터의 입출력을 확인하기 위해 더미 모듈인 드라이버(Driver)를 작성
- 통합된 클러스터 단위로 테스트
- 테스트가 완료되면 클러스터는 프로그램 구조의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체
* 클러스터(Cluster) : 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹을 의미
* 테스트 드라이버(Test Driver) : 테스트 대상의 하위 모듈을 호출하고, 파라미터를 전달하고, 모듈 테스트 수행 후의 결과를 도출하는 도구
4. 혼합식 통합 테스트
- 하위 수준에서는 상향식, 상위 수준에서는 하향식을 사용하여 최적의 테스트를 지원
- 샌드위치식 통합 테스트 방법이라고도 함
5. 회귀 테스팅(Regression Testing)
- 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인하는 테스트
- 이미 테스트된 프로그램의 테스팅을 반복하는 것
96. 테스트 케이스 / 테스트 시나리오 / 테스트 오라클 (B)
1. 테스트 케이스(Test Case)
- 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 테스트 항목에 대한 명세서
2. 테스트 시나리오(Test Scenario)
- TC를 적용하는 순서에 따라 여러 개의 TC를 묶은 집합
- TC를 적용하는 구체적인 절차를 명세
3. 테스트 오라클 (Test Oracle)
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교하는 기법
- 특징
- 제한된 검증 : 테스트 오라클을 모든 TC에 적용할 수 없음
- 수학적 기법 : 테스트 오라클의 값을 수학적으로 구할 수 있음
- 자동화 기능 : 자동화할 수 있음
4. 테스트 오라클 종류
- 참(True) 오라클
- 모든 TC의 입력 값에 대해 기대하는 결과를 제공하는 오라클
- 발생된 모든 오류를 검출할 수 있음
- 샘플링(Sampling) 오라클
- 특정한 몇몇 TC의 입력 값에 대해서만 제공
- 오라클로 전수 테스트가 불가능한 경우 사용
- 추정(Heuristic) 오라클
- 특정 TC의 입력 값에 대해 기대 결과를 제공
- 나머지 입력 값들에 대해서는 추정으로 처리
- 일관성 검사(Consistent) 오라클
- 애플리케이션에 변경이 있을 때, TC의 수행 전과 후의 값이 동일한지 확인하는 오라클
97. 테스트 자동화 도구 (C)
1. 테스트 자동화
- 종류
- 정적 분석 도구
- 테스트 실행 도구
- 성능 테스트 도구
- 테스트 통제 도구
2. 정적 분석 도구(Static Analysis Tools)
- 프로그램을 실행하지 않고 분석하는 도구
- 소스 코드의 코딩 표준, 코딩 스타일, 코드복잡도 등 발견하기 위해 사용
3. 테스트 실행 도구 (Test Execution Tools)
- 스크립트 언어를 사용하여 테스트를 실행하는 도구
- 데이터 주도 접근 방식 : 스프레드시트에 테스트 데이터를 저장하고 이를 읽어 실행하는 방식
- 키워드 주도 접근 방식 : 스프레드시트에 테스트를 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장하여 실행하는 방식
4. 성능 테스트 도구 (Performance Test Tools)
- 가상의 사용자를 만들어 테스트를 수행하여 성능의 목표 달성 여부를 확인하는 도구
- 처리량, 응답시간, 자원 사용률 등 확인
5. 테스트 통제 도구 (Test Control Tools)
- 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행
- 종류 : 형상 관리 도구, 겸함 추적/관리 도구 등
6. 테스트 하네스 도구 (Test Harness Tools)
- 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스 : 컴포넌트 및 모듈을 테스트하는 환경의 일부분, 테스트를 지원하기 위해 생성된 코드와 데이터를 의미
7. 테스트 하네스의 구성 요소
- 테스트 드라이버
- 테스트 대상의 하위 모듈을 호출하고, 파라미터를 전달하고, 모듈 테스트 수행 후의 결과를 도출하는 도구
- 테스트 스텁
- 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구, 일시적으로 필요한 조건만을 가지고 있는 테스트용 모듈
- 테스트 슈트 (Test Suites)
- 테스트 대상 컴포넌트나 모듈, 시스템에 사용되는 TC의 집합
- 테스트 케이스
- 테스트 항목의 명세서
- 테스트 스크립트
- 자동화된 테스트 실행 절차에 대한 명세서
- 목 오브젝트 (Mock Object)
- 사전에 사용자의 행위를 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행하는 객체
99. 애플리케이션 성능 분석 (B)
1. 애플리케이션 성능
- 최소한의 자원을 사용하여 최대한 많은 기능을 처리하는 정도
- 측정 지표
- 처리량
- 응답 시간
- 경과 시간
- 자원 사용률
100. 복잡도
2. 시간 복잡도
- 빅오 표기법 (O) : 최악
- 세타 표기법 (θ) : 평균
- 오메가 표기법 (Ω) : 최상
3. 빅오 표기법 최악의 알고리즘 시간복잡도
- O(1)
- 스택의 삽입(Push), 삭제(Pop)
- O(log₂n)
- 이진 트리, 이진 탐색(검색)
- O(n)
- for문
- O(nlog₂n)
- 힙 정렬, 2-way 합병 절렬
- O(n²)
- 삽입 정렬, 쉘 정렬, 선택 정렬, 버블 정렬, 퀵 정렬
- O(2ⁿ)
- 피보나치 수열
4. 순환 복잡도
순환 복잡도 (Cyclomatic Complexity), 맥케이브 순환도 (McCabe's Cyclomatic), 제어 흐름도 이론에 기초를 둠
제어 흐름도 G에서 순환 복잡도 V(G)
V(G) = E - N + 2
E : 화살표 수
N : 노드의 수
순환복잡도 V(G) = 화살표수 (11) - 노드의 수(9) + 2 = 4
영역의 수 = 내부 영역(1, 2, 3) + 외부 영역(4) = 4
아래 제어 흐름도그래프의 McCabe의 Cyclomatic 수는?
영억 4개 -> 4
101. 애플리케이션 성능 개선 (B)
1. 소스 코드 최적화
- 나쁜 코드(Bad Code)를 배제하고, 클린 코드(Clean Code)로 작성하는 것
- 클린 코드 : 누구나 쉽게 이해하고 수정할 수 있는 단순, 명료한 코드, 잘 작성된 코드
- 나쁜 코드 : 로직이 복잡하고 이해하기 어려운 코드
- 스파게티 코드 : 코드의 로직이 서로 복잡하게 얽힌 코드
- 외계인 코드 : 아주 오래되거나 참고문서 또는 개발자가 없어 유지보수가 어려운 코드
2. 클린 코드 작성 원칙
- 가독성
- 누구나 쉽게 읽어야 함
- 쉬운 변수명, 들여쓰기
- 단순성
- 코드를 단순하게
- 하나의 함수는 한 가지의 기능만
- 의존성 배제
- 코드가 다른 모듈에 미치는 영향 최소화
- 중복성 최소화
- 코드의 중복을 최소화
- 추상화
- 상위 클래스/메소드/함수에서는 간략하게 애플리케이션의 특성을 나타내고, 상세 내용은 하위 클래스/메소드/함수에서 구현
4. 소스 코드 품질 분석 도구
- 정적 분석 도구 : 코드를 실행하지 않고 분석
- 동적 분석 도구 : 코드를 실행하여 메모리 누수, 스레드 결함 등을 분석
반응형
'정보처리기사 > 실기' 카테고리의 다른 글
정보처리기사 실기 9장 - 소프트웨어 개발 보안 구축 (3) | 2024.07.15 |
---|---|
정보처리기사 실기 8장 - SQL 응용 (0) | 2024.07.13 |
정보처리기사 실기 6장 - 화면 설계 (0) | 2024.07.09 |
정보처리기사 실기 5장 - 인터페이스 구현 (0) | 2024.07.05 |
정보처리기사 실기 4장 - 서버프로그램 구현 (0) | 2024.07.03 |
댓글