QA가 되기 위해서 무엇을 준비해야 하고 어떤 요건을 갖추어야 할까요?
기업에서는 어떤 요건과 자질을 갖춘 QA를 희망할까요?
‘QA가 되는 방법'보다 확장해서 "보다 나은" QA로 성장하기 위해서 어떤 역량과 태도를 갖추는 것이 좋을까요?
보다 나은 QA로 성장하기 위해 필요한 역량을 나타내는 스킬맵으로 QA에게 요구되는 역량을 살펴봅시다.
이 스킬맵은 제가 만든것은 아니고, 레드게이트라는 기업에서 만든 스킬 맵을 한국어로 번역해보았습니다.
QA가 보유해야할 역량은 기업과 조직 문화에 따라서 조금씩 다를 수는 있습니다. 예를 들어 어떤 기업에서는 기술적 역량을 더 선호할 수 있고 또다른 기업에서는 기본 역량 외에 커뮤니케이션, 협동과 같은 자질을 갖춘 인력을 선호할 수 있습니다. 선호도에 따라 요구하는 요건과 자질은 차이가 있을 수 있으나 공통적으로 QA에게 요구하는 스킬은 화면의 맵 안에 대부분 포함되어 있습니다.
스킬맵의 구성을 먼저 살펴보면, 화면의 왼쪽에 붉은 계열로 표시된 범위가 QA에 요구되는 전문적인 기술 역량을 나타내고, 회색 범위가 QA로서 갖추어야 할 자질과 태도에 해당됩니다
주요 역량을 골자로 확인해보면,
보다 나은 QA가 되기위해 기본적으로 필요한 기술 역량의 첫번째는, 소프트웨어 공학에 대한 이해가 필요합니다.
여기에는 1) Python, Java, C++과 같은 개발 언어에 대한 이해 2) 안드로이드, iOS, 웹 등의 플랫폼 운영체제에 대한 이해 그리고 3) 서버, 데이터베이스, API 등 개발 설계 구조에 대한 이해와 4) 개발 생명주기에 대한 이해가 포함됩니다.
소프트웨어 공학 ‘지식'이 아니라 ‘이해’가 필요하다라고 말씀드린 이유는,
개발자가 보유한 수준의 지식이 없더라도 협업 단계에서 개발자와 협업할 수 있는 최소한의 기술과 서비스 구조에 대한 이해, 그리고 코드를 이해하는 역량을 갖추고 있다면 원활한 의사소통과 협업이 가능하기때문에 필요한 역량이라고 이해하시면 됩니다.
두번째, 소프트웨어 테스팅에 대한 전문 지식이 필요합니다.
테스트 계획과 전략을 수립하는 방법이나 테스트 설계 능력, 테스트 프로세스 생명주기에 대한 이해와 개선을 위한 프로세스 관리 역량 그리고 테스트 수행 경험이나 방법에 대한 이해가 필요합니다.
또는
ISTQB나 CSTS 같은 테스팅 관련된 자격증을 보유하는 것도 테스팅 이론과 방법론에 대한 기본 개념을 이해했다는 것이 증명되기 때문에 이를 취득하는 것도 한 방법이 될 수 있습니다.
보다 나은 QA가 되기위해 필요한 기술 역량의 마지막은, 고급 기술과 테스트 도구 사용이 필요한 테스팅 기법과 스크립팅 경험 그리고 테스팅 환경 구축과 설계 경험에 대한 지식이 필요합니다.
여기에는 1)셀레니움, 앱피움과 같은 테스트 자동화 2)엔그라인더, 제이메터와 같은 서버 성능 테스트 3)포스트맨과 같은 API 테스트 4) 게임벤치와 같은 클라이언트 성능 테스트 마지막으로 실무에서 자주 사용되는 테스팅 지원 도구인 버그 관리 시스템이나, 깃허브, CI/CD 와 같은 도구에 대한 이해와 사용방법과 같은 지식이 필요합니다.
기술역량의 마지막으로 소개한 역량은 QA 지망생이 필수로 갖추어야 할 스킬이라기 보다는 기술과 지식을 보유하면 장점이 될 수 있는 역량입니다. 하지만 QA 실무자라면 반드시 습득해야할 지식과 기술에 해당되는 범위이니 테스팅 전문가가 되기 위해서 역량 개발이 필요하다면 이부분을 꼭 학습하고 스킬을 보유하는 것이 좋습니다.
다음으로 “보다 나은” QA가 되기 위해서 갖추어야할 자질과 태도를 몇가지만 살펴보겠습니다.
첫번째, 분석 능력입니다.
기획서, 개발 설계서, 결함 정보, 성능 자료, 위험 요소 등 품질을 예방하고 향상하기 위한 데이터를 수집하고 수집된 데이터를 분석하고 해석해서 논리적인 타당성을 가지고 판단을 추론할 수 있는 사고가 필요합니다.
두번째, 협업과 학습을 통해서 훈련된 커뮤니케이션 역량이 필요합니다.
여기서 말하는 커뮤니케이션은 말하기, 쓰기를 포함해서 의사를 소통할 수 있는 모든 채널을 포함합니다. 또한 일반적인 대화수준을 넘어서 기획, 개발과의 협업 작업을 관찰하고 학습과 질문을 통해서 시스템적으로 사고하고 기술적인 피드백을 교환할 수 있는 의사소통 능력을 의미합니다.
그리고 테스팅 활동과 품질 향상을 위한 목표를 요구할 때, 논리적인 타당성을 가지고 구성원들을 이해시키고 설득하는 능력이 필요합니다.
마지막으로, 문제 해결 능력입니다.
업무 진행 상황을 관찰해서 발생되는 문제를 빠르게 인지하고 문제로 인해서 예측되는 결과를 추론해서 해결할 방법을 연구하고 논리적이고 창의적인 사고로 해결책을 구체적인 단계로 변환할 수 있는 능력이 요구됩니다.
지금까지 살펴본 내용을 기술 등급으로 나누어서, 초급, 중급, 상급으로 발전하는 과정을 단계별로 살펴보겠습니다.
이렇게 단계별로 Up-skilling에 필요한 스킬을 정리하면 현재 자신이 위치한 단계에서 개발이 필요한 스킬이 무엇인지 그리고 다음 단계로 성장하기 위해서 무엇을 학습해야 할지 방향성을 찾아갈 수 있습니다.
먼저 초급자는, 소프트웨어 공학의 기본 개념을 이해하고 소프트웨어 테스팅의 기본 원리를 학습해서 기본기를 탄탄히 다지는 것이 중요합니다.
소프트웨어 공학을 통해서 테스트하는 대상 플랫폼과 시스템의 구조를 이해하고 이해를 바탕으로 테스트 설계 기법을 활용해서 목표와 전략에 맞는 테스트 케이스를 작성할 수 있는 능력을 보유해야 합니다.
테스트 수행 중에는 버그를 추정해서 판단하고 관리 할 수 있는 능력을 습득하고 프로세스의 개선이 필요한 부분을 도출해서 의견을 제시할 수 있어야 합니다.
그리고 테스트 수행 과정 중에 상급자가 설계한 테스트 계획과 전략, 문제 해결 방법을 학습하고 상급자의 경험과 노하우를 통해서 수행하는 경험 기반 테스팅을 습득해서 자신만의 스킬로 개발할 수 있도록 방법을 습득하는 것이 중요합니다.
또 QA로 성공적인 경력을 쌓기 위해서 테스팅 지원 도구를 사용해서 기술 테스팅을 수행하는 방법과 하나 정도의 프로그래밍 언어를 읽고 쓸 수 있도록 기술을 습득하는 노력이 필요합니다.
다음으로 중급자는 테스팅 전문 지식과 도구를 적극 활용한 테스트를 수행하고 데이터 분석을 통해서 품질을 평가하는 역량을 보유해야 합니다. 그리고 개발 구조와 생명주기 단계에 대해 충분히 이해한 상태에서 각 단계별로 필요한 테스팅과 기술을 지원할 수 있어야합니다. 또한 하나 이상의 개발 언어를 습득해서 자동화 스크립트를 작성하고 자동화를 적용하는 능력을 보유하는 것이 좋습니다.
소프트웨어 테스팅에서는 테스트케이스를 작성하고 실행하고 버그를 추적하는 단계를 넘어서 직접 계획을 수립하고 테스트 커버리지를 산정할 수 있어야 합니다. 그리고 테스트 활동 중에 작성되는 테스트 산출물을 점검하고 보완을 요청할 수 있어야 하고, 전반적인 테스트 활동을 제어하고 관리할 수 있어야 합니다.
마지막으로 테스트 데이터를 분석해서 품질 상태를 평가하고 발생되는 리스크를 예측해서 예방하는 활동을 수행할 수 있어야 합니다.
마지막으로 상급자 단계에서는 테스팅 활동에 집중하기보다 예방과 관리, 전략과 지원, 평가와 심사 등 개발생명주기 전반에 걸쳐서 리더십과 프로젝트 관리에 집중된 기술이 필요합니다.
상급자는 하나 이상의 개발 언어를 사용할 수 있고 화이트박스 테스트와 테스트 주도 개발이 가능하도록 개발과 테스트를 지원하는 역량을 보유하는 것이 좋습니다.
소프트웨어 테스팅 전문가로서 프로젝트에 맞는 프로세스를 직접 설계하고 적용할 수 있어야 하고, 프로세스 준수여부를 심사해서 업무가 체계적인 절차로 진행 될 수 있도록 통제하고 관리할 수 있어야 합니다.
또 리스크 관리, 형상관리, 일정이나 리소스 관리 그리고 테스트 전략을 계획하고 관리하는 능력을 발휘해서 품질 검증 활동을 지원하도록 합니다.
마지막으로 QA팀의 목표 달성을 위해서 동기를 부여하고 초~중급자를 교육해서 테스트 전문 지식의 확장을 위한 도구와 관련 지식을 지원하는 능력이 필요합니다.
초급자부터 상급자에 이르기까지,
보다 나은 QA로 성장하기위해서 지속적인 학습과 실천을 통해 필요한 기술을 개발하고 향상시켜 나가는 것이 중요합니다.
이렇게 개발한 기술과 지식, 습득된 경험과 노하우, 자신만의 경쟁력있는 역량과 핵심 가치는 프로젝트를 성공하게하고 품질을 확신할 수 있으며 팀 내/외부의 협업 관계를 강화하고 프로젝트 목표 달성을 위한 협력적인 환경을 조성할 수 있게 할 것입니다.