수동 QA (품질 보증)수동 QA 엔지니어

안전한 **NFC** 결제 토큰화 흐름을 검증하기 위해 구현할 시스템적 수동 테스트 방법론을 설명해 주세요. **Kotlin** 기반 **Android** 은행 애플리케이션이 **Visa Token Service**(VTS)와 통합된 상태에서, **NFC** 안테나 필드 강도가 -80 dBm 미만으로 떨어질 때 **HCE**(Host Card Emulation) 활성화 및 **TLS 1.3** 핸드쉐이크 재협상 동안의 **3D Secure 2.0** 마찰 없는 흐름 중단을 특히 목표로 합니다.

Hintsage AI 어시스턴트로 면접 통과

질문에 대한 답변

신호 약화 조건에서 토큰 프로비저닝 및 암호 데이터 생성 검증을 위해 RF 차폐 기반 접근 방식과 ADB logcat 모니터링 및 Charles Proxy TLS 검사 기능을 결합하여 사용하십시오. 세 가지 중요한 벡터에 집중하십시오: APDU 교환 중 HCE 서비스 생애 주기 관리, 열악한 RF 조건에서의 VTS SDK 오류 처리, 네트워크 핸드오버 중의 3DS2 챌린지 흐름 상태 보존. 신호 감쇠가 POS 단말기와의 물리적 거리에서 시뮬레이션될 때에도 HCE HostApduServiceSELECT PPSEGPO 명령에 올바른 응답을 하도록 확인하기 위해 Android StudioLogcat 필터를 사용하여 HEX APDU 페이로드를 문서화하십시오. ISO 14443 프로토콜 타임아웃을 시뮬레이션하기 위해 NFC 필드 강도를 -60 dBm에서 -90 dBm로 변화시키며 수동으로 비행기 모드를 전환하는 테스트 매트릭스를 유지하십시오.

실제 상황

1Tier 은행 애플리케이션의 VTS 통합을 검증하는 과정에서, NFC 필드 감쇠 중에 치명적인 경쟁 조건이 발생했음을 발견했습니다. GPO (Get Processing Options) 명령 교환 중에 단말기를 POS 단말기에서 신속하게 멀리 이동시키면 HCE 서비스가 "좀비 상태"로 진입하게 되었습니다. 이 상태에서는 Android NFC 스택이 서비스를 활성 상태로 보고했지만, Visa 애플릿은 Application Cryptogram(AC)을 생성하지 못해 단말기 화면에 "카드 읽기 오류"라는 애매한 메시지를 표시했습니다.

첫 번째 접근 방법은 측정 도구 없이 물리적 거리를 수동으로 변화시키는 것이었습니다. 이 방법은 특별한 장비가 필요하지 않았고 모든 테스터가 즉시 실행할 수 있었지만, 사람의 반응 시간 때문에 정확히 -80 dBm의 임계값을 지속적으로 유지하는 데 불가능함이 드러났습니다.

두 번째 전략은 자동화된 UI 테스트를 사용하여 장치 이동 및 네트워크 상태 변화를 스크립팅하는 것이었습니다. 이는 정확한 타이밍 제어를 제공했지만, 특정 인증 요구사항에 대한 수동 테스트 요구를 위반하였고, 사람의 손握기 및 신체 조직 흡수로 인한 복잡한 RF 다중 경로 간섭을 시뮬레이션할 수 없었습니다.

세 번째 솔루션은 변수 감쇠 층이 있는 Faraday 텐트를 사용하여 시스템적 수동 테스트 프로토콜을 구성하고 ADB 셸 명령을 통해 Androidnfc 서비스 디버그 플래그를 활성화하는 것이었습니다. 이 접근 방식은 테스터가 감쇠 수준을 정확하게 조절하면서 adb logcat | grep HostApduService를 통해 실시간 APDU 타이밍을 관찰할 수 있도록 하였지만, 비싼 RF 테스트 장비와 감쇠 수준을 올바르게 조정하는 데 상당한 설정 시간이 필요했습니다.

세 번째 접근 방법을 선택한 이유는 RF 환경에 대한 재현 가능한 제어를 제공하면서 수동 테스트의 탐색적 특성을 보존할 수 있었기 때문입니다. 이 방법론은 HCE 서비스가 ISO 14443-4 DESELECT 명령 처리기를 올바르게 구현하지 않아, 활발한 통신 중에 RF 필드가 작동 임계값 아래로 떨어질 때 서비스가 멈추게 만들어졌다는 것을 밝혀냈습니다. 이 통찰력은 사람의 관찰이 필요하기 때문에 자동화된 테스트만으로는 얻을 수 없었습니다. POS 단말기의 특정 오류 메시지 타이밍을 관찰해야 했습니다.

서비스의 onDeactivated() 콜백에서 적절한 DESELECT 처리를 구현함으로써 좀비 상태를 완전히 제거했습니다. 이후 회귀 테스트에서는 400회의 수동 테스트에서 제로 유령 거래를 확인했습니다. 애플리케이션은 첫 제출에서 Visa TTE (Terminal Integration Testing) 인증을 통과하여 rework의 세 주를 절약했습니다.

후보자들이 자주 놓치는 점


안드로이드 Logcat 타임스탬프가 밀리초 정밀도를 가지지만 EMV 사양이 마이크로초 정밀도를 요구할 때, APDU 응답 타이밍 제약을 어떻게 검증합니까?

마이크로초 타이밍을 위해 Logcat에만 의존할 수 없으므로, USB 프로토콜 분석기와 같은 Total Phase Beagle 또는 Ellisys Bluetooth/NFC 추적기를 사용하여 RF 레이어 전송 타임스탬프를 안드로이드 호스트 시스템과 독립적으로 캡처해야 합니다. 동시에, 이러한 하드웨어 타임스탬프를 HostApduService.processCommandApdu()Logcat 반환 값과 상관시켜 처리 지연을 식별해야 합니다. 특히, POS 단말기에 대한 WIRELESS 응답이 ISO 14443-4에 따라 242 ETU (Elementary Time Units)의 FGT (Frame Guard Time) 내에서 발생하는지 확인하고, RF 캡처와 Logcat 항목 간의 델타를 수동으로 계산하여 HCE 서비스 지연을 감지해야 합니다.


SDK가 구체적인 HTTP 상태 코드 대신 일반 오류 코드 ERROR_UNKNOWN을 반환할 때, VTS 토큰 프로비저닝 실패를 보여주는 수동 기술은 무엇입니까?

Visa Token Service SDK가 네트워크 오류를 숨길 때는 디버그 빌드의 Smali 코드를 수동으로 디컴파일하거나 SSL 핀을 비활성화한 Charles Proxy를 사용하여 VTS 클라이언트와 TSP (Token Service Provider) 종단 간의 HTTPS 트래픽을 가로채야 합니다. provisionToken() API 호출을 찾아 수동으로 JSON 응답의 tokenInfo.tokenStatus 필드를 확인하십시오; 만약 프로비저닝 직후 INACTIVE 또는 SUSPENDED로 반환되면, tokenInfo.errorDetails 하위 객체를 검사해야 합니다. 또한, 두 대의 다른 장치에서 동일한 PAN (Primary Account Number)을 프로비저닝하려고 시도하여 Provisioning ID (PID) 충돌을 수동으로 유발하여 HCE 서비스가 HTTP 409 (Conflict) 응답을 올바르게 처리하는지 확인하여 기존 토큰 비활성화를 요청해야 합니다. 크래시가 발생하지 않아야 합니다.


안드로이드 Doze 모드나 공격적인 OEM 배터리 최적화로 인해 Device Fingerprint (3DS Requestor App SDK) 생성이 차단될 때 3DS2 마찰 없는 흐름 연속성을 어떻게 확인합니까?

결제 거래를 시작하기 직전에 ADB 명령(adb shell dumpsys deviceidle force-idle)을 사용하여 수동으로 Doze 모드를 트리거한 다음, 3DS2 SDK가 장치 매개변수(예: deviceIDsdkAppID)를 성공적으로 수집하거나 불완전한 챌린지 표시가 있는 sdkTransID를 반환하는지 관찰해야 합니다. Logcat에서 THREE_DS 태그가 달린 항목을 확인하여 CReq 메시지가 구성될 때 compInd: N (완료 표시가 잘못됨)인 경우를 관찰하십시오. 또한, OEM 특정 설정(SamsungDevice Care 또는 XiaomiMIUI 배터리 절약기)에서 은행 앱을 배터리 최적화에서 수동으로 화이트리스트에 추가한 후 테스트를 다시 실행하여, 모든 필수 필드가 포함된 Device Fingerprint 페이로드가 있을 때만 마찰 없는 흐름이 성공적으로 이루어지는지 확인하여, 수동 회귀 주기 동안 손상이 있는 인증 경로와 최적 경로를 모두 검증해야 합니다.