본문 바로가기

4.개발 및 운영 환경

소프트웨어 테스트란

들어가기

다양한 형태의 테스트 방법을 간단하게 살펴볼려고 한다. 다양한 테스트 방법을 어느 정도 알아야 현재 개발 단계에서 적절한 테스트 선택할 수 있고 생각한다.

작성자: ospace114@empal.com, http://ospace.tistory.com/

테스트란

소프트웨어 테스트는 소프트웨어 결함을 존재하고 있음을 증명하는 과정이다. 테스트는 소프트웨어가 "완벽하다"고 검증하는게 아니라 "결함이 없다"라고 보증하는 절차이다.
IEEE 정의에 따르면 테스트는 시스템이 정해진 요구를 만족하는지, 예상과 실제 결과가 어떤 차이를 보이는지 수동 또는 자동 방법을 이용하여 검사하고 평가하는 일정의 과정이다라고 정의되었다.

테스트 종류

다양한 테스트 종류가 있다. 간단하게 정리했다.

  • 개발단계
    • 단위테스트: 단위 프로그램, 모듈 명세서에 정의된 기능 수행 확인한다. 보통 클래스나 함수 단위로 검증된다.
    • 통합테스트: 단위 시스템간 연계성 및 기능 요구사항 확인한다. 요구사항에 있는 기능 단위를 검증한다.
  • 시험방법
    • White Box 테스트: 프로그램 내부 구조와 논리 시험한다. 내부 구조를 알고 있는 경우 테스트할 수 있다.
    • Black Box 테스트: 기능 시험으로 Input, Output 기반 테스트이다. 즉, 내부 구조를 알지 못하는 경우에 테스트이다.
  • 제품상태
    • 정적 테스트: 실행 중이 아닌 제품 코드 리뷰 및 인스펙션이다. 보통 소스코드나 환경구성 내용을 검증한다.
    • 동적 테스트: 실행 중인 시스템에 가설 성립되는지 테스트한다.
  • 결함
    • 회귀 테스트: 결함 수정이 되었는지, 수정으로 인해 새로운 결함이 발생하는지 테스트한다.
    • 확정 테스트: 결함 수정 후 제대로 적용되었는지 확인한다.

그리고 테스트가 완벽하게 되었는지 어떻게 알 수 있을까? 이를 위해 코드 커버리지(Code Coverage)가 있다. 코드 커버리지는 테스트 자체 품질을 측정하기 위한 기준 제공한다. 테스트를 실행할 경우 소스코드에서 얼마나 테스트 되었는지에 대한 정도를 의미한다. 코드 커버리지가 높아질수록 더 많은 소스코드가 검증되었다고 말할 수 있다.

TDD 개발방법론

테스트를 활용한 개발방법론이 있다. 일반적인 개발방식은 기능에 대해 구현하고 테스트하는 순서를 가진다. TDD(Test-Driven Developement)인 경우는 반대로 요구사항 테스트 요건을 먼저 작성하고 구현한다. 즉, 개발 전에 테스트 코드를 먼저 작성하고 개발하면서 테스트 코드가 통과하는지 검증한다.

  • 기존개발: 설계 > 구현 > 테스트 > 피드백
  • TDD개발: 설계 > 테스트 코드 > 피드백 > 구현

TDD로 개발할 경우 장점이다.

  • 높은 코드 품질: 개발시간 15~35% 증가, 결함 40~90% 감소
  • 재설계 시간 절감
  • 쉬운 테스트 문서화
  • 디버깅 시간 절감
  • 추가 구현 용이

TTD에서 단점이다.

  • 코드 생산성 저하
  • 예외 상황에 의한 원칙 위배

마무리

대부분의 개발 프로세스를 보면 테스트는 통합 테스트를 진행한다. 통합 테스트도 자동화가 아닌 수작업으로 일일히 진행한다. 자동화를 하지 않는 이유는 대부분 반복 테스트가 아닌 기능 완결성을 검증하기 위한 목적으로 테스트를 통과하면 해당 기능은 완료되었다고 간주한다. 자동화로 인해 테스트 코드를 작성할 경우 실용성 있는 테스트 코드를 작성하기 위해 거의 개발시간 만큼 필요로 한다. 부족한 개발 일정으로 인해 테스트 코드 작성이 제대로 진행안되고 형식적으로 하는 경우가 많다. 그래서 어떻게 보면 TDD가 현실과 동떨어졌다고 볼 수 있다. 그러나 실제 테스트 코드를 제대로 작성하고 품질이 높아진다면, 통합테스트 단계에서도 결함이 거의 발생하지 않을 것이고, 테스크 코드를 통해 기존 코드를 이해하는데 도움이 된다. 결함이 많이 발견되서 수정된 코드가 더 품질이 좋아져서 추후 결함이 없을 거라고 생각할 수 있다. 그러나 실제로는 결함이 많이 발견될 수록 잠재적인 결함이 더 많이 존재한다고 한다. 부족한 글이지만 도움이 되었으면 하네요. 모두 즐거운 코딩하세요 ^^. ospace.

참고

[1] nickjo, TDD란, http://nickjoit.tistory.com/18
[2] 조대협, 3장 소프트웨어 테스트, https://t1.daumcdn.net/cfile/tistory/0233E4375093D58A36

반응형