ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 테스팅 원리
    테스팅 관련/개념 2020. 5. 27. 00:31

    원리 (Principles)

    효과적인 테스팅을 하기 위한 토대 (foundation)

    메소드 & 테크닉

    원리를 기반으로 하여 메소드들과 테크닉들을 빌드할 수 있다.

    방법(Methodologies)

    메소드들을 효과적으로 적용시킨다.

    마지막으로, 이 과정을 툴을 사용하여 자동화시킨다.

     


    테스팅 & 분석의 원리

    • 무엇: 품질공정(Quality process)
    • 어디서: 버그를 가지고 있고 문제있는 구조와 모듈에 집중
    • 언제: 가능한한 일찍 그리고 자주 테스팅 실행
    • 누가: 효과적인 테스팅을 위해 조직(organization) 구조화(structuring)
    • 어떻게: 효과적인 테스팅을 위한 전략들

    무엇: 품질공정(Quality process)

    품질(quality): 컴포넌트나 시스템 또는 프로세스가 특정한 요구사항 및 사용자/고객의 요구와 기대를 충족시키는 정도

    품질공정(Quality Process): 활동(activities)책임감(responsibilities)의 세트

    • 적절한 신뢰성을 보장하는데 주로 집중
    • 제품 스케쥴 또는 제품 사용성에 대해서 고려

    품질공정이 제공하는 프레임워크,

    • 활동(activities)을 선택(selecting)하고 정리(arranging)
    • 상호작용을 고려하고, 다른 중요한 목표들과 균형유지(trade-off)

    품질의 목표

    • 과정(process)의 품질: 반복가능성(repeatability), timeliness(적시), 비용, ... 지속적인 개선
    • 제품의 품질
      • 내적 품질: 재사용가능성, 관리가능성(manageability), 유지가능성, 수정가능성, ...
      • 외적 품질
        • 신뢰성(dependability) 품질: 가용성, 정확성, 신뢰성(reliability), 안전성, 강건성(robustness)
        • 유용성(usefulness) 품질: 사용성(usuability), 성능(performance), 보안, 이식성(portability), 상호운용성(interoperability)

    어디서: 오류 발생이 쉬운 요소들

     

    프로그래머들은 비슷한 실수를 하는 경향이 있다.

     

    소수점 숫자들

    선천적으로 부정확함. 부정확은 비교불가능으로 이어질 수도 있다.

    연속적인 계산은 정확도를 잃게 할 지도 모른다.

     

    포인터(c/c++)

    메모리를 잘못 가르키는 포인터들은 데이터 오류를 일으킬 수 있다.

    에일리어싱(aliasing)은 프로그램을 이해하고 변경하는데 어려움을 야기시킬 수 있다.

     

    병행성(parallelism)

    병행 과정들 사이에서 보이지 않는 상호작용으로 인해 감지하기 힘든 시간 오류들을 일으킬 수 있다.

    만약 동기화(synchronization)가 잘못 사용된다면, 결과적으로 교착상태(deadlock)가 될 수 있다.

    병행성(parallelism): 컴퓨터 시스템의 여러 부분의 동시 작동을 말하며, 여러 프로그램의 동시 처리 또는 여러 컴퓨터 시스템의 동시 작동을 뜻한다.
    교착상태(deadlock): 둘 이상의 프로세스가 서로 남이 가진 자원을 요구하면서 양쪽 모두 작업 수행을 할 수 없이 대기 상태로 놓이는 상태.
    교착상태를 처리하는 대표적인 3가지 방법
    1. 예방(prevention): 교착상태를 유발하는 조건들이 성립되지 않게 사전에 이를 차단함으로서 절대 발생하지 않게 하는 전략
    2. 방지(avoidance): 자원 할당 시, 교착상태를 유발할지를 사전에 확인하여 교착상태를 피할 수 없는 자원할당 방법이 있을 경우에만 자원을 할당해주는 전략 
    3. 감지 및 회복(detection and recovery): 자원 요청이 들어올 때마다 일단 자원을 할당해주며 대신 주기적으로 교착상태가 발생했는지 확인하여, 만약 교착상태가 발생하였다면 시스템의 상태를 회복하여 주는 전략

    수의 한계(limits)/경계(boundaries)

    정수/소수에 있어 아주 큰 값

    관계식(relational expression)에 대한 경계값

     

    중단(interrupts)

    중단은 중요한 작업이 끝나버리게 할 수 있으며, 프로그램을 이해하기 어렵게 만든다

    중단은 goto문과 비슷하다

     

    복잡한 논리식(Boolean expressions)

    내포된 논리연산자(nested boolean operators)들은 이해하기 어려울 수 있다.

     

    타입들 사이의 캐스트와 변환(conversions)

    특히, 숫자 유형은 정확도를 잃게 하거나 넘침을 야기시킬 수 있다.

    캐스트(cast): (C나 자바 같은 컴퓨터 언어에서) 캐스트는 객체를 하나의 형태에서 다른 형태로 변환시켜 주는 프로그램 행위를 자칭한다. 
    넘침(overflow): 사칙연산 결과가 레지스터 또는 컴퓨터가 다루는 수의 범위를 넘어서는 일.

    모듈 테스팅을 위한 80-20 법칙

    적은 수의 모듈들은 사전-릴리즈 테스팅 도중에 발견된 대부분의 결점들을 함유한다.

    경험에 따르면, 20%의 모듈은 80%의 버그들을 가지고 있다.

     


    프로그래머들은 많은 이유들로 인해 실수한다.

     

    하지만, 몇몇 언어의 구조들과 모듈들은 버그를 가지고 있을 확률이 더 크다.

     

    이러한 요소들에 주의를 가져 테스팅에 집중해야한다.

     

    '테스팅 관련 > 개념' 카테고리의 다른 글

    Validation과 Verification (V&V)  (0) 2020.05.27
    소프트웨어 개발의 "V 모델"  (0) 2020.05.27
    신뢰성(Dependability) 정의  (0) 2020.05.26
    테스트가 뭐지?  (0) 2020.05.23
    왜 소프트웨어 테스팅은 어려울까?  (0) 2020.05.23
Designed by Tistory.