상세 컨텐츠

본문 제목

정보처리기사 2과목 소프트웨어 개발 - 4장 애플리케이션 테스트 관리 요점 정리

정보처리기사 필기

by E_ONION 2020. 6. 3. 02:24

본문

1. 애플리케이션 테스트 : 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위

- SW가 고객의 요구 사항을 만족시키는지 확인(Validation) => 사용자 입장, 결과

- SW가 기능을 정확히 수행하는지 검증 및 점검(Verification) => 개발자 입장, 과정

- 테스트 실행 전에 개발한 SW의 유형을 분류하고 특성정리해서 중점적으로 테스트할 사항을 정리해야 함

● 애플리케이션 테스트의 필요성

- 프로그램 실행 전에 오류 발견하여 예방 가능, 반복적으로 테스트하므로 신뢰도 향상

- 개발 초기부터 테스트 계획하고 시작하면 단순 오류뿐이 아닌 새로운 오류의 유입도 예방 가능

- 최소한의 시간과 노력으로 많은 결함 찾을 수 있음

● 애플리케이션 테스트의 기본 원리

- 완벽한 SW 테스팅은 불가능

- 결함은 특정 모듈에 집중, 파레토 법칙을 적용

- 동일 테스트 케이스로 동일한 테스트 반복 시 살충제 패러독스 현상 발생하므로 테스트 케이스를 지속적으로 보완 및 개선해야 함

- 정황에 따라 테스트 결과 다르므로 정황(Context)에 따라 테스트를 다르게 수행

- SW 결함이 없어도 사용자 요구 사항 충족 X 시 SW 품질 높다고 할 수 없음 => 오류-부재의 궤변

- 테스트와 위험은 반비례, 테스트는 작은 부분에서 시작하여 점점 확대, 개발자와 관계없는 별도의 팀에서 수행

2. 애플리케이션 테스트의 분류

- 프로그램 실행 여부에 따라

정적 테스트 : 프로그램 실행 X => 명세서, 소스코드 대상 ex) 워크스루, 인스펙션, 코드 검사

동적 테스트 : 프로그램 실행 O => 개발의 모든 단계 ex) 블랙박스 테스트, 화이트박스 테스트

● 테스트 기반에 따른 테스트

┌ 명세 기반 테스트 : 명세를 빠짐없이 테스트 케이스로 만들어 구현

├ 구조 기반 테스트 : SW 내부의 논리 흐름에 따라 테스트 케이스 작성하고 확인하는 테스트

└ 경험 기반 테스트 : 경험을 기반으로 수행하는 테스트, 명세가 불충분하거나 시간에 제약이 있는 경우 효과적

● 목적에 따른 테스트

- 회복, 안전, 강도(과부하 시에도 SW 정상 실행), 성능(응답시간, 처리량), 구조(논리적인 경로, 소스코드의 복잡도 평가),

회귀(결함이 없음을 확인 테스트), 병행(비교 테스트)

3. 테스트 기법에 따른 애플리케이션 테스트

● 화이트박스 테스트 : 모듈의 원시 코드를 오픈시킨 상태에서 논리적인 모든 경로를 테스트하여 테스트 케이스 작성

- 설계된 절차에 초점을 둔 구조적 테스트, 테스트 초기 적용

- 모듈의 모든 문장을 한 번 이상 실행함으로써 수행

- 분기점 부분들을 수행함으로써 논리적 경로 제어함

● 화이트박스 테스트 종류

┌ 기초 경로 검사 : 대표적 화이트박스 테스트 기법, 논리적 복잡성 측정 가능, 테스트 결과는 실행 경로의 기초를 정의

└ 제어 구조 검사 : 조건 검사(논리적 조건을 테스트), 루프 검사(반복 구조에 초점),

                         데이터 흐름 검사(변수의 정의 변수 사용 초점)

● 화이트박스 테스트의 검증 기준 : 얼마나 적정한지를 판단하는 기준

- 문장 검증 기준 : 소스 코드의 모든 구문 한 번 이상 수행되도록 테스트 케이스 설계

- 분기 검증 기준 : 소스 코드의 모든 조건문 한 번 이상 수행되도록 테스트 케이스 설계

- 조건 검증 기준 : 소스 코드의 모든 조건문에 대해 조건이 True, False 경우가 한 번 이상 수행되도록

                        테스트 케이스 설계

- 분기/조건 기준 : 소스 코드의 모든 조건문과 각 조건문에 포함된 개별 조건식의 결과가 True, False인 경우가

                        한 번 이상 수행되도록 테스트 케이스 설계

● 블랙박스 테스트 : SW가 수행할 특정 기능 알기 위해 각 기능이 완전히 작동되는 것을 입증하는 테스트로

                           기능 테스트라고도 함

- 사용자 요구 사항 명세 보면서 테스트, 주로 구현된 기능 테스트, SW 인터페이스에서 실시되는 테스트,

  테스트 후반부 적용

● 블랙박스 테스트 종류

┌ 동치 분할 검사 : 입력 자료에 초점, 입력 조건 타당한 입력 자료와 타당하지 않은 입력 자료의 개수를 균등하게

                          하여 테스트

├ 경곗값 분석 : 입력 자료에 치중한 동치 분할 보완, 경곗값 테스트 케이스로 선정

├ 원인-효과 그래프 검사 : 입력 데이터 간의 관계와 출력 영향 미치는 상황 체계적으로 분석 후 효용성이 높은

                                   테스트 케이스 작성

├ 오류 예측 검사 : 과거의 경험이나 확인자의 감각으로 테스트, 보충적 검사 기법, 데이터 확인 검사

└ 비교 검사 : 여러 버전의 프로그램에 동일한 테스트 자료 제공하여 동일한 결과가 출력되는지 테스트

4. 개발 단계에 따른 애플리케이션 테스트

- 개발 단계에서부터 테스트 수행하므로 SW에 포함된 코드 상의 오류뿐 아닌 요구 분석의 오류, 설계 인터페이스 오류도 발견 가능

SW 생명 주기의 V-모델

단위 테스트 : 모듈이나 컴포넌트 초점을 맞춰 테스팅

- 사용자 요구 사항 기반으로 한 기능성 테스트를 최우선으로 수행

┌ 구조 기반 테스트(주로 사용) : 프로그램 내부 구조 및 복잡도를 검증하는 화이트박스 테스트 시행

                                           / 목적 : 제어 흐름, 조건 결정

└ 명세 기반 테스트 : 목적 및 실행 코드 기반의 블랙박스 테스트 시행 / 목적 : 동등 분할, 경곗값 분석

● 통합 테스트 : 단위 테스트 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정

- 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사

● 시스템 테스트 : 완벽하게 수행되는가를 점검하는 테스트

- 환경적인 장애 리스크를 최소화하기 위해 실사용 환경과 유사한 테스트 환경서 테스트 수행

┌ 기능적 요구사항 : 명세서 기반의 블랙박스 테스트 시행

└ 비기능적 요구사항 : 구조적 요소에 대한 화이트박스 테스트 시행

● 인수 테스트 : 사용자의 요구 사항을 충족하는지에 중점을 두고 테스트

- 사용자가 직접 테스트, 문제 X 시 사용자 SW 인수하고 프로젝트 종료 => 사용자 관점

- 사용자 인수 테스트(사용자가 적절성 여부 확인), 운영상의 //(시스템 관리자가 시스템 인수 시 수행 테스트),

계약 //, 규정 //, 알파 테스트(사용자가 개발자 앞에서 테스트, 통제된 환경),

베타 테스트(선정 사용자가 여러 명 사용자 앞에서 테스트, 통제 X 환경)

5. 통합 테스트 : 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법

┌ 비점진적 통합 방식 : 프로그램 전체를 테스트, 빅뱅 통합 테스트, 규모 작으면 유리하고 단시간 내에 테스트 가능,

                               오류 발견 및 장애 위치 파악 및 수정이 어렵다

└ 점진적 통합 방식 : 단계적으로 통합하면서 테스트, 하향식, 상향식, 혼합식 통합이 있음, 오류 수정 용이

                            인터페이스와 관련된 오류를 완전히 테스트할 가능성 높음

● 하향식 통합 테스트 : 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트

- 깊이 우서 통합 법, 넓이 우선 통합 법 사용

- 테스트 초기부터 시스템 구조 보여줄 수 있음

- 상위 모듈에서는 테스트 케이스 사용 어렵

- 절차

① 주요 제어 모듈은 작성된 프로그램 사용, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체

② 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체됨

③ 모듈이 통합될 때마다 테스트 실시

④ 새로운 오류 발생 X 보장 위해 회귀 테스트 실시

● 상향식 통합 테스트 : 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트

- 스텁 필요 X, 종속 모듈의 그룹인 클러스터 필요

- 절차

① 하위 모듈들을 클러스터로 결합

② 상위 모듈에서 데이터의 입출력을 확인하기 위해 더미 모듈인 드라이버 작성

③ 통합된 클러스터 단위로 테스트

④ 테스트 완료 시 클러스터 상위로 이동하여 결합하고 드라이버는 실제 모듈대체된다.

● 혼합식 통합 테스트

: 하위 수준에서는 상향식 통합, 상위 수준에서는 하향식 통합 사용 => 샌드위치 통합 테스트라고도 함

● 회귀 테스팅 : 이미 테스트된 프로그램의 테스팅을 반복하는 것으로 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인

- 새로운 오류가 발생하지 않음을 보증하기 위해 반복 테스트

- 변경 부분을 테스트할 수 있는 테스트 케이스만을 선정하여 수행

6. 애플리케이션 테스트 프로세스 : 테스트하는 절차

- 테스트 계획서 : 테스트 수행을 계획 문서

- 테스트 케이스 : 테스트 항목의 명세서

- 테스트 시나리오 : 동작 순서 기술한 문서

- 테스트 결과서 : 테스트 결과를 비교 · 분석한 내용을 정리한 문서

● 순서

① 테스트 계획 : 테스트 목표를 정의하고 테스트 대상 및 범위를 결정

- 테스트 대상 시스템 구조 파악, 테스트에 투입되는 조직 및 비용 산정

- 테스트 시작(모든 조건 만족 X여도 시작) 및 종료 조건(중요도에 따라 테스트 종료 조건을 다르게 정의 가능)을 정의

② 테스트 분석 및 디자인 : 테스트의 목적과 원칙 검토하고 사용자의 요구 사항 분석

- 테스트에 대한 리스크 분석우선순위 결정

- 테스트 데이터, 테스트 환경, 테스트 도구 등을 준비

③ 테스트 케이스 및 시나리오 작성 : 테스트 케이스를 작성하고 검토 및 확인한 후 테스트 시나리오 작성

- 테스트용 스크립트 작성

④ 테스트 수행 : 테스트 환경 구축 후 테스트 수행

- 테스트 실행 결과를 측정하여 기록

⑤ 테스트 결과 평가 및 리포팅 : 테스트 결과를 비교 분석하여 테스트 결과서를 작성

- 결함 중점적으로 기록, 테스트 종료 시 평가 수행하고 실행 절차 최적화하여 다음 테스트에 적용

⑥ 결함 추적 및 관리 : 결함이 어디에서 발생했는지, 어떤 종류 결함인지 등 결함을 추적하고 관리

- 동일 결함 발견 시 처리 시간 단축 및 경함의 재발 방지 가능

7. 테스트 케이스/테스트 시나리오/ 테스트 오라클

● 테스트 케이스 : 테스트 항목에 대한 명세서, 명세 기반 테스트의 설계 산출물에 해당

- 테스트 케이스 미리 작성 시 오류 방지 가능, 인력 및 시간 등의 낭비 줄일 수 있음

● 테스트 케이스 작성 순서

① 테스트 계획 검토 및 자료 확보

② 위험 평가 및 우선순위 결정

③ 테스트 요구 사항 정의

④ 테스트 구조 설계 및 테스트 방법 결정

⑤ 테스트 케이스 정의

⑥ 테스트 케이스 타당성 확인 및 유지 보수

● 테스트 시나리오 : 테스트 케이스들을 적용하는 구체적인 절차를 명세한 문서

- 테스트 순서를 미리 정함으로써 테스트 항목 빠짐없이 수행 가능

● 테스트 시나리오 작성 시 유의 사항

- 여러 개의 시나리오로 분리하여 작성해야 함

- 사용자의 요구 사항과 설계 문서 등 토대로 작성해야 함

- 유스케이스간 업무 흐름이 정상적인지를 테스트할 수 있도록 작성

- 개발된 모듈 or 프로그램 간의 연계 정상적으로 동작하는지 테스트할 수 있도록 작성

● 테스트 오라클 : 사전에 정의된 값을 대입하어 비교하는 기법 및 활동

- 결과를 판단하기 위해 테스트 케이스에 대한 예상 결과계산하거나 확인

- 특징 : 제한된 검증, 수학적 기법, 자동화 기능

● 테스트 오라클의 종류

- 참 오라클 : 모든 오류 검출 가능 ex) 항공기, 은행, 발전소 SW 등 미션 크리티컬한 업무에 사용

- 샘플링 오라클 : 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과 제공 ex)일반적 업무, 게임, 오락 등

- 추정 오라클 : 샘플링 오라클 개선, 샘플링 오라클 + 나머지 입력 값들에 대해서는 추정으로 처리 ex) 샘플링과 같음

- 일관성 검사 오라클 : 애플리케이션 변경 있을 때 테스트 케이스의 수행 전과 후의 결괏값이 동일한지 확인하는 오라클

8. 테스트 자동화 도구

: 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트 수행 가능

- 휴먼 에러 줄이고, 정확성을 유지하면서 품질 향상 가능

- 장점 : 인력 및 시간 ↓, 향상된 테스트 품질 보장, 일관성, 객관적 평가 기준, 다양한 표시 형태,

          UI 없는 서비스 정밀 테스트 가능

- 단점 : 교육 및 학습 필요, 시간 · 비용 · 노력이 필요, 비공개 상용 도구의 경우 추가 비용 필요

● 테스트 자동화 수행 시 고려 사항

- 재사용 및 측정불가능한 것 제외

- 모든 테스트 과정 자동화 가능 도구 없으므로 용도에 맞는 적절한 도구 선택해서 사용

- 자동화 도구의 환경 설정 및 습득 기간을 고려하여 프로젝트 일정 계획

- 반드시 프로젝트 초기 테스트 엔지니어 투입 시기를 계획해야 함

● 테스트 자동화 도구의 유형

: 정적 분석 도구, 테스트 실행 도구, 성능 테스트 도구, 테스트 통제 도구,

테스트 하네스 도구(테스트를 지원하기 위해 생성된 코드데이터를 의미, 시뮬레이션 하여 컴포넌트 및 모듈이 정상적으로 테스트

되도록 함)

 

9. 결함 관리 : SW가 개발자가 설계한 것과 달리 동작하거나 다른 결과가 발생되는 것을 의미

- 사용자가 예상한 결과와 실행 결과 간의 차이, 업무 내용과의 불일치 등으로 인해 변경이 필요한 부분도 모두 결함에 해당

● 결함 관리 프로세스

결함 관리 프로세스 흐름도

● 결함 상태 추적

- 발견된 결함은 지속적으로 상태 변화를 추적하고 관리

- 향후 결함이 발견될 모듈 또는 컴포넌트 추정 가능

- 결함 관리 측정 지표 : 결함 분포(결함 측정), 결함 추세(결함 수의 추이 분석), 결함 에이징(특정 결함 상태로 지속되는 시간 측정)

● 결함 추적 순서                                                                                       // 결함 종료 후 결함 해제

                                                                                                          ┌ 재오픈을 준비 중 상태

결함 추적 순서

● 결함 분류

: 시스템 결함(애플리케이션 환경, DB 처리에서 발생), 기능 결함(획, 설계, 업무, 시나리오서 유입 결함),

  GUI 결함(사용자 화면 설계 시 발생 결함), 문서 결함(의사소통기록 원활치 않아 발생 결함)

● 결함 심각도

: High(진행 X), Medium(시스템 흐름에 영향 미치는 결함), Low(시스템 흐름에는 영향 미치지 않는 결함)

● 결함 우선순위 : 발견된 결함 처리에 대한 신속성 나타내는 척도, 결함의 중요도 심각도 따라 설정되고 수정 여부 결정

- 심각도가 높다고 반드시 우선순위가 높은 건 아님

● 결함 관리 도구 : Mantis, Trac, Redmine, Bugzilla

10. 애플리케이션 성능 분석

● 애플리케이션 성능 : 사용자가 요구한 기능을 최소한 자원을 사용하여 최대한 많은 기능을 신속하게 처리하는 정도

- 측정 지표 : 처리량, 응답 시간, 경과 시간, 자원 사용률

● 성능 테스트 도구 : 애플리케이션 성능테스트하기 위해 부하나 스트레스를 가해 성능 측정 지표를 점검하는 도구

- JMeter : 다양한 프로토콜 지원하는 부하 테스트 도구

- LoadUI : 사용자의 편리성이 강화된 부하 테스트 도구

- OpenSTA : HTTP, HTTPS 프로토콜에 대한 부하 테스트 및 생산품 모니터링 도구

● 시스템 모니터링 도구 : 애플리케이션 실행 중 시스템 자원의 사용량을 확인하고 분석하는 도구

- 안정적으로 운영할 수 있는 기능 제공

- Scouter, Zabbix

● 애플리케이션 성능 저하 원인 분석

- 애플리케이션을 DB에 연결하기 위해 커넥션 객체를 생성하거나 쿼리를 실행하는 애플리케이션 로직에서 많이 발생

- DB에 필요 이상 많은 데이터 요청한 경우

- 커넥션 풀의 크기를 너무 작거나 크게 설정하면 애플리케이션의 성능 저하 현상이 발생

- 대량의 파일 업로드 or 다운로드하여 처리 시간이 길어진 경우

- 애플리케이션에 연결된 데이터베이스의 락으로 인한 성능 저하

11. 애플리케이션 성능 개선

● 소스코드 최적화 : 나쁜 코드(로직 복잡, 스파게티 코드) 배제, 클린 코드(잘 작성된 코드)로 작성

- 클린 코드 작성 원칙 : 가독성, 단순성, 의존성 배제, 중보성 최소화, 추상화

● 소스코드 최적화 유형

- 클래스 분할 배치 : 하나 클래스는 하나 역할만 수행, 응집도 높이고, 크기를 작게 작성

- 느슨한 결합 : 인터페이스 클래스를 이용하여 추상화된 자료 구조와 메소드 구현함으로써 클래스 간의 의존성 최소화

- 코딩 형식 준수 : 줄 바꿈 사용, 종속 함수 사용, 호출하는 함수 선배치, 호출되는 함수 후배치,

                       지역 변수는 맨 처음에 선언

- 좋은 이름 사용 : 기본적인 이름 명명 규칙을 정의하고 규칙에 맞는 이름 사용

- 적절한 주석문 사용

● 소스 코드 품질 분석 도구

정적 분석 도구 : 작성 소스 코드 실행 X, 코딩 스타일, 결함 등을 확인, 개발 초기 결함 찾는데 사용,

                         완료 시점에서는 소스 코드 품질 검증, 동적 분석 도구로는 발견하기 어려운 결함 찾고,

                         소스 코드에서 코딩의 복잡도, 모델 의존성, 불일치성 분석

                         ex) pmd, cppcheck, SonarQube, checkstyle, ccm, cobertuna

동적 분석 도구 : 작성한 소스 코드 실행, 메모리 누수, 스레드 결함 등을 분석하는 도구 ex) Avalanche, Valgrind

관련글 더보기

댓글 영역