티스토리 뷰
목차
1. 애플리케이션 테스트 케이스 설계
2. 애플리케이션 통합 테스트
3. 애플리케이션 성능 개선
애플리케이션 테스트 케이스 설계
소프트웨어 테스트 원리
💡 암기 TIP
결함, 완벽, 초기, 집중, 살충제, 정황, 오류 → 결 완 초 집 살정오(결근하고 완전 나쵸를 집에서 먹으면 살쪄요)
원리 | 설명 |
결함이 존재함을 밝히는 것 | 결함이 존재함을 밝히는 활동 |
완벽한 테스팅은 불가능 | 완벽하게 테스팅하려는 시도는 불필요한 시간과 자원낭비 |
초기에 테스팅 시작 | 요르돈의 법칙: 초기에 체계적인 테스트가 없으면 그 결과가 후반에 영향을 미쳐 비용이 커짐 |
결함집중 | 파레토 법칙: 소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견 |
살충제 패러독스 | 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾지 못함 |
정황에 의존적 | 소프트웨어의 성격에 맞게 테스트 실시 |
오류-부재의 궤변 | 요구사항을 충족시켜주지 못한다면, 결함이 없어도 품질이 높다고 볼 수 없다 |
화이트박스 테스트(White-Box Test)
응용프로그램의 코드 분석과 프로그램 구조에 대한 지식을 바탕으로 내부 구조와 동작을 검사하는 소프트웨어 테스트
화이트박스 테스트 유형 | 설명 |
구문(문장) 커버리지 (Statement) |
프로그램 내의 모든 명령문을 적어도 한 번 수행 |
결정(선택, 분기) 커버리지 (Decision, Branch) |
결정 포인트 내의 전체 조건식이 적어도 한 번은 T와 F의 결과가 되도록 수행 |
조건 커버리지 (Condition) |
결정 포인트 내의 개별 조건식이 적어도 한 번은 T와 F의 결과가 되도록 수행 |
조건/결정 커버리지 | 전체 조건식 + 개별 조건식 |
변경 조건/결정 커버리지 | 개별 조건식이 다른 개별 조건식에 영향을 받지 않고, 독립적으로 영향 |
다중 조건 커버리지 | 결정 조건 내 모든 개별 조건식의 가능한 모든 조합을 100% 보장 |
기본 경로 커버리지 (Base Path) |
수행 가능한 모든 경로를 수행 (맥케이브 복잡도 : Edge - Node + 2) |
제어 흐름 테스트 (Control Flow Test) |
프로그램 제어 구조를 그래프 형태로 나타내어 내부 로직 테스트 |
데이터 흐름 테스트 (Data Flow Test) |
제어 흐름 그래프에 데이터 사용현황 추가 |
블랙박스 테스트(Black-Box Test)
프로그램 외부 사용자가 요구사항 명세를 보면서 수행하는 테스트로, 기능 및 동작 위주의 테스트 진행
용어 | 설명 |
동등분할 테스트 (Equivalance Partitioning) |
입력 데이터의 영역을 유사한 도메인별로 그룹핑하여 대푯값 테스트 케이스 도출 |
경곗값 분석 테스트 (Boundary Value Analysis) |
등가 분할 후 경곗값에서 오류 발생 확률이 높으므로 경곗값을 포함하여 테스트 (최솟값 바로 위, 최대치 바로 아래 등 입력값의 극한 한계) |
결정 테이블 테스트 (Decision Table) |
요구사항의 논리와 발생조건을 테이블 형태로 나열, 조건과 행위를 모두 조합 |
상태 전이 테스트 (State Transition) |
어느 한 상태에서 다른 상태로 전이 되는 경우의 수를 수행 |
유스케이스 테스트 (Use Case) |
프로세스 흐름을 기반으로 테스트케이스를 명세화 |
분류 트리 테스트 (Classification Tree Method) |
SW의 일부 또는 전체를 트리구조로 분석 및 표현 |
페어와이즈 테스트 (Pairwise) |
테스트 데이터 값들 간에 최소한 한 번씩 조합하여 테스트 |
원인-결과 그래프 테스트 (Cause-Effect Graphing) |
그래프를 활용해 입력 데이터 간의 관계 및 출력에 미치는 영향 분석 |
비교 테스트 (Comparision) |
여러 버전의 프로그램에 같은 입력값을 넣어서 동일한 결과가 나오는지 테스트 |
테스트 시각에 따른 분류
용어 | 설명 |
검증(Verification) | 소프트웨어 개발 과정 테스트, 개발자 혹은 시험자 시각 |
확인(Validation) | 소프트웨어 결과 테스트, 사용자 시각 |
테스트 목적에 따른 분류
💡 암기 TIP
회복, 안전, 성능, 구조, 회귀, 병행 → 회안성 구회병 (회안성에 사는 구회병씨)
용어 | 설명 |
회복 테스트 | 고의로 실패 유도, 정상적 복귀 여부를 테스트 |
안전 테스트 | 소스 내 보안적 결함을 미리 검토 |
성능 테스트 | 응답시간, 반응 속도 등을 측정 |
구조 테스트 | 시스템의 내부 논리 경로, 소스 코드의 복잡도를 테스트 |
회귀 테스트 | 오류 제거와 수정에 의해 새로 유입된 오류가 없는지 반복 테스트 |
병행 테스트 | 변경된 시스템과 기존 시스템에 동일한 데이터 입력 후 결과 비교 |
성능 테스트의 상세 유형
💡 암기 TIP
부하, 스트레스, 스파이크, 내구성 → 부스스 내(부스스 일어나 내복을 입음)
- 부하 테스트: 시스템에 부하를 계속 증가시키며 임계점을 찾음
- 스트레스 테스트: 임계점 이상의 부하를 가해 비정상적 상황에서의 처리를 테스트
- 스파이크 테스트: 짧은 시간에 사용자가 몰릴 때 시스템의 반응 측정 테스트
- 내구성 테스트: 오랜 시간 동안 시스템에 높은 부하를 가해 반응 테스트
테스트 케이스(Test Case)
특정 요구사항에 준수하는 지를 확인하기 위해 개발된 입력값, 실행 조건, 예상된 결과의 집합
테스트 시나리오(Test Scenario)
애플리케이션의 테스트 되어야 할 기능 및 특징, 테스트가 필요한 상황을 작성
테스트 오라클(Test Oracle)
테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교하는 방법
💡 암기 TIP
참, 샘플링, 휴리스틱, 일관성 → 참샘 휴일(참새 방앗간 휴일)
오라클 종류 | 설명 |
참 오라클 | 모든 입력값에 대해 기대하는 결과를 생성, 오류 모두 검출 |
샘플링 오라클 | 특정한 몇 개의 입력값에 대해서만 결과 제공 |
휴리스틱 오라클 | 샘플링 오라클 개선 + 나머지는 휴리스틱 처리 |
일관성 오라클 | 애플리케이션 변경되었을 때, 전과 후의 결괏값이 동일한지 확인 |
테스트 레벨
함께 편성되고 관리되는 테스트 활동의 그룹
💡 암기 TIP
단위, 통합, 시스템, 인수 → 단통시인(단통법에 걸린 시인)
용어 | 설명 |
단위 테스트 | 단위 모듈, 서브 루틴 등을 테스트 |
통합 테스트 | 모듈 사이의 인터페이스, 컴포넌트 간의 상호작용 테스트 |
시스템 테스트 | 통합된 단위 시스템의 기능이 정상적으로 수행되는지 테스트 |
인수 테스트 | 계약상의 요구사항이 만족되었는지 확인 |
인수 테스트 용어 정리
- 알파 테스트: 선택된 사용자가 개발자 환경에서 통제된 상태로 개발자와 함께 수행
- 베타 테스트: 실제 환경에서 일정 수의 사용자에게 SW를 사용하게 하고 피드백
애플리케이션 통합 테스트
목(Mock) 객체
객체지향 프로그램에서는 컴포넌트 테스트 수행 시 테스트 되는 메소드는 다른 클래스의 객체에 의존하는데, 이런 경우 메소드를 고립화하여 테스트하는 것이 불가능하므로 독립적인 컴포넌트 테스트를 위해서는 스텁의 객체지향 버전인 목(Mock) 객체가 필요
💡 암기 TIP
더미, 스텁, 드라이버, 스파이, 가짜 → 더스드 스가
용어 | 설명 |
더미 객체 | 객체만 필요하고 기능까지는 필요하지 않은 경우 |
테스트 스텁 | 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행 (하위 모듈 개념) |
테스트 드라이버 | 테스트 대상 하위 모듈 호출, 파라미터 전달 (상위 모듈 개념) |
테스트 스파이 | 테스트 대상 클래스와 협력하는 클래스 |
가짜 객체 | 실제 협력 클래스의 기능을 대체 할 경우 사용 |
통합 테스트
소프트웨어 각 모듈 간의 인터페이스 관련 오류 및 결함을 찾아내기 위한 기법
💡 암기 TIP
하향식(스텁), 상향식(드라이버) → 하스 상드(하얀 스타킹을 상으로 드립니다)
용어 | 설명 |
빅뱅 테스트 | 모든 모듈을 통합 후 테스트 수행 |
상향식 테스트 | 최하위 모듈부터 점진적으로 수행 (테스트 드라이버) |
하향식 테스트 | 최상위 모듈부터 하위 모듈 통합하며 수행 (테스트 스텁) |
샌드위치 테스트 | 상위는 하향식 + 하위는 상향식 |
테스트 자동화 도구 유형
💡 암기 TIP
정적 분석, 실행,성능, 통제 → 정 실성 통제 (정신적으로 실성한 환자들 통제)
용어 | 설명 |
정적 분석 도구 | 만들어진 SW를 실행하지 않고 분석, 코딩 표준, 스타일, 복잡도 등을 분석 |
테스트 실행 도구 | 작성된 스크립트를 실행 (데이터 주도 접근, 키워드 주도 접근) |
성능 테스트 도구 | 처리량, 응답 시간, 경과 시간, 자원 사용률에 대해 가상의 사용자를 생성 및 분석 |
테스트 통제 도구 | 테스트 관리, 형상 관리, 결함 추적/관리 도구 |
테스트 하네스(Test Harness)
애플리케이션 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위한 코드와 데이터
💡 암기 TIP
드라이버, 슈트, 스텁, 케이스, 스크립트, 목 → 드 슈스케 스목 (더 슈스케는 수목에 한다)
하네스 구성요소 | 설명 |
테스트 드라이버 | 하위 모듈 호출 (상위 모듈 개념) |
테스트 슈트 | 테스트 케이스의 집합 |
테스트 스텁 | 호출하는 타 모듈의 기능을 단순히 수행 (하위 모듈 개념) |
테스트 케이스 | 요구사항을 준수하는 지를 확인하기 위해 개발된 입력값, 실행조건, 예상 결과 집합 |
테스트 스크립트 | 자동화된 테스트 실행 절차에 대한 명세 |
목 오브젝트 | 사용자 행위를 조건부로 사전에 입력해두면, 그 상황에 예정된 행위 수행 |
테스트 커버리지(Test Coverage)
주어진 테스트 케이스에 의해 수행되는 SW의 테스트 범위를 측정하는 테스트 품질 측정 기준
💡 암기 TIP
기능, 라인, 코드 → 기 라인 코(기존 라인의 코드)
유형 | 설명 |
기능 기반 커버리지 | 모수: 전체 기능 / 측정: 실제 수행된 기능의 수 |
라인 커버리지 | 모수: 전체 소스코드 / 측정: 실제 수행된 라인 |
코드 커버리지 | 소스 코드의 구문, 조건, 결정 등 구조 코드 자체가 얼마나 테스트 되었는지를 측정 |
결함 심각도별 분류
💡 암기 TIP
치명적, 주요, 보통, 경미, 단순 → 치주 보 경단(치주염이 생긴걸 보니 경단을 먹었다)
용어 | 설명 |
치명적(Critical) 결함 | 기능이나 제품의 테스트 완전히 방해 |
주요(Major) 결함 | 기능이 기대와 다르게 동작 |
보통(Normal) 결함 | 일부 기능 부자연스럽고 사소한 기능 오작동 |
경미한(Minor) 결함 | 사용상의 불편, UI 잘림 |
단순(Simple) 결함 | 사소한 버그, 미관상 좋지 않음 |
결함 우선순위
결정적(Critical) → 높음(High) → 보통(Medium) → 낮음(Low)
애플리케이션 성능 개선
애플리케이션 성능 측정 지표
용어 | 설명 |
처리량 (Throughput) |
주어진 시간에 처리할 수 있는 트랜잭션의 수 |
응답 시간 (Response Time) |
사용자 입력이 끝난 후, APP의 응답 출력이 개시될 때까지의 시간 |
경과 시간 (Turnaround Time) |
사용자가 요구를 입력한 시점부터 트랜잭션을 처리 후 결과를 출력할 때까지 걸리는 시간 |
자원 사용률 (Resource Usage) |
트랜잭션을 처리하는 동안 사용하는 CPU 사용량, 메모리 사용량, 네트워크 사용량 |
배드 코드(Bad Code)
다른 개발자가 로직을 이해하기 어렵게 작성된 코드
용어 | 설명 |
외계인 코드 (Alien Code) |
아주 오래되거나 참고 문서 또는 개발자가 없어 유지보수가 매우 어려운 코드 |
스파게티 코드 (Spaghetti Code) |
작동은 정상적으로 하나, 코드가 복잡하게 얽혀 가독성이 매우 떨어짐 |
알 수 없는 변수명 | 변수나 메소드의 이름 정의를 알 수 없는 코드 |
로직 중복 | 동일한 처리 로직이 중복되게 작성된 코드 |
클린 코드(Clean Code)
잘 작성되어 가독성이 높고, 단순하며, 의존성을 줄이고, 중복을 최소화하여 깔끔하게 잘 정리된 코드를 말함
💡 암기 TIP
가독성, 단순성, 의존성, 중복성, 추상화 → 가단의 중추
클린 코드 작성 원칙 | 설명 |
가독성 | 이해하기 쉬운 용어 사용, 들여쓰기 사용 |
단순성 | 한 번에 한 가지 처리만 수행 |
의존성 최소 | 영향도를 최소화 |
중복성 제거 | 중복된 코드를 제거 |
추상화 | 클래스/메소드/함수에 대해 동일한 수준의 추상화 구현 |
소스 코드 품질분석 도구
정적분석 도구
도구 | 설명 |
pmd | 자바 및 타 언어 소스코드에 대한 버그, 데드코드 분석 |
cppcheck | C/C++ 코드에 대한 메모리 누수, 오버플로우 분석 |
SonarQube | 소스 코드 품질 통합 플랫폼 |
checkstyle | 자바 코드에 대한 코딩 표준 검사 |
동적분석 도구
용어 | 설명 |
Avalanche | Valgrind 프레임워크 및 STP 기반 소프트웨어 에러 및 취약점 동적 분석 |
Valgrind | 자동화된 메모리 및 스레드 결함 발견 분석 |
리팩토링(Refactoring)
유지보수 생산성 향상을 목적으로 기능을 변경하지 않고, 복잡한 소스 코드를 수정, 보완해 가용성 및 가독성을 높임
출처: https://die-romantische-schule.tistory.com/52?category=867377 [낭만주의 학교:티스토리]
'시험 > 정보처리기사' 카테고리의 다른 글
[정처기 실기] 9. 소프트웨어 개발 보안 구축 - 소프트웨어 개발 보안 설계 (0) | 2022.07.28 |
---|---|
[정처기 실기] 8. 서버 프로그램 구현 (0) | 2022.07.24 |
[정처기 실기] 12. 제품 소프트웨어 패키징 (0) | 2022.07.21 |
[정처기 실기] 11. 응용 SW 기초 기술 활용 - 기본 개발환경 구축하기 (0) | 2022.07.21 |
[정처기 실기] 11. 응용 SW 기초 기술 활용 - 네트워크 기초 활용 (0) | 2022.07.21 |