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
'개인공부 > 정보처리기사' 카테고리의 다른 글
[정보처리기사 실기] 12. 제품 소프트웨어 패키징 (0) | 2024.05.05 |
---|---|
[정보처리기사 실기] 11. 응용 SW 기초 기술 활용 (1) | 2024.05.05 |
[정보처리기사 실기] 9. 소프트웨어 개발 보안구축 (1) | 2024.05.04 |
[정보처리기사 실기] 8. 서버 프로그램 구현 (1) | 2024.05.03 |
[정보처리기사 실기] 7. SQL 응용 (4) | 2024.05.03 |