정보처리기사/part02.소프트웨어 개발
4. 애플리케이션 테스트 관리
kyunge_ev
2024. 6. 19. 22:35
✅ 애플리케이션 테스트 케이스 설계
1. 테스트 케이스(=시험 사례)
(1) 테스트 케이스의 정의
- 소프트웨어가 목표하는 보장성을 만족할 수 있도록 최적의 테스트 케이스로 가능한 많은 결함을 발견할 수 있어야한다.
(2) 테스트 케이스 작성 절차
단계 | 내용 |
1단계 : 참조 문서 수집 | 시험 계획서에 명시된 테스트 케이스 작성 지침과 수준을 고려하여 테스트 설계에 필요한 분석/설계 문서를 수집 |
2단계 : 테스트 케이스 작성 | 테스트 설계 기법을 이용하여 테스트 케이스를 작성 |
3단계 : 내부 검토 | 아키텍처, 관리자, 기획자, 개발자, 테스터 등이 작성된 테스트 케이스의 적정성을 검토 |
4단계 : 요구사항 대비 커버리지 분석 | 테스트 케이스가 어느 정도 요구사항을 반영하는가에 대한 분석으로 테스트 가능한 요구사항이 모두 테스트 케이스에 반영되었는지 확인 |
5단계 : 승인 | 작성된 테스트 케이스를 고객, 기획자, 관리자 등의 승인을 획득한다. |
(3) 테스트 케이스 구성 항목
- 식별자 번호
- 사전(테스트) 조건
- 테스트 데이터
- 수행 절차
- 예상 결과
💡 테스트 데이터
- 테스트 케이스 자동 생성 도구를 이용하여 테스트 데이터를 찾아내는 방법
- 입력 도메인 분석
- 랜덤(Random) 테스트
- 자료 흐름도
2. 테스트 레벨
(1) 모듈 테스트(단위 테스트, Unit Test)
- 코딩이 끝난 후 설계의 최소 단위인 모듈에 초점을 두고 검사하는 단계
- 화이트박스 테스트 기법이 적용된다.
- 테스트 내용
- 모듈 인터페이스 테스트
- 자료구조 테스트
- 실행 경로 테스트
- 오류 처리 테스트
- 경계 처리 테스트
(2) 통합 테스트(Integration Test)
- 단위 테스트가 끝난 모듈들을 하나로 결합하여 시스템으로 완성하는 과정에서의 테스트
- 통합 테스트는 시스템을 구성하는 여러 모듈을 어떤 순서로 결합하여 테스트할 것이냐에 따라 동시식(Big-Bang), 하향식(Top-down), 상향식(Bottom-up), 연쇄식(Threads)등이 있다.
(3) 시스템 테스트(System Test)
- 모든 모듈들은 하나의 시스템으로 작동하게 된다.
- 사용자의 모든 요구를 하나의 시스템으로서 완벽하게 수항하기 위해서는 다음과 같은 다양한 테스트들이 필요하다.
- 외부 기능 테스트(Funtion Test)
- 내부 기능 테스트(Facility Test)
- 부피 테스트(Volume Test)
- 스트레스 테스트(Stress Test) = 민감성 테스트(Sensitivity Test)
- 성능 테스트(Perfomance Test)
- 호환성 테스트(Compatibility Test)
- 신뢰성 테스트(Reliability Test)
- 복구 테스트(Recovery Test)
- 보수 용이성 테스트(Serviceability Test)
(4) 인수 테스트(Acceptance Testing, 검증 테스트)
- 사용자측 관점에서 소프트웨어가 요구를 충족시키는가를 평가한다.
- 알파 테스트
- 개발자의 장소에서 사용자가 개발자 앞에서 행하는 기법
- 베타 테스트
- 발견된 오류와 사용상의 문제점을 기록하여 추후에 반영될 수 있도록 개발 조직에게 보고해주는 형식을 취한다.
3. 테스트 시나리오
- 테스트 시나리오는 테스트할 수 있는 모든 기능을 말하는 것으로, 테스트 조건 또는 테스트 가능성이라고 한다.
- 여러 개의 테스트 케이스의 집합을 수행하기 위한 동작 순서를 기술한 문서를 말하는 것으로, 테스트 절차 명세라고 할 수 있다.
💡 테스트 관련 법칙
- Pareto의 법칙 : 소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 일어난다.
- Boehm의 법칙 : 초기 개발 단계에서 결함을 발견하면 나중 단계에서 발견하는 것보다 시간과 비용을 절약할 수 있다.
- Pesticide Paradox(살충제 패러독스) : 동일한 테스트 케이스를 사용하여 반복적으로 테스트를 수행하면 새로운 버그를 찾지 못한다는 테스트 원칙
✅ 애플리케이션 통합 테스트
1. 결함 관리 도구
(1) 결함 관리
- 테스트 수행 후 발생한 결함들이 다시 발생되는 것을 방지하기 위하여 결함을 추적하고, 관리하는 활동을 결함 관리라고 한다.
(2) 관리 시스템
- 결함 관리 시스템(Defect Management System)
- 버그 추적 시스템(Bug Tracking System)
- 이슈 관리 시스템(Issue Tracking System)
(3) 결함 관리 상용 도구
- HP QC(Quality Center)
- IBM Clear Quest
- JIRA
2. 테스트 자동화 도구
- 테스트 자동화 도구는 테스트에 포함되는 여러 과정들을 자동적으로 지원하여 생산성 및 일관성을 향상시킬 수 있다.
(2) 티스트 자동화 도구의 유형
- 정적 분석 도구 : 프로그램을 실행하지 않고 분석하는 도구 → 인스펙션(코드리뷰)
- 테스트 실행 도구
- 성능 테스트 도구
- 테스트 통제 도구
- 테스트 하네스 도구 : 애플리케이션의 컴포넌트를 테스트하는 환경의 일부분을 테스트 하네스라고 하며, 테스트를 지원하기 위해 만들어진 코드와 데이터를 사용하는 도구 → stub, driver 등
(3) 테스트 자동화 도구
- QTP
- Rational Robot
- Selenium : 오픈 소스 웹 자동화 툴이며, 모든 종류의 웹 브라우저들을 지원한다. → 인터페이스 구현 검증 도구
3. 통합 테스트
(1) 통합 테스트의 개요
- 단위 검사가 끝난 모듈들을 하나로 결합하여 시스템으로 완성하는 과정에서의 테스트
(2) 동시식 통합(Big-Bang Approach, 비점진적 통합, 차분 통합 검사)
- 단계적으로 통합하는 절차 없이 모든 모듈이 한꺼번에 결합되어 하나로 테스트한다.
- 혼란스럽고, 결함의 원인 발견이 어려우며 통합기간이 훨씬 많이 소요되므로 바람직하지 않다. → 좋다고 표현되는건 오답!
(3) 하향식 통합
- 하향식 통합의 특징
- 주 프로그램으로부터 그 모듈이 호출하는 다음 레벨의 모듈을 테스트하고, 점차적으로 하위 모듈로 이동하는 방법 → 전체에서 세부로
- 검사 제어 소프트웨어 : 스텁(Stub) → 모듈 간의 통합 테스트를 위해 일시적으로 필요한 조건만을 가지고 임시로 제공되는 시험용 모듈
- 드라이버는 필요치 않고 통합이 시도되지 않은 곳에 스텁이 필요하다. 통합이 진해되면서 스텁은 실제 모듈로 교체된다.
- 통합 방식 : 깊이 우선 통합, 너비 우선 통합
- 하향식 통합의 순서
- 주 모듈을 드라이버로 사용하고, 주 모듈의 하위 모듈들을 스텁으로 대신한다.
- 깊이 우선 또는 너비 우선 등의 통합 방식에 따라 하위 스텁들을 실제 모듈과 대체한다.
- 각 모듈이 통합될 때마다 테스트를 실시한다.
- 테스트를 통과할 때마다 또 다른 스텁이 실제 모듈로 대체된다.
- 새로운 오류가 발생하지 않음을 보장하기 위해 회귀 테스트를 실시한다.
- 하향식 통합의 장단점
- 장점
- 하위 모듈 시험이 끝난 상위 모듈을 이용하므로 테스트 환경이 실제 가동 환경과 유사하다.
- 주요 기능을 조기에 시험할 수 있다.
- 처음부터 독립된 소프트웨어 구조이다.
- 단점
- 병행 작업이 어렵고, 스텁이 필요하다
- 장점
(4) 상향식 통합
- 상향식 통합의 특징
- 시스템 하위 레벨의 모듈로부터 점진적으로 상위 모듈로 통합하면서 테스트하는 기법이다.
- 검사 제어 소프트웨어 : 드라이버(Driver) - 테스트 사례를 입력받고, 테스트를 위해 받은 자료를 모듈로 넘기고, 관련된 결과를 출력하는 메인 프로그램이다.
- 스텁은 필요치 않고 드라이버가 필요하다.
- 상향식 통합의 순서
- 하위 모듈은 소프트웨어의 부수적 기능을 수행하는 클러스터(Cluster)로 조합한다.
- 각 클러스터의 테스트를 위한 시험 사례 입출력을 조정하도록 드라이버를 개발한다.
- 각 클러스터를 테스트한다.
- 드라이버를 제거하고 클러스터는 위로 이동하며, 소프트웨어 구조를 상향식으로 만들어간다.
- 최종 드라이버 대신 주프로그램을 대체시키고, 전체적인 소프트웨어 구조를 완성한다.
- 상향식 통합의 장단점
- 장점
- 초기 단계부터 병행 작업이 가능하고, 불필요한 개발(스텁)을 피할 수 있다.
- 철저한 모듈 단위의 시험이 가능하다
- 단점
- 인터페이스의 시험이 가정에 의해 이루어지며, 마지막 단계까지 독립된 소프트웨어 형태를 갖지 못한다.
- 장점
(5) 연쇄식(Threads) 통합
- 연쇄식 통합의 특징
- 연쇄식 통합의 기법
- 샌드위치형 통합
- 샌드위치 테스트(Sandwich Test)
- 회귀 테스트(Regression Testing)
- 변경된 소프트웨어 컴포넌트에 초점을 맞춘 테스트
- 새로운 결함 발생의 가능성에 대비하여 이미 실시했던 테스트 사례들의 전부 혹은 일부를 재실시하여 테스트하는 것
- 유지보수에 많이사용(유지보수용 시험)
- 변경된 소프트웨어 컴포넌트에 초점을 맞춘 테스트
✅ 애플리케이션 성능 개선
1. 소스 코드 품질 분석 도구
(2) 정적 분석 도구
- 소스코드의 실행 없이 코드 자체만으로 코드를 분석하는 도구
- 종류 : cppcheck, pmd, checkstyle 등
(3) 동적 분석 도구
- 프로그램을 실행하여 코드를 분석하는 도구
- 종류 : Valgrind, Avalanche, valMeter 등
2. 코드 최적화
(1) 코드 최적화의 개요
- 코드 최적화는 동등한 의미를 가지면서 실행 시간이나 메모리를 줄이는 것