본문 바로가기

[게임QA 이론]

[ISTQB] 1. 왜 테스팅이 필요한가. Quality Assurance

1. 소프트웨어 테스팅의 기초(Fundamentals of testing)



1.1 소프트웨어 시스템 테스팅(Why is testing necessary)


SW 산업에 종사하는 대부분의 엔지니어들은 테스팅이 필요한 것이라는 인식에는 대부분 동의하지만 구체적인 이유를 들라고 하면 대답하지 못하는 경우가 대부분이다.



1.1.1  소프트웨어 시스템 관점에서 테스팅의 필요성(Software systems context)


소프트웨어 시스템들은 비지니스 응용 프로그램(ex 뱅킹 프로그램)에서 소비재(ex 자동차)까지 생활에 있어서 차지하는 부분이 증가하고 있다. 대부분의 사람들은 소프트웨어가 (자신들이) 예상한 것처럼 동작하지 않은 경험을 가지고 있다. 소프트웨어가 올바르게 동작하지 않는 것은 비용, 시간 또는 사업적인 평판을 포함한 많은 문제를 야기시킬수 있으며, 심지어 상해나 사망의 원인이 될 수도 있다.



1.1.2 소프트웨어 결함의 원인(Causes of software defects)


인간은 문서내에서, 시스템이나 소프트웨어에서, 코드내에서 결함을 생성하는 에러(실수)를 만들수 있다. 만약 코드내의 결함이 실행되면, 시스템은 의도한 동작을 하지 못하고(또는 해서는 않되는 동작을 하고), 이는 실패의 원인이 된다. 소프트웨어, 시스템 혹은 문서상의 결함들은 실패의 원인이 될 수 있지만 모든 결함들이 실패(failures)의 원인이 되는 것은 아니다.


결함(Defects)은 인간이 오류에 빠지기 쉽고, 시간의 압박이나 복잡한 코드, 하부 구조의 복잡성, 기술의 변경, 그리고/또는 많은 시스템들의 상호작용 때문에 생긴다.

Defects occur because human beings are fallible and because there is time pressure, complex code, complexity of infrastructure, changed technologies, and/or many system interactions.


실패(Failures)는 환경적인 조건이 원인이 될 수 있다. ; 발열, 자기장, 전기장, 그리고 오염은 펌웨어(firmware)내의 결점(faults)의 원인이 될 수 있으며, 하드웨어 조건의 변경은 소프트웨어가 동작하는데 영향을 줄 수 있다.

Failures can be caused by environmental conditions as well: radiation, magnetism, electronic fields, and pollution can cause faults in firmware or influence the execution of software by changing hardware conditions.



1.1.3 소프트웨어 개발, 유지보수, 운영에 있어서 테스팅의 역할

(Role of testing in software development, maintenance and operations)


만약 발견될 결함들이 시스템이 운영을 위해 릴리즈되기 전에 고쳐진다면, 시스템과 문서에 대한 엄격한 테스팅은 운영 환경내에서 발생하는 문제들의 위험을 줄이는데 도움이 될 수 있으며, 소프트웨어 시스템의 품질에도 도움을 준다.

소프트웨어 테스팅은 계약상(법적) 요구조건들, 또는 산업에 특화된 표준들을 만족시키기 위하여 요구될 수 있다.



1.1.4 테스팅과 품질(Testing and quality)


테스팅의 조력(助力)으로, 기능적 또는 비기능적 소프트웨어 요구사항과 특성(신뢰성, 사용성, 효율성, 유지보수성 등)에 관련된 해당 소프트웨어의 품질을, 발견된 결함(데이터)에 근거하여 측정하는 것이 가능하다. 소프트웨어의 품질특성에 대한 보다 상세한 정보는 국제표준인 '소프트웨어 공학 - 소프트웨어 제품 품질(Software Engineering - Software Product Quality)' (ISO/IEC 9126)에 기술되어 있다.


테스팅으로 발견된 결함이 극소수이거나 없다면 소프트웨어의 품질에 대해 확신(Confidence)을 가질 수 있다. 올바르게 디자인된 테스트는 시스템의 전반적인 리스크 수준을 감소시키게 된다. 테스팅이 결함을 찾아내고, 발견된 결함이 수정될 때 소프트웨어 시스템의 품질이 증가하게 된다.


품질을 높이기 위해서는 이전 프로젝트에서 테스팅과 관련하여 많은 경험과 정보를 확보하여야 한다. 다른 프로젝트에서 발견된 결함의 근본 원인에 대한 이해를 바탕으로, 프로세스는 개선될 수 있으며, 그러한 결함의 재발이 방지될 수 있어, 결과적으로, 차후 시스템의 품질이 개선될 수 있다.


개발 표준이나 교육 훈련 그리고 결함 분석 등과 함께 테스팅은 품질 보증 활동의 하나로 통합되어야 테스팅을 통해 소프트웨어 시스템의 품질을 확보할 수 있다.



1.1.5 얼마만큼의 테스팅이 적당한가?(How much testing is enough?)


얼마만큼 테스팅을 해야 충분한 것인가? 이 질문만큼 테스트 엔지니어를 괴롭히는 것도 없을 것이다. 어느 정도나 테스팅하는 것이 적절한지를 파악하기 위해서는 리스크(Risk) 수준을 고려해야 하며, 기술적인 내용과 비즈니스, 제품 및 프로젝트 리스크, 시간과 비용 같은 프로젝트의 제약 사항을 고려하여야 한다.
Deciding how much testing is enough should take account of the level of risk, including technical and dusiness product and project risks, and project constraints such as time and budget.


테스팅은 테스트된 소프트웨어나 시스템의 다음 개발 단계로의 릴리즈(Release) 결정 또는 고객에게 이양(移讓, Handover) 하는 릴리즈 결정을 개발 프로젝트 관련자들이 내릴 수 있도록 충분한 정보를 제공해야 한다.
Testing should provide sufficient information to stakeholders to make informed decisions about the release of the software or system being tested, for the next development step or handover to customers.




테스팅이란
 - 시스템에서 결함을 찾는 것이다.
 - 결함 발견 및 수정 (때때로 예방까지)
 - 테스트는 실제 수행하는 하나하나의 실체이다.
 - 주로 결함 발견(Defect Dectection -QC) 메커니즘을 의미하지만, 결함 예방(Defect Prevention -QA)과 조화를 이뤄야 한다.
 - Test case를 만들어 실행하는 것 뿐 아니라 테스팅 전략 수립과 계획/설계/결함 수정과 도구의 사용등 포괄적인 의미이다.


IEEE의 정의
  " 소프트웨어의 테스트는 수동이나 자동으로 시스템을 시험 작동시키고 평가하는 작업으로 명시된 요구를 잘 만족하는지, 즉 예상된 결과와 실제 결과와의 차이를 인식하기 위한 목적을 가진다."