728x90
728x90

이번 시간은 정보처리기사 실기에서 다루는 10장 애플리케이션 테스트 관리에 대해서 정리를 해보았습니다.

 

* 이 글은 정보처리기사 공부 목적으로 쓴 글입니다. 그러다 보니 혹시 제가 잘못 작성한 부분이 있거나 수정이 필요하다면 댓글로 알려주시면 감사하겠습니다. 

 

 

소프트웨어 결함 - Error/오류: 사람에 의해 생성됨, Defect(결함)의 원인
- Defect / Bug : Error로 인해 포함된 결함. 제거되지 않으면 Failure나 Problem이 됨
- Failure / Problem : Defect가 실행될 때 발생하는 현상
테스트 커버리지 테스트의 수행 정도를 나타내는 값
기라코
1. 기능 기반 커버리지 : 전체 기능을 모수로 측정
2. 라인 커버리지 : 소스 코드 라인 수를 모수로 측정
3. 코드 커버리지 : 구문(코드) 자체가 얼마나 테스트됐는가를 측정
* 커버리지라 함은 대부분 코드 커버리지를 가리킴
리팩토링 기능을 변경하지 않고 내부 코드를 보완해 유지보수성을 향상시키는 것 (목적: 유지보수성 향상, 품질 향상, 생산성 향상, 유연한 시스템)
클린 코드 잘 작성되어 가독성 높고 단순한 코드
코드 품질 분석 도구 정적 분석 도구
  - pmd, cppcheck, SonarQube, checkstyle, cobertuna

동적 분석 도구
  - Avalanche, Valgrind
클린 코드 작성 원칙 가단의 중추
1. 가독성
2. 단순성
3. 의존성 최소화
4. 중복 제거
5. 추상화
베드 코드 유형 오문이 결침
1. 오염 : 비즈니스 기능을 수행하지 못하는 컴포넌트가 많음
2. 문서 부족 : 코드와 문서 불일치
3. 의미없는 이름
4. 높은 결합도
5. 아키텍처 침식 : 아키텍처가 변형되어 품질 저하
외계인 코드 아주 오래되거나 참고할 개발자/문서가 없어 유지보수가 힘든 코드
스파게티 코드 동작은 하지만 내부 코드가 복잡하여 파악이 어려운 코드
베드 코드 다른 개발자가 로직을 이해하기 어려운 코드
성능 테스트 수행 방법 도환시성
1. 성능 테스트 도구 설치
2. 환경설정
3. 시나리오 작성
4. 성능 테스트 실행 및 모니터링
성능 저하 원인 - DB 관련 락페 릭사커
1. DB Lock : Lock 해제 시까지 타임 아웃
2. 불필요한 DB Fetch : 대량의 데이터 요청으로 응답 시간 저하 / 결과 세트에서 마지막 위치로 커서 옮기는 작업 빈번 시 응답 저하
3. 연결 누수 Connection Leak : JDBC 객체 사용 후 미종료
4. 부적절한 DB Connection Pool Size : 커넥션 풀이 너무 작거나 큼
5. 커밋 관련 : 트랜잭션이 커밋되지 않고 반환되거나 불필요한 커밋이 잦음
성능 분석 처응경사
1
. 처리량 : 주어진 시간에 처리 가능한 트랜잭션(웹 페이지) 수
2. 응답시간 : 사용자 입력 → 응답 출력 개시까지 걸린 시간
3. 경과시간 : 사용자 입력 → 트랜잭션 처리 → 결과 출력까지 걸린 시간
4. 자원 사용률 : 트랜잭션 처리 동안 사용하는 자원 사용량
결함 우선순위 크+하미로
1. Critical : 이 결함으로 전체 기능 미동작
2. High : 이 결함으로 다른 기능 미동작
3. Medium
4. Low
결함 심각도 크메노마심 치주보경단
1. Critical (치명적) : 테스트 불가할 정도
2. Major (주요) : 기능이 기대와 다르게 동작
3. Normal (보통) : 사소한 기능 오작동
4. Minor (경미) : UI 오류
5. Simple (단순) : 미관성 해침
결함 에이징 분석 특정 결함의 지속 시간을 측정
결함 분류 시기지문
1. 시스템 결함 (비정상적인 종료, DB 에러)
2. 기능 결함 (요구사항 불일치, 스크립트 에러)
3. GUI 결함 (부정확한 메서지)
4. 문서 결함 (매뉴얼 불일치)
결함 추세 분석 테스트 시간 흐름에 따른 결함 수를 측정
결함 생명주기 Open → Reviewed → Assigned → Resolved → Verified → Closed
                               → Deferred → Reopen
                               → Closed
결함 분포 분석 특정 속성에 해당하는 결함 수를 측정
결함 분석 방법 고구일
1. 고립화: 입력값, 절차, 환경 중 무엇이 영향을 미치는지 파악
2. 구체화: 입력값, 절차, 환경을 정확히 파악
3. 일반화: 결함에 영향을 주는 요소를 최대한 일반화
결함 추이 분석 결함 지표를 분석해 추후 발생될 결함을 추정하는 작업
분추에
결함 관리 프로세스 계기검수 재추최
1. 결함 관리 계획
2. 결함 관리 DB에 기록
3. 결함 검토
4. 결함 수정
5. 결함 재검토
6. 결함 추적 및 모니터링
7. 최종 결함 분석 및 보고서 작성
테스트 리포팅 정요품 결실
1. 테스트 결과 정리
2. 테스트 요약문서 작성
3. 품질 상태 파악
4. 결과서 작성
5. 테스트 실행 절차 리뷰 및 평가
샌드위치 테스트 상위 모듈은 하향식, 하위 모듈은 상향식 테스트를 수행
테스트 자동화 도구 유형 정실성통
1. 정적 분석 도구 : 실행하지 않고 소스 코드를 테스트
2. 테스트 실행 도구 : 작성된 스크립트를 실행해 테스트 (데이터 주도 접근 방식 vs. 키워드 주도 접근 방식)
3. 성능 테스트 도구 : 처응경사 테스트
4. 테스트 통제 도구 : 형상 관리도구, 결함 추적 도구 등
상향식 테스트 최하위 모듈부터 위 방향으로 통합하며 테스트
1. 하위 모듈을 클러스터로 결합 (클러스터링)
2. 드라이버 개발
3. 통합된 클러스터 테스트
4. 드라이버를 실제 모듈로 대체
빅뱅 테스트 모든 컴포넌트를 통합해 한꺼번에 테스트 (비점증적 방식)
하향식 테스트 메인 제어 모듈로부터 아래 방향으로 통합하며 테스트
1. 초기에 시스템 구조 파악
2. 스텁 개발
3. 깊이-우선 또는 너비-우선 방식에 따라 스텁을 실제 모듈로 대체
테스트 드라이버 하위 모듈을 호출하거나 파라미터를 전달하는 모듈 (상향식 테스트에서 사용)
가짜 객체  협력 클래스 기능을 대체하기 위해 사용
테스트 스파이 테스트 대상 클래스와 협력 클래스로 가는 출력을 검증하는 데 사용
목 객체 사전에 조건을 입력하면 그 상황에 예정된 행위를 수행하는 가짜 객체
목 객체 유형 : 테스트 스텁, 테스트 드라이버, 테스트 스파이, 가짜 객체
테스트 스텁 특정 값을 리턴하거나 메시지를 출력하는 등 단순 기능을 수행하는 더미 모듈 (하향식 테스트에서 사용)
테스트 하네스 단위 테스트를 지원하기 위한 코드와 데이터
목스드 슈스케
인수 테스트 계약상 요구사항을 만족하는지 확인 (알파 테스트-통제된 환경에서 선택된 사용자가 개발자랑 vs. 베타 테스트-실제 환경에서)
시스템 테스트 통합된 단위시스템 검증
(기능적 요구사항 테스트, 비기능적 요구사항 테스트)
테스트 레벨 개발 단계에 따라 테스트를 분류한 것
단통시인
단위 테스트 설계 최소 단위인 모듈, 컴포넌트, 서브 루틴 등을 테스트
통합 테스트 단위 테스트를 통과한 모듈 간 인터페이스, 컴포넌트 상호작용 등을 테스트 (빅뱅 테스트, 상/하향식 테스트, 샌드위치 테스트)
참 오라클 모든 입력값의 기대결과를 생성 (오류를 모두 검출 가능)
일관성 검사 오라클 Consistent 변경이 있을 때, 수행 전후 결괏값이 동일한지 확인
휴리스틱 오라클 Heuristic 몇 개 입력값에 대해서는 정확한 결과를 제공하고, 나머지는 휴리스틱으로 처리 (샘플링 오라클 개선)
샘플링 오라클 특정 몇 개 입력값의 기대결과만 생성
테스트 오라클 테스트 결과가 참/거짓인지 판단하기 위해, 사전에 정의된 참값을 입력해 비교하는 기법 참샘휴일
테스트 케이스 구성요소 입출항 특환 의식
1. 입력 명세 (입력할 데이터 및 조건)
2. 출력 명세 (기대되는 결괏값)
3. 테스트 항목
4. 특수절차요구
5. 환경설정 (수행에 필요할 HW/SW 환경)
6. 의존성 기술 (TC 간 의존성)
7. 식별자
오류 추정 개발자가 범하기 쉬운 실수를 추정하고 이에 맞춰 테스트
경험 기반 테스트 테스터의 경험과 직관을 기반으로 한 테스트
탐오체특
체크리스트 테스트 내용을 목록화하여 테스트 (재사용 목적)
탐색적 테스트 TC 명세화 없이, 경험에 의존해 탐색적으로 테스트 수행 (테스터의 휴리스틱한 능력 필요)
특성테스트 ISO/IEC 9126 등 표준 품질 특성을 염두에 두고 테스트 수행
결정 테이블 테스트 (Decision Table Testing) 요구사항을 테이블로 구성해, 원인(조건)-결과(행위)를 조합해 테스트
페어와이즈 테스트 (Pairwise Testing) 테스트 데이터값을 최소 한 번씩 조합
유스케이스 테스트 (Use Case Testing) 유스케이스로 모델링 되어있을 때, 프로세스 흐름 기반으로 테스트 수행
비교 테스트 (Comparison Testing) 여러 버전의 프로그램에 같은 입력값을 넣어 결과를 비교
분류 트리 테스트 (Classification Tree Method Testing) 트리 구조로 분석 및 표현하여 테스트 (항목 선정 → 분류 트리 구축 → 분류 클래스 조합해 TC 생성)
동등 분할 테스트 (Equivalence Partitioning Testing) 입력 데이터 영역을 유효값/무효값으로 그룹핑해 대푯값 TC를 도출해 테스트
경곗값 분석 테스트 (Boundary Value Analysis Testing) 최솟값을 바로 위나 아래와 같이 입력 데이터의 극한 한계를 테스트 (2-Value, 3-Value)
원인-결과 그래프 테스트 (Cause-Effect Graphing Testing) 그래프를 통해 입력값 간의 관계 및 출력에 미치는 영향을 분석해, 효용성이 높은 TC를 선택해 테스트
상태 전이 테스트 (State Transition Testing) 이벤트에 의해 객체 상태가 전이되는 경우의 수를 측정 (상태 전이도 모델링 → 전이 트리 도출 → 전이 경로 TC → 비정상 전이 TC)
블랙박스 테스트 유형 상원동경비분페유결
1. 상태 전이 테스트
2. 원인-결과 그래프 테스트
3. 동치 분할 테스트
4. 경곗값 분석 테스트
5. 비교 테스트
6. 분류 트리 테스트
7. 페어와이즈 테스트
8. 유스케이스 테스트
9. 결과 테이블 테스트
블랙박스 테스트
요구사항 명세를 보며 기능 위주 테스트 (명세 기반 테스트, 동적 테스트)
제어 흐름 테스트 (Control Flow Testing)
제어 구조를 그래프로 나타내어 테스트
데이터 흐름 테스트 (Data Flow Testing)
제어 흐름 그래프에 데이터 사용 현황을 추가한 그래프를 통해 테스트
기본 경로 커버리지 (Base Path Coverage)
맥케이브의 순환복잡도를 기반으로, 수행 가능한 모든 경로를 테스트 (순환복잡도 계산: V=E-N+2 또는 V=P+1)
변경 조건/결정 커버리지 (MC/DC)   결정 포인트 내 개별 조건식이 다른 개별 조건식의 영향을 받지 않고, 전체 조건식에 독립적으로 영향을 주도록 수행
다중 조건 커버리지 (Multiple Condition Coverage)  모든 개별 조건식의 가능한 조합을 100% 보장
(개별조건식의 수가 N이라고 했을 때, 2^N의 결과가 나옴. 즉, 개별조건식이 2개면 2^2=4, 3개면 2^3=8)
조건 커버리지 (Condition Coverage)      결정 포인트 내 개별 조건식이 참/거짓을 한 번씩 수행 (전체 조건식에 주는 영향은 고려X)
조건/결정 커버리지 (Condition/Decision Coverage) 결정 포인트 내 전체 조건식도 참/거짓을 한 번씩, 개별 조건식도 참/거짓을 한 번씩 수행
결정 커버리지 (Decision Coverage) 결정 포인트 내 전체 조건식이 참/거짓을 한 번씩 수행 (=선택 커버리지, 분기 커버리지)
화이트박스 테스트 유형 구결조조변다기제데
1. 구문 커버리지
2. 결정 커버리지 (=선택 커버리지, 분기 커버리지)
3. 조건 커버리지
4. 조건/결정 커버리지
5. 변경 조건/결정 커버리지
6. 다중 조건 커버리지
7. 기본 경로 커버리지
8. 제어 흐름 테스트
9. 데이터 흐름 테스트
구문 커버리지 (Statement Coverage) 모든 명령문을 한 번 이상 수행. 결과에 무관하게 구문 실행 개수로 측정
화이트박스 테스트 모듈 내부 구조, 논리 경로를 테스트 (구조 기반 테스트, 동적 테스트)
정적분석 분석 도구의 도움을 받아 수행 (정적=소스코드 실행X)
- 코딩 표준
- 소스코드 복잡도 (맥케이브 순환복잡도 지표)
* V(G) = E - N + 2 또는 V(G) = P + 1
- 자료 흐름 분석
리뷰 SW의 결함을 검출하거나 진행 상황을 파악하는 활동으로 전문가가 수행
리뷰의 유형 1. 관리 리뷰
2. 기술 리뷰(=코드 리뷰)
3. 인스펙션: 저작자가 아닌 다른 전문가가 검토 (=동료 리뷰)
4. 워크스루: 사전에 자료 배포 후 짧은 회의
5. 감사: 표준 준수 확인, 제3기관 수행
정적 테스트 종류 리뷰 / 정적 분석
테스트 종류에 따른 분류 구명경
1. 구조 기반 (내부 논리 흐름에 따라 테스트 ⇒ 화이트박스)
2. 명세 기반 (명세서 기반으로 테스트 ⇒ 블랙박스)
3. 경험 기반 (유사 평가 경험을 기반으로 테스트 ⇒ 탐오체특: 탐색적 테스트, 오류 추정, 체크리스트, 특성 테스트)
성능 테스트 유형 부스스내
1. 부하 테스트 (Load) : 부하를 점점 늘려 임계점을 찾는 테스트
2. 스트레스 테스트 (Stress) : 임계점 이상의 부하를 가해 비정상적인 상황에서의 성능을 측정
3. 스파크 테스트 (Spark) : 짧은 시간 내 많은 사용자가 몰릴 때 반응 테스트
4. 내구성 테스트 (Endurance) : 오랜 시간 동안 높은 부하를 가해 성능 테스트
테스트 목적에 따른 분류 회안성 구회병
1. 회복 테스트 (Recovery) : 고의로 실패를 유도한 뒤, 정상 복귀를 테스트
2. 안전 테스트 (Security) : 보안 결함 점검
3. 성능 테스트 (Performance) : 요구에 대한 반응속도를 측정 (유형: 부스스내)
4. 구조 테스트 (Structure) : 논리 경로, 소스코드 복잡도 측정
5. 회귀 테스트 (Regression) : 오류 제거 후, 수정에 의해 유입된 오류가 없는지 테스트
6. 병행 테스트 (Parallel) : 변경된 시스템과 기존 시스템에 동일 데이터 입력 후 결괏값 비교
테스트 시각에 따른 분류 검증 (Verification): 개발자 시점, 규격(명세기능)을 만족하는가
확인 (Validation): 사용자 시점, 올바른 SW
테스트 케이스 Test Case 요구사항을 만족하는지 확인하기 위해 설계된 입력값, 실행조건, 기대결과로 구성된 명세서
테스트 스크립트 Test Script TC를 실행순서를 작성한 문서 (=테스트 스텝, 테스트 프로시저)
테스트 슈트 Test Suites 실행환경에 따라 구분해 놓은 TC의 집합
테스트 시나리오 Test Scenario 테스트할 기능, 상황을 정리해 절차를 명세화한 문서
SW 테스트의 기본 원칙 완살초 정오 집결
1) 완벽한 테스팅은 불가: 무한입력값, 무한경로
2) 살충제 패러독스: 같은 TC 반복 → 새 오류 검출 불가
3) 초기에 테스팅 시작: 후반에 갈수록 비용 증가 (요르돈의 법칙, 눈덩이 법칙)
4) 정황에 의존: SW 성격, 환경에 맞춰 테스트
5) 오류-부재의 궤변: 오류(결함)이 없더라도, 요구사항을 만족하지 못하면 품질이 높다고 할 수 없음
6) 결함집중: 결함 80%는 전체 모듈 20% 내에서 발견 (파레토 법칙)
7) 결함이 존재: 테스팅은 결함이 존재함을 밝히는 활동
SW 테스트의 필요성 발예향
1) 오류 발견 관점: 잠재된 오류를 발견
2) 오류 예방 관점: 사전에 오류를 발견하고 예방
3) 품질 향상 관점: 요구사항과 기대 수준을 만족하도록 품질 향상
SW 테스트 개발된 소프트웨어가 요구사항을 만족하는지 확인하고 결함을 검출하는 활동
728x90
300x250