오브의 빛나는 별

[정보처리기사] 7장 애플리케이션 테스트 관리 본문

정보처리기사

[정보처리기사] 7장 애플리케이션 테스트 관리

오브의 별 2025. 3. 26. 10:30
반응형

애플리케이션 테스트: 애플리케이션에 잠재되어있는 결함을 찾아내는 일련의 행위 또는 절차
파레토 법칙(Pareto Principle): 애플리케이션의 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙
살충제 패러독스(Pesticide Paradox): 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상
오류-부재의 궤변(Absence of Errors Fallacy): 소프트웨어의 결함을 모두 제거해도 사용자의 요구사항을 만족 시키지 못하면 해당 소프트웨어는 품질이 높다고 말할 수 없는것


실행 여부에 따른 테스트
정적 테스트: 프로그램을 실행하지 않고, 명세서나 소스 코드를 대상으로 분석하는 테스트. 워크스루, 인스펙션, 코드 검사 등
동적 테스트: 프로그램을 실행하여 오류를 찾는 테스트. 블랙박스 테스트, 화이트박스 테스트


테스트 기반에 따른 테스트
명세 기반 테스트: 사용자 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구분하고 있는지 확인하는 테스트. 동등 분할, 경계 값 분석 등
- 구조 기반 테스트: 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인하는 테스트. 구문 기반, 결정 기반, 조건 기반 등
경험 기반 테스트: 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행하는 테스트. 사용자의 요구사항에 대한 명세가 불충분하니 테스트 시간에 제약이 있는 경우 수행하면 효과적. 에러 추정, 체크리스트, 탐색적 테스트


검증 테스트(Verification): 개발자의 시각에서 제품의 생산 과정을 테스트하는 것. 제품이 명세서대로 완성됐는지를 테스트
확인 테스트(Validation): 사용자의 시각에서 생산된 제품의 결과를 테스트하는 것. 사용자가 요구한 대로 제품이 완성됐는지, 제품이 정상적으로 동작하는지 테스트


목적에 따른 테스트
회복 테스트: 시스템에 여러 가지 결함을 주어 실패하도록 한 후 올바르게 복구되는지를 확인하는 테스트
안전 테스트: 시스템에 설치된 시스템 보호 도구가 불법적인 침입으로부터 시스템을 보호할 수 있는지를 확인하는 테스트
강도 테스트: 시스템에 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 소프트웨어가 정상적으로 실행되는지를 확인하는 테스트
성능 테스트: 소프트웨어의 실시간 성능이나 전체적인 효율성을 진단하는 테스트로, 소프트웨어의 응답 시간 처리량 등을 테스트
구조 테스트: 소프트웨어 내부의 논리적인 경로, 소스 코드의 복잡도 등을 평가하는 테스트
회귀 테스트: 소프트웨어의 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트
병행 테스트: 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트

화이트박스 테스트: 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법. 원시 코드의 모든 문장을 한 번 이상 실행함으로써 수행
기초 경로 검사(Base Path Testing)
제어 구조 검사(Control Structure Testing): 조건 검사(Condition Testing), 루프 검사(Loop Testing), 데이터 흐름 검사(Data Flow Testing)


화이트박스 테스트의 검증 기준
문장 검증 기준(Statement Coverage): 소스코드의 모든 구문이 한 번 이상 수행되도록 테스트 케이스를 설계
분기 검증 기준(Branch Coverage): 소스코드의 모든 조건문에 대해 조건식의 결과가 참/거짓 인 경우가 한 번 이상 수행되도록 테스트 케이스를 설계. 결정 검증 기준(Decision Coverage)
조건 검증 기준(Condition Coverage): 소스코드의 조건문에 포함된 개별 조건식의 결과가 참/거짓 인 경우가 한 번 이상 수행되도록 테스트 케이스를 설계
분기/조건 기준(Branch/Condition Coverage): 소스코드의 조건문이 참/거짓 인 경우에 따라 조건 검증 기준의 입력 데이터를 구분하는 테스트 케이스를 설계


블랙박스 테스트: 각 기능이 완전히 작동되는 것을 입증하는 테스트. 사용자의 요구사항 명세를 보면서 테스트
동치 분할 검사(Equivalence Partitioning Testing): 프로그램의 입력 조건에 따라 타당한 입력자료와 타당하지 않은 입력자료의 개수를 균등하게 하여 테스트 케이스를 정하고, 해당 입력 자료에 맞는 결과가 출력되는지 확인
경계값 분석(Boundary Value Analysis): 입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용하여 입력 조건의 경계값을 테스트 케이스로 선정
원인-효과 그래프 검사(Cause-Effect Graphing Testing): 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정
오류 예측 검사(Error Guessing)
비교 검사(Comparison Testing)


개발 단계에 따른 애플리케이션 테스트
단위 테스트(Unit Test): 코딩 직후 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트
통합 테스트(Integration Test): 단위테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트
시스템 테스트(System Test): 개발된 소프트웨어가 해당 시스템에서 완벽하게 수행되는가를 점검하는 테스트
인수 테스트(Acceptance Test): 개발한 소프트웨어가 사용자의 요구사항을 충족하는지에 중점을 두고 테스트
 - 알파 테스트: 사용자가 개발자 앞에서 행하는 테스트
 - 베타 테스트: 한명의 사용자가 여러명의 사용자 앞에서 행하는 테스트


통합 테스트
하향식 통합 테스트: 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트하는 기법. 스텁
상향식 통합 테스트: 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 기법. 드라이버


테스트 오라클: 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참값을 대입하여 비교하는 기법 및 활동
참 오라클(True Oracle): 모든 테스트 케이스의 입력값에 대해 기대하는 결과를 제공, 발생된 모든 오류를 검출할 수 있음
샘플링 오라클(Sampling Oracle): 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공하는 오라클로 전수 테스트가 불가능한 경우 사용하는 오라클
추정 오라클(Heuristic Oracle): 특정 테스트 케이스의 입력값에 대해 기대하는 결과를 제공하고, 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클
일관성 검사 오라클(Consistent Oracle): 애플리케이션에 변경이 있을 때 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인하는 오라클


애플리케이션 성능 측정 지표
처리량(Throughput): 일정 시간 내에 애플리케이션이 처리하는 일의 양
응답 시간(Response Time): 애플리케이션에 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간
경과 시간(Turn Around Time): 애플리케이션에 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간
자원 사용률(Resource Usage): 애플리케이션이 의뢰한 작업을 처리하는 동안의 CPU 사용량, 메모리 사용량, 네트워크 사용량 등 자원 사용률


클린코드: 누구나 쉽게 이해하고 수정 및 추가할 수 있는 단순 명료한 코드. 잘 작성된 코드
나쁜코드
레거시 시스템: 낡은 기술이나 방법론, 컴퓨터 시스템, 소프트웨어 등. 더 이상 쓰이지 않더라도 현대의 기술에 영향을 주는 경우
외계인 코드: 아주 오래되거나 참고 문서 또는 개발자가 없어 유지보수 작업이 어려운 프로그램 코드 -> 문서를 만들면 해결 가능
스파게티 코드: 복잡한 프로그래밍 소스코드


클린 코드 작성 원칙
- 가독성: 누구든지 코드를 쉽게 읽을 수 있도록 작성
- 단순성: 한 번에 한 가지를 처리하도록 코드를 간단하게 작성하고 클래스/메서드/함수 등을 최소 단위로 분리
- 의존성 배제: 코드가 다른 모듈에 미치는 영향을 최소화
- 중복성 최소화: 중복된 코드는 삭제하고 공통된 코드를 사용함으로써 중복 최소화
- 추상화: 상위 클래스/메서드/함수에서는 간략하게 애플리케이션의 특성을 나타내고, 상세 내용은 하위 클래스/메서드/함수에서 구현

반응형