QA 와 QC 비교 그리고 TEST

QA와 QC에 대해 정확히 알아보려한다.

대략적으로는 알았지만 둘의 단어의 차이점을 알아봤다.


QA 와 QC 란?

우선,

QA 란 Quality Assurance 의 약자로 품질 보증을 말한다.

일정 수준의 품질을 가질 수 있도록 제품 출시 이전에 각종 테스트 및 검수 작업을 하는 업무를 말한다.

비슷한 용어로 QC가 있으며 Quality Control 의 약자로 품질 관리를 말한다.


QA / QC 차이

그렇다면 QA 와 QC 둘은 비슷한것같은데 무엇이 다를까?

내가 찾아본바로는 

QA (Quality Assurance) : 제품개발단계 품질보증 활동 (고품질 제품 확보가 주요 목적)
QC (Quality Control) : 제품양산단계 품질관리 (불량품 제거가 주요 목적)



간단히 말하면 QC는 결함을 발견하는것이고 QA는 결함을 예방한다라고 할 수 있다.



그렇다면 우리가 코딩해서 만드는 소프트웨어에서 품질이란 무엇일까? 궁금했다.


Qulity 품질

소프트웨어 품질은 '제품 품질 + '프로세스 품질' 이다.


여기서 말한 제품 품질은 사용자가 소프트웨어 제품을 사용하는데 있어 직접적인 영향을 미치는 즉 소프트웨어 제품 자체가 가지고 있는 품질을 말한다.

이러한 제품 품질 향상을 위해 기본적인 활동인 소프트웨어 테스팅을 통해 확인한다.


그리고 프로세스 품질이란 소프트웨어 제품의 최종 품질에 영향을 줄 수 있는 소프트웨어 개발 과정에서 수행되는 작업(프로세스)의 품질을 말한다.

이러한 프로세스 품질 향상을 위한 활동으로 CMMI, SPICE 등을 통해 확인 할 수 있다.


# SPICE  (Software Process Improvement and Capability Determination) - SW 프로세스 개선, 평가에 관한 국제 표준인 SPICE(ISO/IEC15504)

# CMMI (Capability Maturity Model Integration) - 미 카네기멜론대학 소프트웨어 공학연구소와 산업계가 공동으로 개발, 보급하고 있는 소프트웨어 및 시스템 품질관리 인증으로, 정보시스템을 구축하는 기업의 능력 수준을 나타내는 기준


TEST

앞서, QA란 일정 수준의 품질을 가질 수 있도록 제품 출시 이전에 각종 테스트(Test) 및 검수 작업을 하는 업무라고 알아봤다.

그럼 Test란 무엇인가?

테스트란 실제 실행하는 하나하나의 실체를 말한다. QA 업무에서 대부분의 경우 테스트케이스(Test Case)를 의미하고 있다.

아래에 작성된 테스트 원리 13가지를 항상 숙지하고 수행하면 품질 향상에 도움이 될것이다.


# 테스트의 13가지 원리

 1. 테스트케이스에서 중요한 부분은 예상된 결과나 산출물을 정의하는 것
 2. 테스트는 프로그램을 개발한 개발자보다 다른 개발자나 테스트 전문가가 하는것이 더 효과적
 3. 프로그램 개발 조직 부서는 자신의 프로그램을 테스트 하지않아야 한다.
 4. 각 테스트의 결과들을 철저하게 검사한다.
 5. 테스트케이스는 예상되고 알맞은 값 뿐만 아니라 예상하지 못하고 틀린 값도 있어야 한다.
 6. 수행되어야 할 기능만 검사하는 것은 테스트의 절반만 수행한 것이다.
 7. 한번 쓰고 버릴 프로그램이 아니라면 테스트케이스의 재사용을 고려한다
 8. 오류가 발견되지 않을 것이라는 기대를 하지 않는다.
 9. 프로그램의 섹션에서 더 많은 오류 존재의 개연성은 색션에서 이미 찾은 많은 오류와 비례한다.
 10. 테스트는 대단히 창조적이고 지적인 작업 활동이다.
 11. 모든 테스트는 고객의 요구사항을 찾아낼 수 있어야 한다.
 12. Pareto 원리는 소프트웨어 테스트에 적합하다.
 13. 테스트틑 작은 부분에서 시작하고, 큰 부분으로 옮겨 가야 한다.




Testing

위의 Test를 실행하기 위해 요구되는 전체적인 활동을 Testing 이라고 한다.
테스트는 하나 하나의 단위적인 수행 활동 정도를 말하며, 테스팅은 그러한 수행 활동의 총집합적인 의미이다.
각각의 테스팅 단위를 구분할 때는 '테스트', 통합할때는 '테스팅' 이라고 한다.


# 테스팅의 목적

 1. 잔존 결함 발견
 2. 개발 시스템 & 소프트웨어에 대한 자신감 부여
 3. 결함을 미연에 발견
 4. 명세 충족 확인
 5. 사용자 및 비즈니스의 요구 충족 확인
 6. 개발 프로세스 점검, 이슈 제기
 7. 논리적 설계의 구현 검증
 8. 시스템 & 소프트웨어가 적절히 동작함을 확인


그리고 테스팅의 목적은 아래의 각 단계에 따라 변경될 수 있다.

#개발과정
 - 소프트웨어의 결함을 찾아내고 수정하기 위해서 가능한 많은 장애의 원인을 발생 시키는 목적

#인수과정
 - 예상된 대로 시스템이 동작하는지 확인하고, 요구사항에 맞는지 확신을 얻는 목적

#품질경가
 - 특정 시간 또는 정해진 시간에 시스템 & 소프트웨어를 출시하는 것에 대한 리스크를 개발 프로젝트 관련자에게 전달하는 목적

#유지보수
 - 변경사항을 추가적으로 개발하는 중에 새로운 결함이 유입되었는지 확인하는 테스팅 목적

#운영
- 신뢰성 또는 가용성과 같은 시스템의 특성을 평가하기 위한 목적




댓글