본문 바로가기

IT기반지식/소프트웨어공학

테스팅 도구의 종류


6.1.1 테스팅 도구 분류 (Test tool classification) (K2)

 

테스팅의 여러가지 측면을 지원하는 많은 수의 도구가 있다. 이 요약서에서는 도구들이 지원하는 테스팅 액티비티에 따라서 도구들을 분류한다.

 

어떤 도구들은 하나의 액티비티를 지원한다. 다른 도구들은 하나 이상의 액티비티를 지원할 수 있다. 그러나 이런 도구들은 가장 관련있는 액티비티 아래로 분류된다. 일부의 상업적인 도구들은 오직 한가지 타입의 액티비티만을 지원한다. 다른 상업용 도구 벤더는 이러한 액티비티 모두 또는 많은 부분을 지원하는 도구 셋이나 슈트(suite)를 제공한다.

 

테스팅 도구는 반복적인 작업을 자동화함으로써 테스팅 액티비티의 효율성을 높일 수 있다. 예를 들어 테스팅 도구는 많은 수의 데이터 비교를 자동화 하거나 동작을 시뮬레이션함으로써 테스팅의 유연성 또한 높일수 있다.

 

일부의 테스팅 도구는 도구 그 자체가 테스트의 실제 결과에 영향을 미쳐서 테스트에 방해가 될 수 있다. 예를 들어, 여러가지 성능 도구를 가지고 어떻게 측정하느냐에 따라 실제 타이밍이 다르게 될 수 있거나, 어떤 커버리지 도구를 사용하는가에 따라 코드 커버리지의 다른 측정치를 얻을 수 있다. 이러한 방해되는 도구의 결과를 탐침 효과(probe effect)라 부른다.

 

일부 도구들은 개발자들에게 좀더 적절한 지원을 제공한다. (e.g 컴포넌트와 컴포넌트 통합 테스팅 동안에), 이러한 도구들은 아래의 분류에서 "D"로 표시될 것이다.

 

6.1.2 테스팅과 테스트의 관리를 위한 도구 지원 (K1)

 

모든 관리도구는 소프트웨어 개발 전 주기동안의 모든 테스트 액티비티들에 적용된다.

 

테스트 관리도구 (Test management tools)

 

테스트 관리 도구의 특성은 다음을 포함한다.

 

• 테스트의 관리와 수행된 액티비티에 대한 지원
• 테스트 실행 도구, 결함 추적 그리고 요구사항 관리도구와의 인터페이스한다.
• 독립적인 버전 컨트롤, 또는 외부 구성 관리 도구와의 인터페이스
• 테스트, 테스트 결과 그리고 요구사항 명세와 같은 소스 문서에 대한 부가사항에 대한

   추적성 지원
• 테스트 결과의 로깅과 진행상황 보고 생성
• 테스트 객체에 대한 정보를 주기 위하여, 그리고 테스트 프로세스를 통제하고 향상시키기 위하여

  테스트(e.g 실행된 테스트와 패스(pass)된 테스트)와 테스트 객체(e.g 발생한 부가사항)에

  관련된 수량적인 분석(매트릭)

 

요구사항 관리도구(Requirements management tools)

요구사항 관리도구는 요구사항 문장들을 저장하고, 일관성과 정의되지 않은(빠진) 요구사항을 체크하며, 요구사항을 우선순위화하고, 요구사항, 기능과/또는 특성에 대하여 개별적인 테스트들이 추적성을 갖는 것을 가능하게 한다. 추적성은 테스트 관리 프로세스 보고서에서 보고될 수 있다. 요구사항, 기능(functions)과/또는 특성(features)에 대한 테스트 셋의 커버리지 역시 보고되어야 한다.

 

부가사항 관리 도구 (Incident managment tools)

부가사항 관리도구는, 예를 들어 결함(defect), 실패(feature) 또는 인지된 문제들과 변칙사항과 같은, 부가사항 보고들을 저장하고 관리한다. 그리고 부가사항 보고관리를 지원하는 방법은 다음을 포함한다.

 

• 우선순위 정하는 것을 쉽게한다. 
• 사람들에게 작업을 할당 (e.g 수정(fix) 또는 확정 테스트(confirmation test))
• 상태의 귀속성(attribution) (e.g 거부된 테스트, 준비된 테스트, 또는 다음 릴리즈에 언급된

  테스트)

 

이러한 도구는 모든 시간에 걸쳐 모니터 되야하는 부가사항의 진행을 가능하게 하며, 때때로 통계적인 분석에 대한 지원을 제공하기도 한다. 그리고 부가사항에 대한 보고를 제공한다. 이것은 결함 추적 도구(defect tracking tools)로도 알려져 있다.

 

구성관리 도구 (Configuration management tools)

구성관리(CM) 도구는 엄격히 말하서 테스팅 도구가 아니다. 하지만 일반적으로 여러가지 버전들과 소프트웨어와 테스트의 구조를 추적하는데 필요하다.

 

구성관리 도구는

• 소프트웨어와 테스트웨어의 구성과 버전에 대한 정보를 저장한다.
• 테스트웨어(testware)와 소프트웨어 작업 산출물(software work product)과 산출 변형물

  (product variants) 사이에 추적성을 가능하게 한다.
• 하나 이상의 하드웨어/소프트웨어 환경에서 개발할 때 매우 유용하다. (e.g 여러가지 운영 체제

  버전, 여러가지 라이브러리와 컴파일러, 여러가지 브라우저와 여러가지 컴퓨터에 대하여)

 

6.1.3 정적 테스팅 지원 도구 (Tool support for static testing) (K1)

 

리뷰 프로세스 지원 도구(Review process support tools)


리뷰 프로세스 지원 도구는 리뷰 프로세스에 대한 정보의 저장, 리뷰 코멘트의 저장과 전달, 결함과 효과에 대한 보고, 리뷰하기 위한 규칙과/또는 체크리스트에 대한 참고사항 관리, 그리고 문서와 소스 코드 사이의 추적성의 자취를 보존한다. 리뷰 프로세스 지원도구는 지리학적으로 떨어져 있는 팀이 있다면 유용한 온라인 리뷰에 대한 지원 역시 제공할 수 있다.

 

정적 분석 도구(Static analysis tools)(D)

정적 분석 도구는 개발자, 테스터, 그리고 품질 보증 관련자가 동적 테스팅 전에 결함을 발견하는 것을 돕느다. 정적 분석 도구의 목적은 다음을 포함한다.

 

• 코딩 표준의 강제
• 구조와 의존성의 분석(e.g 링크된 웹 페이지)
• 코드 이해의 지원

 

정적 분석 도구는 코드로부터,예를 들어 계획이나 위험 분석에 대한 중요한 정보를 줄 수 있는,

특성(e.g complexity)을 계산할 수 있다.

 

모델링 도구(Modeling tools) (D)

모델링 도구는 소프트웨어의 모델을 검증하는 것을 가능하게 한다. 예를 들어, 데이터베이스 모델 확인기(checker)는 데이터베이스 모델내의 불일치성과 결함을 발견할 수 있다. 다른 모델링 도구는 정적 모델이나 객체 모델내의  결함을 발견할 수 있다. 이러한 도구는 때때로 모델에 기반한 일부의 테스트케이스를 생성하는 것을 지원한다. (아래의 테스트 디자인 도구를 보라)

 

정적 분석 도구와 모델링 도구의 주된 혜택은 개발 프로세스내에서 초기에 더 많은 결함을 발견하는 비용 효과이다. 그 결과로 개발 프로세스는 더 적은 재작업(rework)으로 인하여 가속화되고 향상될 수 있다.

 

6.1.4 테스트 명세 지원 도구 (Tool support for test specification) (K1)

 

테스트 디자인 도구 (Test design tools)

 

테스트 디자인 도구는 요구사항, 그래픽 사용자 인터페이스(GUI), 그리고 디자인 모델(상태, 데이터, 또는 객체), 또는 코드로 부터 실제 테스트나 테스트 입력을 생성한다. 이러한 타입의 도구는 예상되는 결과 역시 생성할 수 있다. (i.e 테스트 예상치를 이용할 수도 있다.) 상태나 객체 모델로부터 생성된 테스트들은 소프트웨어내의 모델의 구현을 검증하는데 유용하다. 이러한 것들은 도구가 생성하는 테스트들의 완전함 때문에 귀중한 시간을 절약할 수 있고 테스팅의 증가되는 완전함을 제공한다.

 

이러한 분류의 다른도구들은 때때로 테스트 스텁(stub)이나 테스트를 생성하는 테스트 프레임이라 불리우는, 구조화된 템플릿을 제공함으로써 테스트들의 생성을 지원하는 것을 도울수 있다. 따라서 테스트 디자인 프로세스의 속도를 높일 수 있다.

 

테스트 데이터 준비도구 (Test data preparation tools) (D)

테스트 데이터 준비도구는 테스트 실행동안에 사용되어야 하는 테스트 데이터를 설정하기 위하여 데이터베이스, 파일 혹은 데이터 전송을 조작한다. 이러한 도구의 혜택은 데이터 보호를 위하여 생생한 데이터를 익명으로 만들어진 테스트 환경에 전송되는 것을 보증한다는 것이다.

 

6.1.5 테스트 실행과 로깅 지원 도구 (Tool support for test execution and logging) (K1)

 

테스트 실행도구(Test execution tools)

테스트 실행 도구는 스크립팅 언어를 사용함으로써 지정된 입력과 예상되는 결과를 이용하여 자동이나 반자동으로 실행되어야 하는 테스트를 가능하게 한다. 예를 들어, 스크립트 언어는 제한된 노력을 가지고 비슷한 단계의 시스템의 여러 부분에 대한  다양한 데이터를 가지고 반복되는 테스트들을 조작하는 것을 가능하게 만든다. 일반적으로 이러한 도구들은 동적인 비교 특성과 각각의 실행된 테스트에 대한 테스트 로그를 제공하는 것을 포함한다.

 

테스트 실행도구는 반복 기록 도구(capture playback tools)로 참조될 때, 기록된 테스트들을 이용할 수 있다. 예를 들어, 탐색 테스팅(Exploratory testing) 동안에 입력을 추출하는 것과 스크립되지 않는 테스팅은 오류(failure)가 발생했을 때, 테스트를 재생성하고/하거나, 테스트를 문서화하기 위하여 유용해질 수 있다.

 

테스트 장비/단위 테스트 프레임워크 도구 (Test harness/unit test framework)(D)

테스트 장비는 테스팅 객체가 운영되어야 하는 환경을 시뮬레이션함으로써 컴포넌트 혹은 시스템의 일부분의 테스팅을 용이하게 할 수 있다. 이것은 실제 환경의 컴포넌트들이 아직 이용가능하지 않거나, 스텁과/이나 드라이버, 또는 단순히 예상가능하고 통제가능한 테스트하의 객체에 대하여 모든 결함이 있을 수 있는 환경을 제공하는 경우 모두에서 행하여 질 수 있다.

 

프레임워크는 테스트 되어야 하는 객체를 호출하고/하거나 그 객체에 대하여 피드백을 주는 것으로 코드, 객체, 메소드 또는 함수, 유닛 또는 실행 될 수 있는 컴포넌트의 일부에 대하여 생성될 수 있다. 이것은 실제의 결과 목표 대신에 객체로부터 결과를 얻기 위하여 스텁을 제공하고/하거나 테스트 객체에 대하여 입력을 제공하는 인위적인 수단을 제공하는 것으로 할 수 있다.

 

테스트 장비는 반드시 함께 테스트 되어야 하는 언어, 운영 시스템 또는 하드웨어와 같은 미들웨어의 실행 프레임워크를 제공하는데 사용 될 수 있다.

 

이것은 컴포넌트 테스트 레벨에 특별한 초점을 가지고 있는 경우, 단위 테스트 프레임웍크 도구라 불릴수 잇다. 이러한 도구의 타입은 만들어진 코드를 가지고 동시에 컴포넌트 테스트의 실행을 지원한다.

 

테스트 비교기 (Test comparators)

테스트 비교기는 파일, 데이터베이스 또는 테스트 결과들 사이의 차이점을 결정한다. 테스트 실행도구는 일반적으로 동적인 비교기를 포함한다. 그러나 실행 후의 비교는 분리된 비교도구에 의하여 행하여진다. 테스트 비교 도구는 테스트 오라클을 이용할 수도 있다. 특히 자동화 되었다면 말이다.

 

커버리지 측정도구(Coverage measurement tools) (D)

커버리지 측정 도구는 사용되는 측정 기법, 무엇이 측정되었는가와 코딩 언어에 의존하여 방해가 될 수도, 되지 않을 수도 있다. 코드 커버리지 도구는 실행된 코드 구조의 특정 타입의 퍼센티지를 측정한다. (e.g 문장, 브랜치, 또는 분기 그리고 모듈 또는 함수 호출). 이러한 도구는 테스트의 셋에 의하여 실행된 구조의 측정된 타입이 얼마나 완벽한지 보여준다.

 

보안도구(Security tools)

보안도구는 컴퓨터 바이러스와 서비스 공격의 거부에 대한 확인을 한다. 예를 들어, 방화벽은 엄격히 말해 테스팅 도구는 아니지만, 보안 테스팅을 위하여 사용할  수 있다. 다른 보안 도구는 시스템의 특정한 취약점을 찾음으로써 시스템에 부하를 준다.

 

6.1.6 성능과 모니터링 지원 도구 (K1)

 

동적 분석도구 (Dynamic analysis tools) (D)

동적 분석도구는 시간 종속성이나 메모리 부족과 같은 소프트웨어가 실행할 때만 발생하는 결함들을 발견한다. 이들은 일반적으로 컴포넌트 테스팅과 컴포넌트 통합 테스팅, 그리고 미들웨어를 테스팅 할 때 사용된다.

 

성능 테스팅/부하 테스팅/ 스트레스 테스팅 도구(Performance test/load testing

/stress testing tools) 

성능 테스팅 도구는 다양하게 시뮬레이션 된 사용 조건 아래서 어떻게 시스템이 동작하는가를 모니터하고 보고한다. 이들은 응용 프로그램, 데이터베이스 또는 네트웍이나 서버와 같은 시스템 환경에 대한 부하를 시뮬레이션한다. 이러한 도구들은 부하나 압박과 같이 이것이 측정하는 성능 측면에 따라 명명되므로, 부하 테스팅 도구나 스트레스 테스팅 도구로도 알려져 있다. 이것들은 종종 파라미터에 의하여 통제되는 테스트의 반복적인 실행을 자동화하는 것에 기초한다.

 

모니터링 도구(Monitoring tools)

모니터링 도구는 엄격하게 말하면 테스팅 도구가 아니지만, 다른 수단에 의하여 이용가능하지 않은, 테스팅 목적을 위하여 사용될 수 있는 정보를 제공한다.

 

모니터링 도구는 계속적으로 특정 시스템 자원의 사용에 대하여 분석, 검증하고 보고한다. 그리고 가능한 서비스 문제에 대한 경고를 한다. 이들은 소프트웨어와 테스트웨어의 버전과 구축에 대한 정보를 저장하고, 추적성을 가능하게 한다.

 

6.1.7 특정 응용 프로그램 영역의 도구 지원 (Tool support for specific application areas)(K1)

 

위에서 구분된 도구 타입의 개별적인 예들은 특별한 종류의 어플리케이션 사용에 대한 특화가 될 수 있다. 예를 들어, 성능 테스팅 도구는 웹 기반의 응용 프로그램에 특화될 수 있다. 정적 분석 도구는 특정한 개발 플랫폼에 특화될 수 있다. 그리고 동적 분석도구는 테스팅 보안 측면에 대하여 특화된다.


상업적인 도구 슈트(suite)는 특정한 응용 프로그램 영역(e.g 임베디드 시스템)을 목표로 삼을 수 있다.

 

6.1.8 다른 도구를 사용한 도구 지원 (Tool support using other tools) (K1)

 

여기에서 리스트 된 테스팅 도구는 테스터들에 의하여 사용되는 유일한 도구 종류는 아니다. - 예를 들어, 테스터들도 스프레드 쉬트, SQL, 리소스 혹은 디버깅 도구(D)를 사용할 수도 있다.

 

========================================================================================

 

◆ SW 테스팅 도구

 

▪ 광의의 SW 테스팅 도구
   - 상용 성능 테스트 자동화 도구 (일반적으로 고가)
   - 테스트 관리 자동화 도구 (Defect Tracking 시스템 등)
   - 테스트 지원 자동화 도구 (Analyzer, Windiff, Equalizer, Ghost)
   - 테스트 방법론 및 문서 (체크 리스트, TC 작성 방법론 등)

▪ 협의의 SW 테스팅 도구
   - 상용 성능 테스트 자동화 도구
   - 테스트 관리 자동화 도구 (Defect Tracking 시스템 등)

 

◆ SW 테스트 자동화 도구 관련 이슈

 

자동화 도구 사용의 장점
 ▪ 테스트 노력 절감 및 실수 감소 -> 반복되는 부분을 자동화시켜 리소스를 보다 위험도가 높은

   부분의 테스팅에 집중하는 것을 가능하게 함
 ▪ 비용 효율적 유지보수 가능 -> 고객의 요구에 빠르게 응답
 ▪ 품질 향상 -> 고객 만족도 향상
 
자동화 도구 사용의 단점
 ▪ 고가이면서 유지 비용 (가상사용자, 업그레이드, 기술지원 등)도 높음
 ▪ 초기 환경 및 테스트 설정에 많은 시간과 노력 소요
 ▪ 테스트 스크립트 유지보수가 어려움

 

◆ SW 테스트 자동화 고려 사항

 

 ▪ 적절한 자동화 대상 프로젝트 선정
 ▪ 자동화를 테스트 전략과 계획에 포함
 ▪ 자동화 도구 선정에 신중
    - 적합한 것을 찾기 어려움, 지원과 교육 고려
 ▪ 제품과 테스트 스팩을 Formal하게 변경하는 것에 대한 준비
 ▪ 자동화 테스트 지원 시설(도구) 개발 계획
     - 자동화 도구의 적용범위의 한계로 직접 개발하는 부분 존재
 ▪ 테스팅을 다른 방식으로 진행하는 것 고려 (개발 계획 또는 도구 방식에 맞게)
    - 자동화 테스트는 상세한 테스트 지침 필요
 ▪  자동화 도구 및 자동하 테스팅 교육에 투자

 

◆ 모델 기반 테스팅

 

 ▪ 요구사항(개발 관련 문서) -> 테스트 모델링(UML 등 이용) -> Animate ->
   테스트 케이스 자동 생성 (스크립트 패턴, 맵핑) -> 테스트 스크립트 생성 -> 테스트 수행

 

◆ 모델이란?

 

▪ 작은 오브젝트 : 다른 커다른 오브젝트를 대포함, 스케일링 가능
▪  모델은 "간결" - 작고 간결하여 테스팅 관점에서 수동으로 테스트 설계하는 것보다 저럼하며,

   일부(한가지 측면)만 테스팅 하기 이해 "부분적 모델" 이 가능하다.
▪ 모델은 "정확" - 기대 "행위"를 기술해야 하며, UML의 여러 다이어그램을 복합적으로 이용