Computer
정보처리기사 실기 - Application Test
너굴먹
2025. 4. 25. 16:36
2025년도 4월에 정보처리기사 실기를 보고 왔음, 일주일정도 공부하고 20문제중에 11문제 맞고 6개 틀렸다
근데 나머지가 3문제가 코드문제였는데 답을 뭐로 썼는지 기억이 안남;; 아슬아슬하게 합격 못할수도 있으니ㅠㅠ
20년도 개정 후에 기출문제들 다 풀어보고 갔는데 코드가 그렇게 어렵지 않았어서 이론을 엄청 공부하고 갔는데
난 몰랐지.. 암기가 쉽게나오고.. 낚시 코드가 많이나오고... 코드문제가 엄청 어렵게 나올 줄...
혹시모를 재수를 위해, 뭔가 두고두고 써먹을거같은것들은 정리해둡시다.
🦭 소프트웨어 테스트의 필요성
- 오류 발견(Error Detection) : 소프트웨어의 결함을 조기에 발견하기 위함
- 오류 예방(Error Prevention) : 잠재적인 문제를 미리 방지하기 위함
- 품질 향상(Quality Improvement) : 신뢰성 및 안정성을 높이기 위함
🦭 소프트웨어 테스트의 원리
- 테스팅은 결함이 존재함을 밝히는 것: 결함이 있는지 확인하는 것이 목적
- 완벽한 테스팅 불가능: 모든 경우를 테스트하는 것은 현실적으로 불가능
- 초기에 테스팅 시작 : 가능한 빨리 테스트를 시작해야 함
- 결함 집중 : 대부분의 결함은 일부 모듈에 집중되어 있음
파레토 법칙(Pareto Principle) : 오류의 80%는 전체 모듈에 20% 안에서 발생한다. - 살충제 패러독스(Pesticide paradox) : 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾지 못함
- 정황에 의존 : 테스트는 소프트웨어의 성격에 맞게, 적용 상황에 따라 달라짐
- 오류-부재의 궤변 : 요구사항을 충족시키지 못한다면 테스팅 결과가 좋아도 품질이 높은 소프트웨어라고 할 수 없음
🦭 테스트 목적에 따른 분류 - 회안성 구회병
- 회복 테스트(Recovery) : 시스템에 고의로 실패를 유도하고, 시스템의 정상적 복귀 여부를 테스트
- 안전 테스트(Security) : 소스 내 보안적인 결함을 미리 점검하는 테스트
- 성능 테스트(Performance) : 응답 시간, 반응 속도, 처리량 등을 측정하는 테스트
- 구조 테스트(Structure) : 시스템의 내부 논리 경로, 소스 코드의 복잡도를 테스트
- 회귀 테스트(Regression) : 오류제거와 수정에 의해 새로 유입된 오류가 없는 지 확인하는 일종의 반복 테스트 기법
- 병행 테스트(Parallel) : 변경된 시스템과 기존 시스템에 동일한 데이터 입력 후 결과 비교
🦭 정적 테스트 (Static Testing)
실제로 코드를 실행하지 않고 수행하는 테스트, 문서, 코드, 설계등의 결함을 찾아내는것에 초점
- 인스펙션(Inspection) - 동료검토
- 형식적 검토 기법
- 저작자 외의 다른 전문가 또는 팀이 검사하여 문제를 식별하고 문제에 대한 올바른 해결을 찾아
- 워크스루 (Walkthrough)
- 비형식적 검토 기법
- 검토 자료를 회의전에 배포해서 사전 검토한 후 짧은 시간동안 회의를 진행하는 형태
🦭 동적 테스트 (Dynamic Testing)
프로그램을 실행하여 동작을 검사하고 결함을 찾는 테스트. 실행 결과를 통해 요구사항 충족 여부를 확인
🦆 블랙박스 테스트 (Black-box Testing)
- 동등분할 테스트(Equivalence Partitioning) = 동치류 테스트
입력 데이터의 영역을 유사한 도메인별로 유효값/무효값을 그룹핑하여 대푯값 테스트 케이스를 도출하여 테스트 - 경곗값 분석 테스트(Boundary Value Analysis)
최솟값 바로 위, 최대치 바로 아래 등 입력값의 극한 한계를 테스트하는 기법 - 원인-결과 그래프 테스트(Cause-Effect)
그래프를 활용해 입력 데이터 간의 관계 및 출력에 미치는 영향을 분석 - 결정 테이블 테스트(Decision Table)
요구사항의 논리와 발생조건을 테이블 형태로 나열하여, 조건과 행위를 모두 조합하여 테스트 - 상태 전이 테스트(State transition)
이벤트에 의해 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 수행하는 테스트 - 유스케이스 테스트(Use Case)
프로세스 흐름을 기반으로 테스트케이스를 명세화하여 수행하는 테스트 - 비교 테스트(Comparison)
여러 버전의 프로그램에 같은 입력값을 넣어 비교해 테스트 - 페어와이즈 테스트(Pairwise)
테스트 데이터 값들 간에 최소한 한 번씩을 조합하여 수행하는 테스트 - 분류 트리 테스트(Classification Tree)
SW의 일부 또는 전체를 트리구조로 분석 및 표현하여 테스트 케이스 설계해 테스트
🦆 화이트박스 테스트 (White-box Testing)
실제 내부 코드 구조나 동작을 검사하는 테스트 방식으로, 코드 흐름이나 조건 등을 분석
기초 경로 검사 (Base Path Testing) - 대표적 화이트박스 기법
모든 가능한 경로를 테스트
제어구조 검사 (Control Structure Testing)
- 제어 흐름 테스트 (Control Flow Testing)
프로그램의 제어 흐름을 그래프로 나타내어 테스트 - 데이터 흐름 테스트 (Data Flow Testing)
변수의 정의와 사용을 중심으로 테스트하는 방식 - 루프 테스트 (Loop Testing)
프로그램의 반복 구조에 초점을 맞춰 테스트 하는 방식
💡 화이트 박스 테스트 검증 기준 - 구결조 조변다
- 구문 커버리지 (Statement Coverage)
모든 명령문이 최소 1번은 실행되도록 테스트 - 결정 커버리지 (Decision Coverage)
조건식 전체가 참/거짓을 최소 1회 수행하도록 테스트 - 조건 커버리지 (Condition Coverage)
조건식 내 각 개별 조건이 참/거짓 모두 수행되도록 테스트 - 조건/결정 커버리지 (Condition/Decision Coverage)
전체 조건과 개별 조건 모두에 대해 참/거짓을 수행 - 변경 조건/결정 커버리지 (MC/DC)
개별 조건이 전체 조건식 결과에 독립적으로 영향을 주는지 테스트 - 다중 조건 커버리지 (Multiple Condition Coverage)
모든 조건 조합을 100% 테스트
🦭테스트 오라클
테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교하는 기법
- 참(True) 오라클
모든 입력값에 대해 기대하는 결과를 생성함으로써 발생된 오류를 모두 검출 - 일관성 검사(Consistent) 오라클
애플리케이션 변경이 있을 때, 수행 전과 후의 결괏값이 동일한지 확인 - 샘플링(Sampling) 오라클
특정한 몇 개의 입력값에 대해서만 기대하는 결과를 제공 - 휴리스틱(Heuristic) 오라클
샘플링 오라클을 개선하고 나머지 값들에 대해서는 휴리스틱(추정)으로 처리
🦭 테스트 레벨 종류 ( 요분설구 - 단통시인 )
- 단위(Unit) 테스트 / 구현 단계
구현이 진행되면서 수행하는 테스트, 모듈 및 컴포넌트 등을 테스트 - 통합(Integration) 테스트 / 설계 단계
모듈 간 인터페이스 관련 테스트 - 시스템(System) 테스트 / 분석 단계
단위 시스템 기능이 시스템에서 정상 수행 되는지를 검증하는 테스트(기능적 요구사항/비기능적 요구사항) - 인수(Acceptance) 테스트 / 요구사항 분석 단계
알파 테스트 (Alpha) : 사용자가 개발자 환경에서 수행하는 테스트
베타 테스트 (Beta) : 실제 환경에서 일정 사용자에게 소프트웨어를 사용하게하고 피드백을 받는 테스트
🦆 통합 테스트
- 비점증적인 방식 / 빅뱅 방식
모든 모듈을 동시에 통합 후 테스트 - 점증적인 방식
하향식 테스트 : 테스트 스텁 test Stub 필요
상향식 테스트 : 테스트 드라이버 test Driver 필요
샌드위치 테스트 : 상향식 + 하향식 테스트, 병렬 테스트 가능
🦭애플리케이션 성능 측정 지표
- 처리량(Throughput)
주어진 시간에 처리할 수 있는 트랜잭션의 수 - 응답 시간(Response Time)
메뉴 클릭 시 해당 메뉴가 나타나기까지 걸리는 시간 - 경과 시간(Turnaround Time)
사용자가 요구를 입력한 시점부터 트랜잭션을 처리 후 그 결과의 출력이 완료할 때까지 걸리는 시간 - 자원 사용률(Resource Usage)
CPU 사용량, 메모리 사용량, 네트워크 사용량