구글은 소프트웨어를 어떻게 테스트하는가

on under algorithm
2 minute read

구글은 소프트웨어를 어떻게 테스트하는가

역활

-소프트웨어 엔지니어(SWE. SoftWare Engineer) -테스트 소프트웨어 엔지니어(SET. Software Enginner in Test) 테스트 가능성(testability), 범용 테스트 인프라스트럭처에 포커스가 맞추어져 있다. 고객이 사용할 기능보다는 품질에 관한 서비스 기능을 만든다. -테스트 엔지니어(TE. Test Engineer) 테스트를 하되, 반은 사용자의 입장, 나머니는 개발자 입장에서 테스트를 한다.
TE는 전체 품질 활동을 계획하며, 테스트 결과를 해석하고, 테스트를 수행하며, end to end 테스트 자동화를 빌드한다.

기기, 걷기, 뛰기

구글은 많은 기능을 한번에 릴리즈하려고 시도하지 않는다.
‘최소 유용 제품(minimum useful product)’을 최초 버전으로 빌드하고, 내외부의 피드백을 수용하여, 품질에 대한 숙고를 하고, 이어지는 차기 버전들을 빠르게 반복한다.
제품을 사용자에게 전달되기 전에 ‘카나리아 개발’, ‘테스팅’, ‘베타’, ‘릴리즈 채널’을 거친다.
다른 여러 채널을 통해 자신의 가치를 증명해야 한다.

카나리아 채널

제품에 관여한 엔지니어(개발자, 테스터), 매니저만 채널의 빌드를 사용한다.
릴리즈 수준까지는 목미치는 일일 빌드의 경우에 사용한다.

개발 채널

개발자가 매일 수행하는 작업을 위해 쓰인다.
어느 정도 테스트를 통과한 주간 빌드를 사용한다.
제품에 관여한 모든 엔지니어는 반드시 개발자 채널 빌드를 갖고 작업한다.
실제 업무에 일관성 있는 테스트에 사용한다.
개발 채널 빌드에 적합하지 않으면 카나리아 채널로 회귀되며, 엔지니어 침에 의한 심각한 재평가를 받게 된다.

테스트 채널

대부분의 테스팅을 통과하고, 엔지니어가 한 달정도 작업한 것 중 신뢰성이 제일 좋은 빌드이다.
베타 채널 빌드 후보이며, 회사 전체가 사용할 수 있을 정도로 안정적이어야 한다.

베타 or 릴리즈 채널

내부 사용헤서 살아남고, 팀이 설정한 모든 품질 기준을 통과한 안정된 테스트 채널 빌드이다.

테스트 종류

코드 테스팅, 통합 테스팅, 시스템 테스팅을 구분하지 않는다.
소형, 중형, 대형 테스트 용어를 사용한다. 테스트 형태가 아닌 범위를 강조한다.

소형 테스트 (이 코드가 해야 할 일을 제대로 하고 있는가?)

거의 자동화. 단일 함수 모듈의 코드를 테스트한다.
일반적인 기능 문제, 데이터 변질, 에러 조건, off-by-one mistake 등에 포커스를 마춘다.
짧은 주기(수 초안에)로 수행한다.
대부분 SWE가 작성한다. SET는 그보다 조금, TE는 거의 작성하지 않는다.

중형 테스트 (이웃 기능들이 의도한대로 제대로 상호 작용하고 있는가?)

기능 간 상호 호출이나 직접적으로 상호 작용하는 기능을 테스트한다.

대형 태스트(제품이 사용자가 기대한 대로 동작하며 원하는 결과를 내놓는가?)

3개 이상의 기능과, 실제 사용자 시나리오와 실제 사용자 데이터 소스를 다룬다.
수행시간은 몇 시간 이상 걸린다. 소프트웨어가 사용자 요구 사항을 만족시키는지 확인한다.

소형 테스트는 완전한 페이크(fake) 환경에서 단일 코드 유닛을 다룬다.
중형 테스트는 페이크나 실제 환경에서 여러 단위 코드들이 상호 작용하는 것을 다룬다. 대형 테스트는 단위 코드가 몇 개이든 상관없이 실제 제품 환경에서 페이크 자원 없이 테스트한다.

자동/수동 테스트를 혼합해 이 세 가지 크기의 테스트에 적용할 수 있다.
자동화 될 수 있고, 사람의 직관이 필요없다면 반드시 자동화해야 한다. 사람의 직관(개인정보를 노출하는가? 인터페이스가 예쁜가? 등)이 필요하다면 수동 테스팅으로 남겨야 한다.

“자동화 될 수 있고, 사람의 지식과 직관이 필요하지 않다면 반드시 자동화해야 한다.”


출처: 구글은 소프트웨어를 어떻게 테스트하는가

algorithm
comments powered by Disqus