"출하할 만큼 충분히 좋은 것"이란 무엇인가? 실제로는 의미 – 그리고 뭐at 현재 지표 있지 않다. 이야기ING 의견을 듣고 싶습니다.
합격률은 출시 신호가 아닙니다. 여기입니다 뭐 이다.
목요일 오후입니다. Release 금요일 오전으로 예정되어 있습니다.
대시보드를 엽니다. 합격률 94%입니다. 불합격된 테스트는 이전에 봤던 것들입니다. 간헐적으로 발생하던 테스트로, 재실행하면 보통 합격입니다. 다시 실행해 봅니다. 합격입니다. 로그아웃합니다.
토요일 아침, 휴대폰이 울립니다.
사용자들이 세션 로그아웃 현상을 무작위로 보고하고 있습니다. 엔지니어링 팀은 비상사태에 돌입했습니다. 근본 원인은 인증 토큰 갱신 과정에서 발생하는 경쟁 조건(race condition)입니다. 이는 지난 4번의 스프린트 동안 계속해서 문제가 드러났던 불안정한 테스트와 동일한 문제이며, 그동안 팀은 테스트가 통과될 때까지 재실행하고 다음 단계로 넘어가는 방식으로 대응해 왔습니다.
신호는 처음부터 있었어요. 당신이 그걸 알아채지 못했을 뿐이죠.
모두가 추적하는 지표. 하지만 그 지표가 답할 수 없는 질문.
모바일 QA에서 가장 흔하게 사용되는 지표는 통과율입니다. 하지만 출시 여부를 결정하는 데에는 가장 유용성이 떨어지는 지표 중 하나이기도 합니다.
847건의 통과와 23건의 실패라는 수치는 경영진에게 위험에 대한 아무런 정보도 제공하지 않습니다. 이 23건의 실패가 중요한 결제 흐름과 관련된 것인지, 아니면 잘 알려지지 않은 설정 페이지와 관련된 것인지도 알 수 없습니다. 실패율이 여러 릴리스에 걸쳐 증가 추세인지, 아니면 개별적인 회귀 현상인지도 보여주지 않습니다.1]
94%의 통과율은 릴리스 신호가 아닙니다. 단지 통과율일 뿐입니다. 그리고 맥락이 없는 통과율만으로는 모든 릴리스 전에 중요한 질문에 대한 답을 얻을 수 없습니다. 이 건물에서 위험은 어디에 집중되어 있습니까?
결제 확인 과정에서의 한 번의 실패는 드물게 발생하는 예외적인 상황에서의 한 번의 실패와 동일한 위험을 초래하는 것은 아닙니다. 하지만 합격률은 이 둘을 동일하게 취급합니다.2]
만약 그게 낯설게 느껴지지 않는다면, 이것들이 그럴 겁니다.
서두에 소개한 이야기는 거의 모든 모바일 팀에서 다양한 형태로 나타나는 패턴의 한 예입니다. 세부 사항은 바뀌지만 근본 원인은 변하지 않습니다. 신호는 분명히 존재했지만, 아무도 그 신호를 읽어낼 시스템이 없었던 것입니다.
아마 여러분도 경험해 봤을 법한 두 가지 사례를 더 소개합니다.
숫자가 괜찮아 보였기 때문에 아무도 그 오류를 알아채지 못했습니다.
6번째 스프린트. 결제 확인 화면을 테스트하는 단 하나의 테스트에서 오류가 발생하기 시작했습니다. 847개 중 1개 실패, 즉 99.8%의 통과율입니다. 단순한 노이즈처럼 보입니다. 그래서 제품을 출시했습니다.
3일 후, 사용자들은 주문 확인 이메일을 받지 못하고 있다고 보고했습니다. 하위 시스템 통합 과정에서 아무런 오류 없이 문제가 발생했고, 전체적인 수치가 정상으로 보였기 때문에 모두가 해당 문제를 다루는 테스트를 건너뛰었던 것입니다.
문제는 시험이 누락된 것이 아니었습니다. 합격률이라는 지표가 고위험 실패 사례를 평균화하여 안심할 수 있는 수치로 만들어버림으로써 이를 감춰버린 것이 문제였습니다.1]
아무도 신호를 보내지 않은 느린 표류
네 번의 스프린트 동안 합격률은 97% → 96% → 94% → 93%로 변동했습니다. 각 하락은 일반적인 변동처럼 보였습니다. 임계값도, 추세선도, 경고도 없었습니다. 그저 주간 보고서에 나오는 숫자일 뿐, 아무도 지난 스프린트의 수치와 비교하지 않았습니다.
93%에 도달했을 때, 세 가지 기능 영역에 걸쳐 11개의 새로운 반복 오류가 발생했습니다. 개별적으로는 우려할 만한 오류는 없었지만, 이러한 오류들이 함께 나타나는 것은 시스템적인 문제가 악화되고 있음을 시사합니다.
이것의 위험한 버전은 갑작스러운 하락이 아닙니다. 그것은 순간적인 수치가 아니라, 시간이 지남에 따라 추세를 파악할 때만 드러나는 느린 변동입니다.4]
이러한 시나리오들의 공통점은 무엇일까요?
이 중 어느 것도 테스트 실패가 아닙니다. 테스트는 실행되었고, 테스트 스위트도 완료되었으며, 데이터도 있었습니다.
모두 통찰력 부족의 결과입니다. 팀은 신호는 포착했지만, 그 신호를 해석할 시스템이 없었던 거죠.
그 다음에 무슨 일이 벌어질지는 뻔합니다. 개발자들은 더 이상 오류 로그를 꼼꼼히 읽지 않습니다. QA 리더들은 모든 오류 빌드를 일일이 검토하지 않습니다. 진짜 오류는 사소한 오류와 함께 묻혀버립니다. 이는 태만이 아니라, 너무 많은 소음과 너무 적은 신호를 만들어내는 시스템에 대한 합리적인 반응입니다. 모든 오류가 똑같아 보이면 팀은 더 이상 어떤 오류도 자세히 살펴보지 않게 됩니다.3]
모든 출시 전에 던져야 할 올바른 질문
대부분의 사전 출시 논의는 "테스트를 통과했나요?"라는 질문에 집중됩니다. 이 질문이야말로 실제 출시 여부를 예측하는 핵심입니다. safety는 다릅니다: 이 건물에서 위험은 어디에 집중되어 있습니까?
이 질문에 답하려면 합격률만으로는 알 수 없는 맥락이 필요합니다.
고장 횟수뿐 아니라 고장 발생 위치도 파악해야 합니다. 핵심 사용자 여정에서의 실패는 거의 사용되지 않는 예외적인 상황에서의 실패와는 근본적으로 다릅니다. 중요한 것은 어떤 실패인지, 어디에서 발생하는지, 그리고 실제 사용자가 접하게 될 경로에 실패가 있는지 여부입니다.2]
현재 상황만이 아니라 시간의 흐름에 따른 추세를 살펴봐야 합니다. 지난 스프린트에서 97%였던 통과율이 93%라는 것은, 6번의 빌드 동안 93%로 안정적으로 유지되었다는 경우와는 의미가 다릅니다. 빌드 간 안정성은 단일 실행 결과보다 릴리스 준비 상태를 훨씬 더 신뢰할 수 있게 예측하는 지표입니다. 단, 이는 단순히 수치만이 아니라 추세를 실제로 살펴볼 때만 해당됩니다.4]
불안정성은 억제해야 할 잡음이 아니라, 중요한 신호로 간주해야 합니다. 불안정한 테스트는 자동화에 대한 신뢰를 무너뜨립니다. 테스트 실패가 무작위로 발생하는 것처럼 보이면 팀은 파이프라인을 재실행하고, 경고 신호를 무시하며, 릴리스를 지연시킵니다. 하지만 불안정성을 구조화된 데이터로 취급하는 팀, 즉 실패를 분류하고, 테스트 영역별 불안정 추세를 분석하고, 테스트가 계속해서 번갈아 실패하는 이유를 파악하는 팀은 경쟁 조건이 실제 운영 환경에서 문제가 되기 전에 이를 감지할 수 있습니다.
배송 전 불량 여부를 명확히 해야 합니다. 의미 있는 릴리스 결정을 내리려면 테스트가 실패했다는 사실뿐만 아니라, 해당 실패의 명확한 근본 원인이 있는지, 이번 빌드에서 새로 발생한 문제인지 아니면 반복적으로 발생하는 문제인지, 그리고 실제 사용자가 접하게 될 경로에 해당 문제가 있는지 여부를 파악해야 합니다.
모바일 환경에서 이것이 더 어려운 이유는 무엇일까요?
모바일 환경에서는 웹 환경보다 신호 대 잡음비 문제가 더 심각합니다.
기기 파편화, 앱 스토어 심사 지연, 불안정한 네트워크, 백그라운드 실행 제한, 운영체제별 동작 등 여러 요인으로 인해 품질 문제는 연구실 밖에서도 흔히 발생합니다. 제출 전 테스트를 통과하는 것은 유용하지만, 그것만으로는 충분하지 않습니다.5]
실험실 장비에서 테스트를 통과하는 것만으로는 다양한 하드웨어, 운영 체제 버전, 네트워크 환경에서 사용자가 어떤 경험을 하게 될지 거의 알 수 없습니다. 실제로 중요한 환경 조합에 대한 오류 패턴을 분석하지 않고서는 통과율만으로는 위험을 가릴 뿐만 아니라, 위험을 왜곡할 수 있습니다.
동일한 빌드를 사용하더라도 한 기기에서는 테스트가 통과하고 다른 기기에서는 실패할 수 있습니다. 환경 변수(운영체제 상태, 로케일, 네트워크 환경, 기기 사용 이력)로 인해 동일한 테스트 코드가 애플리케이션과는 전혀 무관한 이유로 다른 결과를 생성할 수 있습니다. 테스트 실행 중 환경이 어떻게 변했는지 파악하지 못하면 테스트 스위트가 통과된다는 보장은 없습니다. 그저 우연히 결과가 나온 것일 뿐입니다.6]
테스트 분석에 무엇을 요구해야 할까요?
목표는 단순히 자동화가 아닙니다. 높은 신뢰도를 확보한 배포, 즉 모든 릴리스가 의미 있고 신뢰할 수 있으며 사용자가 기기에서 실제로 수행하는 작업과 연관된 검사를 통과하는 것입니다.7]
그 목표를 달성하려면 테스트 데이터를 합격/불합격 기록이 아닌 분석 문제로 다뤄야 합니다. 즉, 실패 집중도, 안정성 추세, 불안정성 패턴을 한눈에 파악할 수 있는 도구를 구축하고, 그러한 도구를 요구해야 합니다. 전에 배송 여부는 귀하께서 결정하십니다.
대부분의 팀은 그 단계에 거의 다다랐습니다. 데이터는 존재하고, 로그에도 신호가 있습니다. 부족한 것은 실행 결과를 릴리스 관련 정보로 변환하는 분석 단계입니다.
차세대 테스트 분석 도구는 "테스트 스위트의 성능은 어땠는가?"가 아니라 "이번 릴리스에서 어떤 부분을 우려해야 하는가?"라는 단 하나의 질문을 중심으로 구축되어야 합니다.
At Digital.ai그게 바로 우리가 해결하려고 노력하는 문제입니다. 우리는 더 많은 테스트가 해답이라고 생각하지 않습니다. 더 스마트한 신호 체계와 매 릴리스 전에 더 심도 있는 질문을 던지는 습관이 해답이라고 생각합니다.
Digital.ai 지원 모바일 팀에게 다음을 제공합니다 실행 인프라 대규모 테스트를 실행하기 위해. 분석 계층 그 데이터를 릴리스 신뢰도로 전환하는 것이 우리가 다음에 구축할 기능입니다.