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

복잡한 계층 데이터 트리 컴포넌트를 검증하기 위한 체계적인 수동 테스트 방법론을 설계하시오. 이 컴포넌트는 10,000개가 넘는 아이템을 초과하는 지연 로드된 노드, 중첩된 레벨에서의 끌어서 놓기 재정렬, **localStorage**를 통한 상태 지속성을 특징으로 하며, 특히 **WCAG 2.1** 수준 AA의 키보드 내비게이션 준수, **Internet Explorer 11** 호환 모드에서의 빠른 확장/축소 사이클 동안 메모리 누수 감지, 손상된 직렬화 상태 데이터의 우아한 복구를 타겟으로 한다.

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

질문에 대한 답변

이 컴포넌트를 위한 포괄적인 수동 테스트 전략은 접근성 감사, 성능 프로파일링 및 복원력 검증을 결합한 다층적 접근 방식을 요구합니다.

먼저, 전통적인 기업 제약을 시뮬레이션하기 위해 Internet Explorer 11의 기업 모드에서 기본 환경을 설정합니다. 네트워크 요청을 모니터링하여 중복 호출 없이 점진적으로 노드를 가져오는지 확인하기 위해 다양한 속도로 트리를 스크롤하면서 지연 로드 기능을 검증합니다. WCAG 2.1 준수를 위해 모든 인터랙티브 요소가 Tab 내비게이션을 통해 접근 가능하며, Arrow 키가 계층 레벨을 논리적으로 이동하고, ARIA-live 영역이 NVDAJAWS와 같은 스크린 리더에 동적 콘텐츠 삽입을 알리는지 확인합니다.

메모리 누수를 감지하기 위해, 깊게 중첩된 분기에서 50회 빠른 확장/축소 사이클을 수행하기 전에 및 후에 Memory 프로파일러를 사용하여 힙 스냅샷을 캡처하고, Detached DOM tree 수를 비교하여 좀비 노드를 식별합니다. Space를 사용하여 아이템을 선택하고 Arrow 키를 사용하여 아이템의 위치를 변경하는 등 드래그 앤 드롭 대안을 테스트하며, 시각적 포커스 표시기가 항상 보이도록 해야 합니다. 상태 지속성 검증을 위해, 잘못된 JSON(잘려진 문자열, 순환 참조 또는 null 값)을 localStorage에 수동으로 삽입하고, 컴포넌트가 충돌하는 대신에 백업 빈 상태를 렌더링하는지 검증합니다. 마지막으로, 트리 초기화 전에 localStorage에 더미 데이터를 5MB까지 채워서 저장소 한도 초과 오류를 시뮬레이션하고, 세션 전용 모드로 우아하게 저하되는지 확인합니다.

실생활의 상황

구식 법률 문서 관리 시스템을 웹 기반 플랫폼으로 이전하는 동안, 우리 팀은 여러 관할권에 걸쳐 50,000개 이상의 사건 파일을 표시해야 하는 폴더 계층 보기에서 심각한 성능 저하를 경험했습니다. 정부 고객을 위한 IE11 호환성을 유지하면서 말이죠.

베타 테스트 중, 약 30분의 집중 사용 후—특히 변호사들이 사건 파일을 재정렬하기 위해 빠른 드래그 앤 드롭 작업을 수행할 때—IE11 브라우저가 "메모리 부족" 오류로 동작이 멈추거나 충돌하는 심각한 문제가 발생했습니다. 초기 조사에서는 JavaScript 트리 라이브러리가 분리된 DOM 노드에 대한 참조를 유지하고 있어 확장 사이클당 4MB의 메모리 누수를 유발한 것으로 확인되었습니다. 또한 사용자는 페이지를 새로 고친 후, 신중하게 정리된 트리 상태가 동시 탭 쓰기 때문에 빈 화면으로 렌더링되기도 했다고 보고했습니다.

솔루션 1: 폴리필과 함께하는 가상 DOM 구현

우리는 이 컴포넌트를 ReactIE11을 위한 폴리필을 사용하여 가상 DOM 차등 알고리즘으로 리팩토링하는 것을 고려했습니다. 이 접근 방식은 효율적인 조정을 통해 우수한 메모리 관리를 약속했습니다. 하지만 성능의 이점이 상당한 단점보다 우선하지 않았습니다: 폴리필 페이로드가 번들 크기를 300KB 증가시켜 정부 VPN에서의 로드 시간을 악화시켰고, 광범위한 회귀 테스트 결과 의존했던 드래그 앤 드롭 라이브러리가 IE11에서 합성 이벤트 위임과 통합될 때 오작동하는 것으로 밝혀졌습니다.

솔루션 2: 빵 부스러기 내비게이션을 이용한 서버 측 페이지 매김

다른 옵션은 깊은 트리 은유를 완전히 포기하고 빵 부스러기 내비게이션과 함께 전통적인 페이지 매김을 대신하는 것이었습니다. 이 솔루션은 단순성을 제공하고 메모리 안정성을 보장했습니다. 그럼에도 불구하고 법률 워크플로우에 대한 단점은 용납할 수 없었습니다: 변호사들은 여러 분기에서 문서를 시각적으로 비교할 수 있는 중요한 능력을 잃었고, 여러 페이지 클릭을 통해 탐색해야 하는 인지 부담이 사용자 테스트에서 작업 완료 시간을 40% 증가시켰습니다.

솔루션 3: 디바운스 직렬화와의 공격적인 노드 정리

궁극적으로 우리는 집 collapsed 분기에서 자식 DOM 요소를 즉시 제거하고 JavaScript 참조를 해제하는 공격적인 노드 청소와 상태 변경을 매 5초마다 배치하는 디바운스 localStorage 쓰기를 특징으로 하는 하이브리드 솔루션을 구현했습니다. 이 접근의 장점은 메모리 사용량이 70% 감소하고 상태 저장 중 경합 조건을 제거했습니다. 유일한 주요 단점은 화면 리더가 노드를 발표할 때 노드가 제거되었을 때 포커스 관리를 유지하는 복잡성이 증가한 것이었으며, 우리는 가상 자리 표시자를 가리키는 aria-owns 속성을 구현하여 이를 완화했습니다.

이 솔루션은 트리 은유의 필수 사용자 경험을 유지하면서도 엄격한 IE11 메모리 제약을 충족했기 때문에 선택되었습니다. 그 결과는 Section 508 접근성 감사를 통과하고 브라우저 충돌 없이 지속적인 8시간의 작업 세션을 지원하는 안정적인 애플리케이션이 되었습니다. 궁극적으로 모든 정부 고객 사이트에서 배포 승인을 받았습니다.

후보자들이 종종 간과하는 것

어떻게 Internet Explorer 11에서 Performance 탭의 세분성이 부족할 때 메모리 누수를 정확하게 감지할 수 있나요?

많은 후보자들은 IE11이 효과적으로 프로파일링될 수 없다고 잘못 가정하지만, 특정 작업 흐름 조정을 통해 F12 Developer ToolsProfiler 탭을 사용해야 합니다. 먼저 인터넷 옵션에서 "디버깅 사용"을 활성화한 후, IE11의 업데이트된 개발 도구에서 사용할 수 있는 Memory 도구를 사용하여 수동 힙 스냅샷을 찍어야 합니다. 특히 스냅샷 간에 가비지 콜렉션을 강제로 수행해야 하며, 이는 IE11에서 유일하게 사용할 수 있는 CollectGarbage() JavaScript 메소드를 콘솔에서 클릭하여 얻을 수 있는 분명한 기준 비교를 위해 필요합니다. 각 상호작용 사이클에서 Detached DOM tree 항목을 확인하여 유지되는 크기가 증가하고 있는지 확인하며, 이는 트리 컴포넌트가 노드 참조를 해제하지 않고 있다는 것을 나타냅니다.

계층 트리 뷰에서 키보드 내비게이션을 테스트할 때 aria-expandedaria-pressed의 구체적인 차이는 무엇이며, 이는 WCAG 2.1 준수에 왜 중요한가요?

후보자들은 종종 이러한 상태를 혼동하여 잘못된 접근성 구현을 초래합니다. aria-expanded는 노드에 현재 보이거나 숨겨진 자식 요소가 있음을 나타내며, 이는 스크린 리더가 가지를 탐색할 때 "열림" 또는 "닫힘"으로 발표하는 데 필수적입니다. 반면, aria-pressed는 토글 버튼 상태를 나타내며, 노드 자체가 체크박스 역할을 하지 않는 한 트리 노드에는 적합하지 않습니다. WCAG 2.1 성공 기준 4.1.2 (이름, 역할, 값)에 따르면, 표준 확장 가능한 트리 노드에서 aria-pressed를 사용하면 스크린 리더가 잘못된 컨트롤 유형을 발표하여 사용자가 버튼을 활성화하고 있는지 구조를 탐색하는지 혼동하게 됩니다. 수동 테스터는 NVDA의 음성 뷰어를 통해 올바른 속성이 예상 발표를 트리거하는지 확인해야 합니다.

Internet Explorer 11에서 Storage API가 남은 공간을 쿼리하는 직접적인 방법을 제공하지 않을 때, 수동 테스터는 localStorage 한도 초과 시나리오를 어떻게 검증해야 합니까?**

대부분의 후보자들은 IE11이 원천당 5MB의 한도를 시행하지만, 명확한 한도 예외 대신 일반적인 "SCRIPT5022: 잘못된 인수" 오류가 발생한다고 간과합니다. 이를 시험하기 위해서는 루프를 사용하여 큰 Base64 문자열을 기록하여 저장소를 프로그래밍적으로 채운 다음, 상태 저장을 유발하는 드래그 앤 드롭 작업을 수행해야 합니다. 견고한 애플리케이션은 이 특정 오류를 포착하고 세션 전용 또는 비 intrusive 경고 배너가 있는 메모리 상태로 격차를 유지해야 합니다. 테스터는 해당 대체 메커니즘이 현재 세션의 변경 사항을 보존하더라도 브라우저 재시작 시 지속성이 손실되고, 실패한 쓰기 시도 중 기존 localStorage 항목에서 데이터 손상이 발생하지 않도록 검증해야 합니다.