개념
이 모듈의 마지막 레슨이다. 지금까지 배운 개별 기법들을 막혔을 때 바로 꺼내 쓸 수 있는 하나의 참조표로 정리한다.
휴리스틱(heuristic) 은 "반드시 맞는 규칙" 이 아니라 대체로 도움이 되는 생각의 단서를 뜻한다. 번역하면 "경험 법칙" 정도다. 답을 보장하지 않는 대신 빠르게 쓸 만한 방향을 준다.
요리를 떠올리면 이해가 쉽다. 레시피는 "설탕 2스푼" 처럼 정확한 지시이고, "단맛이 부족하면 짠맛을 조금 더해 봐라" 는 휴리스틱이다. 후자는 틀릴 때도 있지만, 레시피가 없는 상황에서 다음에 무엇을 해 볼지를 알려 준다.
탐험 중에 가장 자주 오는 막힘은 "다음에 뭘 해 보지" 다. 30분쯤 지나면 아이디어가 떨어진다. 그 순간 꺼내 보는 종이가 이 레슨의 결과물이다.
휴리스틱 치트시트란
체크리스트(모듈 3, 레슨 8)와 비슷해 보이지만 쓰임이 다르다. 체크리스트는 "이 항목을 하나씩 다 확인하라"는 목적이지만, 휴리스틱 치트시트는 "탐험 아이디어가 떨어졌을 때 훑어보고 영감을 얻는" 목적이다. 기계적으로 체크하는 게 아니라, 막혔을 때 "아, 이 관점은 아직 안 봤네"를 떠올리게 해주는 도구다.
SFDPOT — 가장 유명한 일반 휴리스틱
James Bach가 만든 SFDPOT("샌프란시스코 창고"라는 뜻의 두문자어 암기법)는 소프트웨어를 여섯 관점에서 훑어보게 한다.
| 관점 | 의미 | 이 모듈에서 연결되는 레슨 |
|---|---|---|
| Structure (구조) | 시스템이 어떤 부분들로 이루어져 있는가 | 레슨 7 (개체와 관계) |
| Function (기능) | 무엇을 하는가 | 레슨 1~3 (탐험 기본) |
| Data (데이터) | 어떤 데이터를 다루는가, 그 데이터가 일관되는가 | 레슨 7 (데이터 따라가기) |
| Platform (플랫폼) | 어떤 환경·외부 시스템에 의존하는가 | 레슨 9 (생태계) |
| Operations (운영) | 실제로 어떻게 쓰이는가(사용자, 순서, 상호작용) | 레슨 6 (순서·퍼소나) |
| Time (시간) | 시간·타이밍과 관련된 요소는 무엇인가 | 레슨 5 (숨은 변수), 레슨 12 (재현 불가 버그) |
이 표 자체가 이 모듈 전체의 요약이기도 하다 — SFDPOT의 각 글자가 이 모듈에서 배운 구체적인 기법과 연결된다.
SFDPOT를 질문으로 바꿔 두기
관점 이름만 적어 두면 막혔을 때 떠오르지 않는다. 각 글자를 질문으로 바꿔 두면 바로 쓸 수 있다.
| 관점 | 꺼내 볼 질문 |
|---|---|
| 구조 | 이 기능은 어떤 화면·모듈·저장소로 나뉘나? 그 경계에서 뭐가 깨지나? |
| 기능 | 아직 눌러 보지 않은 버튼이 있나? 설정을 꺼 보면? |
| 데이터 | 0건·1건·아주 많을 때는? 경계값, 특수문자, 아주 긴 값은? |
| 플랫폼 | 다른 브라우저·기기·OS에서는? 외부 서비스가 느리면? |
| 운영 | 실제 사용자는 어떤 순서로 쓰나? 중간에 그만두면? |
| 시간 | 빨리 두 번 누르면? 자정을 넘기면? 세션이 만료되면? |
데이터와 시간 두 줄이 가장 많이 걸린다. 기능은 다들 눌러 보지만, "0건일 때 목록 화면" 과 "빨리 두 번 누르기" 는 의식하지 않으면 지나친다.
데이터 휴리스틱 — 어떤 값을 넣어 볼까
입력란을 만나면 꺼내는 목록이다. 외워 둘 만큼 자주 쓴다.
| 묶음 | 넣어 볼 값 |
|---|---|
| 개수 | 0건 · 1건 · 2건 · 아주 많이(1,000건) |
| 경계 | 최솟값, 최솟값−1, 최댓값, 최댓값+1 |
| 빈 값 | 공백만, 아예 비움, 공백 + 글자 |
| 길이 | 한 글자, 허용 길이, 허용 길이를 크게 넘김 |
| 문자 종류 | 한글, 영문, 숫자, 이모지, 따옴표, 줄바꿈 |
| 부호·형식 | 음수, 0, 소수점, 천 단위 구분기호, 과학적 표기 |
| 날짜 | 2월 29일, 월말, 자정 직전, 과거·미래 |
이모지와 줄바꿈이 의외로 많이 걸린다. 글자 수를 세는 방식과 저장 방식이 어긋나면 "닉네임에 이모지 하나 넣으면 저장이 안 되는" 류의 결함이 나온다. 레슨 7에서 데이터를 따라가 봤던 흐름에 이 값들을 흘려 보면 된다.
상태와 흐름 휴리스틱 — 어떤 조작을 해 볼까
값이 아니라 행동을 바꿔 보는 목록이다.
- 중간에 그만둔다 — 결제 직전에 창을 닫고 다시 들어오면?
- 뒤로 간다 — 완료 화면에서 뒤로가기를 누르면 두 번 처리되나?
- 두 번 누른다 — 버튼을 빠르게 두 번 누르면 두 건이 생기나?
- 순서를 바꾼다 — 보통 A → B 인데 B를 먼저 하면?
- 동시에 한다 — 같은 계정으로 두 탭에서 같은 작업을 하면?
- 아주 느리게 한다 — 10분을 머문 뒤 제출하면 세션이 살아 있나?
- 권한을 바꾼다 — 작업 도중에 권한이 회수되면?
- 다시 한다 — 같은 작업을 연달아 세 번 하면?
세 번째와 다섯 번째가 실제 사고로 가장 많이 이어진다. 중복 결제·중복 발송은 거의 전부 이 두 가지에서 나온다.
품질 특성 휴리스틱 — 무엇을 본다고 말할 것인가
기능이 "된다/안 된다" 외에도 볼 것이 있다. 아래는 보고할 때 말의 이름 으로도 쓰인다.
| 특성 | 묻는 것 |
|---|---|
| 기능성 | 하기로 한 일을 하나? |
| 신뢰성 | 반복해도 같나? 끊기면 복구되나? |
| 사용성 | 설명 없이 할 수 있나? 실수를 되돌릴 수 있나? |
| 보안 | 남의 것을 볼 수 있나? 권한 없이 할 수 있나? |
| 성능 | 느린 구간이 어디인가? 많아지면 어떻게 되나? |
| 호환성 | 다른 브라우저·기기·버전에서도 되나? |
| 설치·업데이트 | 이전 버전에서 올라오면 데이터가 살아 있나? |
| 지역화 | 다른 언어·통화·시간대에서 깨지나? |
설치·업데이트 줄이 가장 많이 빠진다. 새로 깔고 테스트하면 통과하지만, 기존 사용자가 올라올 때 깨지는 경우가 흔하다. 모듈 8의 회귀 테스트와 직접 이어진다.
세 가지 크기 휴리스틱
한 줄로 외워 두기 좋은 것 하나. "너무 작게 · 딱 맞게 · 너무 크게" 를 항상 해 본다.
| 대상 | 너무 작게 | 딱 맞게 | 너무 크게 |
|---|---|---|---|
| 파일 업로드 | 0바이트 파일 | 평범한 파일 | 허용 용량 바로 위 |
| 목록 | 0건 | 10건 | 10,000건 |
| 글자 수 | 1자 | 보통 | 제한 + 1자 |
| 화면 폭 | 320px | 1,280px | 3,840px |
가운데만 보고 끝내는 것이 가장 흔한 미탐이다. 양쪽 끝을 습관으로 만들면 모듈 3에서 배운 경계값 분석을 탐험 중에도 쓰게 된다.
웹 특화 휴리스틱
일반 휴리스틱에 더해, 웹 애플리케이션에서 특히 자주 쓰는 항목들이 있다.
- 브라우저 뒤로가기·앞으로가기, 새로고침을 액션 중간에 시도
- 같은 계정으로 여러 탭·여러 브라우저를 동시에 열기
- 화면 확대·축소, 창 크기 조절
- 네트워크 속도를 인위적으로 느리게(스로틀링)
- 입력 필드에 복사-붙여넣기, 자동완성 값 그대로 제출
- 브라우저 확장 프로그램(광고 차단 등)이 켜진 상태
- 키보드만으로 전체 흐름 조작 (마우스 없이) — 접근성(모듈 16)과도 연결됨
- 우클릭 메뉴, 브라우저 기본 단축키와의 충돌
왜 이것들이 걸리는지 짧게 짚어 두면 기억에 남는다.
| 조작 | 왜 깨지나 |
|---|---|
| 뒤로가기·새로고침 | 화면은 되돌아가는데 서버 쪽 상태는 그대로다 |
| 여러 탭 동시 | 한 탭에서 바꾼 것을 다른 탭이 모른다 |
| 창 크기·확대 | 화면 폭에 따라 감춰지는 요소가 생긴다 |
| 느린 네트워크 | 응답이 오기 전에 사용자가 또 누른다 |
| 붙여넣기 | 타이핑할 때만 검사하면 붙여넣기는 검사를 건너뛴다 |
| 확장 프로그램 | 광고 차단이 우리 스크립트도 막는 경우가 있다 |
| 키보드만 | 마우스 전용으로 만들면 아예 넘어갈 수 없는 칸이 생긴다 |
네 번째가 가장 값진 한 줄이다. 브라우저 개발자 도구에서 네트워크를 느리게 설정해 두고 평범한 흐름을 한 번 돌려 보면, 중복 제출·로딩 중 깨짐·타임아웃 처리 누락이 한꺼번에 드러난다. 레슨 5에서 다룬 "숨은 변수" 의 대표가 바로 속도다.
모바일에서 더 보는 것
웹 화면을 휴대폰에서도 쓴다면 몇 줄을 더 둔다.
- 가로·세로 전환을 입력 중에 해 본다
- 전화·알림이 중간에 끼어든 뒤 돌아온다
- 앱을 백그라운드에 두고 몇 분 뒤 복귀한다
- 데이터를 끄고(비행기 모드) 제출한 뒤 다시 연결한다
- 글자 크기를 시스템 설정에서 아주 크게 해 둔다
- 화면 위쪽 노치·아래쪽 홈 바에 버튼이 가리는지 본다
네 번째가 모바일 특유의 결함을 잘 끌어낸다. 끊긴 상태의 제출을 쌓아 두는지, 버리는지, 두 번 보내는지가 제품마다 다르고 대개 문서에 없다.
도메인 휴리스틱 — 우리 업종에서만 걸리는 것
일반 휴리스틱으로 잡히지 않는 결함이 있다. 업종의 규칙을 알아야 보이는 것들이다.
| 업종 | 꺼내 볼 질문 |
|---|---|
| 금융·결제 | 반올림은 어느 자리에서? 환불은 부분이 되나? 한도는? |
| 의료 | 단위(mg/mL)가 섞이면? 환자 식별이 중복되면? |
| 커머스 | 재고가 0으로 떨어지는 순간에 주문이 들어오면? |
| 구독 | 월말 가입의 다음 결제일은? 중도 해지의 환불액은? |
| 광고 | 집계 시간대가 서버·사용자 중 어느 쪽 기준인가? |
금융의 반올림이 좋은 예다. 일반 휴리스틱에는 "소수점" 한 줄이 있을 뿐이지만, "할인 적용 후 부가세 계산에서 1원이 사라진다" 는 결함은 업종 규칙을 알아야 떠오른다. 이런 줄이 치트시트에서 가장 값나가는 부분이고, 그래서 남의 표를 그대로 쓰면 안 되는 이유이기도 하다.
치트시트를 쓰는 올바른 방법
기계적으로 순서대로 확인하지 않는다. 탐험하다가 "다음에 뭘 해야 하지?"라는 순간이 오면, 치트시트를 훑어보며 "아직 안 건드려본 관점이 뭐지?"를 찾는 용도로 쓴다. 이게 이 도구를 체크리스트(모듈 3, 레슨 8)와 구분 짓는 핵심이다 — 치트시트는 탐험을 대체하지 않고, 막혔을 때 다시 굴러가게 돕는다.
쓰는 순서를 정해 두면 손이 익는다.
- 차터(레슨 2)를 보고 그 차터와 관련 있는 관점만 고른다 2 ~ 3개를 골라 각각 아이디어 1개를 적는다
- 적은 것을 해 본다 — 하다 보면 새 아이디어가 나온다
- 또 막히면 다른 관점으로 돌아온다
1번을 건너뛰면 치트시트가 체크리스트가 된다. 결제 차터에 "지역화" 관점을 억지로 끼워 넣을 필요는 없다. 차터와 관계있는 관점만 고르는 판단이 탐험을 탐험으로 유지한다.
치트시트는 팀의 자산으로 키운다
남이 만든 표를 그대로 쓰는 것으로 끝내면 효과가 절반이다. 우리 제품에서 실제로 걸렸던 것을 한 줄씩 더해야 날카로워진다.
| 언제 | 무엇을 더하나 |
|---|---|
| 결함을 놓쳐 운영에서 터졌을 때 | 그 결함을 찾을 수 있었을 관점 한 줄 |
| 회고에서 "이런 것도 있었네" 가 나올 때 | 그 아이디어를 바로 |
| 새 외부 연동이 붙을 때 | 그 연동이 끊겼을 때를 보는 줄 |
| 특정 결함이 반복될 때 | 그 유형을 맨 위로 올린다 |
첫 줄이 핵심이다. 운영 사고를 회고할 때 "누가 놓쳤나" 대신 "어떤 질문이 없었나" 를 묻고, 그 질문을 치트시트에 넣는다. 그러면 사고 하나가 팀의 영구적인 능력으로 남는다. 모듈 10에서 다루는 결함 분석과 이어진다.
치트시트는 한 장을 넘기지 않는다. 세 장이 되면 아무도 안 본다. 새 줄을 더할 때 낡은 줄 하나를 뺀다는 규칙을 두면 분량이 유지된다.
사례 — 막힌 세션을 되살리기
"장바구니" 차터로 40분을 탐험했는데 결함이 하나도 안 나왔다. 더 볼 것이 없는 것처럼 느껴졌다. 치트시트를 꺼내 아직 안 쓴 관점을 골랐다.
| 고른 관점 | 해 본 것 | 결과 |
|---|---|---|
| 데이터(개수) | 상품 0건일 때 장바구니 화면 | 빈 화면에 결제 버튼이 살아 있었다 |
| 데이터(개수) | 같은 상품 999개 담기 | 수량 제한은 있지만 합계가 음수로 표시 |
| 시간 | 담은 뒤 30분 방치하고 결제 | 가격이 바뀐 상품인데 옛 가격으로 결제됨 |
| 상태·흐름 | 두 탭에서 동시에 수량 변경 | 나중 탭의 값이 앞 탭을 조용히 덮어씀 |
20분 만에 4건이 나왔다. 기능을 덜 본 것이 아니라 관점이 한쪽에 몰려 있었다. 40분 동안 "기능" 관점만 쓰고 있었던 것이다.
세 번째 건이 가장 비싼 결함이었고, 치트시트의 "시간" 한 줄이 없었으면 그 세션에서는 나오지 않았을 것이다.
실무에서 왜 필요한가
경험 많은 탐색적 테스터는 이런 관점들을 이미 몸에 익혀서 자연스럽게 쓴다. 이제 막 시작하는 사람에게는 이 치트시트가 그 내재화된 감각을 빠르게 흉내 낼 수 있게 해주는 실용적인 도구다. 실제로 팀 안에서 "막혔을 때 이 표를 봐"라고 공유해두면, 신입도 금방 탐험의 폭을 넓힐 수 있다.
미탐의 대부분은 "관점 편중" 에서 나온다
운영에서 사고가 난 뒤 "어떻게 이걸 못 봤지" 를 따져 보면, 대개 기능은 충분히 봤는데 데이터·시간·플랫폼 중 한 축을 아예 안 봤다는 결론이 나온다. 사람은 자기가 익숙한 관점으로 자동으로 끌리기 때문이다.
치트시트는 능력을 키우는 도구가 아니라 편중을 교정하는 도구다. 실력이 늘어도 편중은 그대로 남기 때문에, 경력자도 계속 쓴다.
탐험의 폭을 말로 설명할 수 있게 된다
관점에 이름이 붙으면 보고가 가능해진다.
| 이름이 없을 때 | 이름이 있을 때 |
|---|---|
| "꼼꼼히 봤습니다" | "기능·데이터·시간 세 관점으로 봤고, 플랫폼은 못 봤습니다" |
| "다 될 것 같아요" | "호환성과 지역화는 미확인입니다" |
오른쪽은 레슨 13의 종료 보고와 바로 이어진다. 무엇을 못 봤는지를 말할 수 있게 되는 것이 치트시트의 숨은 효용이다.
자동화할 것을 골라낸다
치트시트 항목 중 매 배포마다 반복해야 하는 것이 자동화 후보다. "0건 목록", "허용 용량 바로 위 파일", "느린 네트워크" 같은 항목은 사람이 매번 손으로 하기엔 아깝다. 모듈 11~13의 자동화 대상 선정이 여기서 출발한다.
채용시장에서의 위치
면접에서 "탐색적 테스팅을 어떻게 하세요" 를 물으면 대부분 "직접 써 보면서 이상한 걸 찾습니다" 라고 답한다. 이 답은 방법이 없다는 뜻으로 읽힌다.
| 질문 | 약한 답 | 강한 답 |
|---|---|---|
| "탐색적 테스팅을 어떻게 하세요?" | "감으로 이상한 걸 찾습니다" | "차터를 정하고, 막히면 SFDPOT 같은 관점표로 안 본 축을 찾습니다" |
| "놓친 결함이 있었나요?" | "크게 없었습니다" | "운영 사고 뒤 '어떤 질문이 없었나'를 따져 치트시트에 한 줄을 더했습니다" |
| "체크리스트와 뭐가 달라요?" | "비슷합니다" | "체크리스트는 전부 확인, 치트시트는 막혔을 때 영감입니다" |
| "자동화는 뭘 먼저 하셨어요?" | "중요한 것부터요" | "치트시트에서 매 배포마다 반복되는 항목을 먼저 자동화했습니다" |
두 번째가 면접관이 가장 눈여겨보는 답이다. 놓친 경험을 개인의 실수로 끝내지 않고 팀의 절차로 바꾼 사람은 흔하지 않다. 리드 역할을 뽑을 때 정확히 이 태도를 본다.
공고의 표현으로는 "탐색적 테스팅 경험", "테스트 설계 역량", "테스트 자산 관리" 가 이 레슨의 내용에 걸린다. 치트시트를 팀에 도입하고 운영한 경험은 시니어·리드 지원에서 바로 쓸 수 있는 이야기다.