Showing Posts From

케이스

테스트 케이스 3000개를 쓰고 나서 깨달은 것

테스트 케이스 3000개를 쓰고 나서 깨달은 것

3000개 테스트 케이스 3000개를 썼다. 정확히는 3247개다. TestRail에 다 기록돼 있다. 4년 동안 쌓인 숫자다. 처음엔 뿌듯했다. 지금은 그냥 숫자다. 어제도 케이스 20개 추가했다. 결제 플로우 개편이래서. 오늘도 15개 더 써야 한다.반복의 늪 로그인 테스트 케이스만 80개다. 회원가입은 65개. 결제는 120개. 매번 비슷하다. 정상 케이스, 에러 케이스, 엣지 케이스. 이메일 형식 체크, 비밀번호 자릿수, 특수문자 입력. 복붙하고 수정한다. 또 복붙하고 수정한다. 이게 내 일의 70%다. 신규 기능 나올 때마다 똑같은 패턴. "이 필드는 필수인가요?" "최대 입력 길이는요?" "서버 에러 나면 어떻게 되나요?" 물어보고, 케이스 쓰고, 실행하고, 버그 등록. 다음 기능 나오면 또.자동화라는 단어 팀장이 말했다. "자동화 좀 해봐." 알고 있다. Selenium, Appium, Cypress. 이름은 다 안다. 유튜브에 강의도 봤다. "Hello World" 찍는 데까지 해봤다. 그다음이 문제다. 퇴근하면 9시다. 집 가면 10시. 씻고 밥 먹으면 11시. 공부 시작하면 12시. 한 시간 보면 1시. 내일 9시 출근이다. 주말? 토요일은 빨래하고 청소하고 여자친구 만난다. 일요일은 부모님 전화하고 밀린 드라마 본다. 그러다 월요일. 테스트 케이스 30개 써야 한다는 메시지. 자동화는 다음 주로.시간이 없다는 변명 동료 하나가 자동화로 넘어갔다. 6개월 공부했다고. 연봉 800만원 올랐다. 부럽다. 나도 할 수 있다고 생각한다. 근데 6개월이 없다. 배포 주기가 2주다. 2주마다 리그레션 테스트. 핵심 케이스만 500개. 하루 8시간 테스트해도 모자란다. 야근하면 끝낸다. 공부할 시간은 어디서 나오나. 팀장은 말한다. "업무 시간에 조금씩 해." 조금씩? 오전엔 버그 재현. 오후엔 개발자 미팅. 저녁엔 빌드 테스트. 점심시간에 하라는 건가. 딜레마 자동화 안 배우면 도태된다. 알고 있다. 채용 공고 보면 다 Selenium 우대다. 근데 지금 당장은 매뉴얼이 필요하다. 이번 주 배포 앞뒀다. 누가 테스트하나. 자동화 공부하면 당장 일이 밀린다. 일 하면 공부할 시간 없다. 뫼비우스의 띠다. 유튜브에 'QA 자동화 전환' 검색했다. 다들 말한다. "퇴근 후 3개월만 투자하세요." 3개월. 90일. 하루 2시간이면 180시간. 해봤다. 3일 하고 포기했다. 배포 주간이었다. 3000개의 무게 3247개 테스트 케이스. 내 4년이다. 무게가 느껴진다. 이거 다 의미 있나? 80% 통과. 10% 페일. 10% 블락. 매번 비슷한 비율. 매번 비슷한 버그. Null 체크 안 함, 엣지 케이스 미처리. 이걸 자동화하면? 3시간이면 끝날 걸 3일 한다. 근데 자동화 스크립트 짜는 데 일주일 걸린다. 그럼 언제 본전이냐. 계산해봤다. 10번 돌려야 본전. 우리 앱은 2주마다 배포. 5개월 후 본전. 그때까지 스크립트 유지보수는? 현실 어제 신입이 들어왔다. 25살. 컴공 출신. "Python 할 줄 아세요?" 물어봤다. "네, 학교에서 배웠어요." 부럽다. 나는 독학이다. 유튜브랑 구글이 선생님. 신입한테 테스트 케이스 작성법 알려줬다. "이렇게 스텝 쪼개고요." "예상 결과는 이렇게 쓰고요." 설명하면서 생각했다. 이거 언제까지 하나. 30살 넘어서도 이거 하나. 점심 먹으면서 신입이 물었다. "자동화는 언제 배워요?" "나도 배우는 중이야." 거짓말이다. 배우는 중이 아니다. 배워야지 하는 중이다. 깨달은 것 3000개 쓰고 나니 안다. 양으로는 안 된다는 걸. 테스트 케이스 1만 개 써도 자동화 모르면 그냥 매뉴얼 QA다. 연봉 협상할 때 팀장이 말했다. "올해는 7% 인상입니다." "자동화 역량 키우시면 내년엔 더 드릴게요." 당근이다. 근데 당근 먹을 시간이 없다. 퇴근길 지하철에서 생각한다. 내년에도 똑같을 거다. "내년엔 더 드릴게요." 악순환 매뉴얼 테스트가 많으니 바쁘다. 바쁘니 공부 못 한다. 공부 못 하니 자동화 못 한다. 자동화 못 하니 매뉴얼이 늘어난다. 빠져나갈 구멍이 안 보인다. 커뮤니티에 물어봤다. "다들 어떻게 시간 내세요?" 답변들. "새벽에 일어나서 2시간." "주말에 8시간." "회사 그만두고 부트캠프." 새벽? 나는 12시에 잔다. 6시에 일어난다. 이미 수면 부족이다. 주말 8시간? 여자친구가 화낸다. "또 공부해?" 회사 그만두고? 월급 없으면 월세 못 낸다. 타협 결론 냈다. 완벽하게 전환은 무리다. 조금씩 섞어가자. 이번 주부터 시작했다. 하루 30분. 점심 먹고 30분. Selenium 기초 강의 듣는다. 한 강의가 20분이다. 10분은 따라 쳐본다. 일주일에 2.5시간. 한 달이면 10시간. 6개월이면 60시간. 적다. 그래도 0보단 낫다. 어제 첫 스크립트 짰다. 로그인 자동화. ID 입력, PW 입력, 로그인 버튼 클릭. 10줄짜리 코드. 돌려봤다. 됐다. 신기했다. 내가 짠 코드가 앱을 조작한다. 4년 만에 처음 느끼는 감정. 3000개의 의미 3247개가 무의미한 건 아니다. 이게 있어서 앱이 돌아간다. 이게 있어서 버그를 잡는다. 근데 여기서 멈추면 안 된다. 3000개는 시작이다. 끝이 아니다. 이 케이스들을 자동화하는 게 다음 단계. 느려도 간다. 하루 30분씩. 동료가 물었다. "자동화 언제 마스터해?" "모르겠어. 1년? 2년?" 중요한 건 시작했다는 것. 어제보다 오늘 10줄 더 안다. 내일은 20줄 알 것이다. 솔직한 고백 겁난다. 따라잡을 수 있을까. 신입들은 이미 Python 안다. 나는 4년 차인데 이제 시작. 늦은 건 아닐까. 커뮤니티에서 봤다. "30살에 개발 시작해서 시니어 됐어요." 위로가 된다. 동시에 압박이다. 나도 해야 한다. 매일 밤 생각한다. 오늘도 공부 못 했다고. 내일은 꼭 하겠다고. 내일 되면 또 핑계. "오늘 배포라서." "내일부터 시작." 이제 그만하려고. 핑계 대지 말자. 하루 30분, 무조건.3247개 테스트 케이스. 이제 3248번째는 자동화 스크립트다. 느리지만 간다.

엣지 케이스 사냥꾼 일지 - 버그는 디테일에 숨어있다

엣지 케이스 사냥꾼 일지 - 버그는 디테일에 숨어있다

엣지 케이스 사냥꾼 일지 - 버그는 디테일에 숨어있다 오늘도 엣지 케이스가 날 찾아왔다 출근했다. 테스트 빌드가 와 있다. 개발팀에서 "간단한 수정"이라고 했다. 간단한 수정일수록 더 무섭다는 걸 4년 차면 안다. 빌드 설치하고 앱 켰다. 정상 시나리오부터 돌린다. 문제없다. 이제부터가 진짜다. 나는 엣지 케이스 사냥꾼이다. 정상 사용자가 절대 안 할 것 같은 동작. 그게 내 테스트 범위다.네트워크를 미친 듯이 끊어봤다 첫 번째 타겟. 네트워크. 앱 실행 → 로그인 → 메인 화면. 여기서 와이파이 껐다. 정상 사용자는 안 그런다고? 지하철 타면 터널이다. 계속 끊긴다. 엘리베이터 타도 끊긴다. 이게 엣지 케이스가 아니라 일상이다. 데이터 로딩 중에 끊었다. 로딩 표시가 멈췄다. 무한 로딩. 뒤로 가기도 안 된다. 앱 죽일 수밖에. 버그 등록했다. 재현 스텝 꼼꼼히 적었다. "데이터 로딩 시작 후 2초 시점에 네트워크 차단 → 무한 로딩 → 사용자 액션 불가" 개발자 답변 왔다. "실제로 그럴 일이 있나요?" 있다. 매일 있다.텍스트 필드에 미친 짓을 했다 두 번째 타겟. 입력 필드. 회원가입 화면 띄웠다. 이름 입력란이 보인다. 정상 입력: "홍길동" 내 입력: 이모지 100개. 🎉🎉🎉🎉🎉🎉🎉... 계속. 앱이 버벅거렸다. 입력은 됐다. 다음 버튼 눌렀다. 서버 에러. 500. 또 입력했다. 이번엔 특수문자. !@#$%^&*() 되긴 된다. 저장도 된다. 마이페이지 가서 확인했다. 레이아웃 깨졌다. 글자가 화면 밖으로. 버그 두 건 등록. "이모지 100자 이상 입력 시 서버 에러" "특수문자 포함 이름 저장 시 UI 깨짐" 개발자가 물었다. "누가 이름에 이모지 100개를 넣어요?" 몰라. 근데 막을 거 아니면 처리해야지. 전화번호 입력란도 테스트했다. 숫자 말고 문자 넣어봤다. "가나다" 입력이 된다. 막혀야 하는데. 인증번호 요청 눌렀다. 당연히 실패. 근데 에러 메시지가 이상하다. "undefined error occurred" 세 번째 버그 등록. "전화번호 필드 문자 입력 허용, 에러 메시지 미정의" 오전에 버그 3개. 아직 점심 전이다. 화면 회전을 미친 듯이 돌렸다 점심 먹고 왔다. 세 번째 타겟. 화면 회전. 결제 화면 띄웠다. 가로로 돌렸다. 세로로 돌렸다. 가로. 세로. 가로. 세로. 5번쯤 돌렸을 때 앱이 죽었다. 재현했다. 또 죽었다. 버그 등록. "결제 화면에서 화면 회전 반복 시 앱 크래시" 개발자 반응. "누가 결제 중에 화면을 돌려요?" 누가 알아. 근데 돌릴 수 있으면 대응해야지.동시에 눌러봤다 네 번째 타겟. 동시 액션. '저장' 버튼이 있다. 한 번 누르면 저장된다. 정상. 양손으로 동시에 눌렀다. 연타했다. 5번. 저장 완료 메시지가 5번 떴다. 데이터 확인했다. 같은 데이터가 5개 저장됐다. 중복 저장 방지 안 됨. 버그 등록. "저장 버튼 연타 시 중복 저장 발생" 개발자: "그렇게 빨리 누를 수가 있나요?" 있다. 터치 반응 느리면 사용자가 연타한다. 실제로 CS에서 중복 결제 문의 들어온 적 있다. 좋아요 버튼도 테스트했다. 연타했다. 숫자가 이상하게 올라간다. 1 → 3 → 2 → 5 → 4 API 호출 타이밍 문제인 듯. 버그 추가 등록. 오후에 버그 2개 더. 백그라운드에서 복귀했다 다섯 번째 타겟. 앱 상태 전환. 앱 켜고 로딩 중에 홈 버튼. 10초 기다렸다. 앱 복귀. 화면이 하얗다. 데이터가 안 보인다. 앱 죽이고 다시 켜야 한다. 버그 등록. "백그라운드 복귀 시 데이터 미표시" 개발자: "생명주기 처리 놓쳤네요" 알고 있었다. QA가 없으면 배포됐을 버그다. 푸시 알림도 테스트했다. 앱 켜진 상태에서 푸시 받았다. 알림 탭했다. 해당 화면으로 이동. 뒤로 가기 눌렀다. 앱이 종료됐다. 스택이 잘못 쌓였다. 버그 등록. 하루에 버그 7개. 평균치다. 권한을 미친 듯이 껐다 여섯 번째 타겟. 권한. 카메라 권한 필요한 기능이다. 권한 거부했다. 안내 팝업 뜬다. 정상. 설정 가서 권한 껐다. 앱으로 돌아왔다. 카메라 실행 버튼 눌렀다. 앱이 죽었다. 권한 체크 안 함. 버그 등록. "카메라 권한 거부 상태에서 크래시" 위치 권한도 테스트했다. '항상 허용'에서 '앱 사용 중에만' 변경. 지도 화면 갔다. 내 위치가 업데이트 안 된다. 권한 변경 감지 안 함. 버그 추가. 알림 권한 껐다. 앱에서 알림 설정 화면 들어갔다. 스위치가 다 켜져 있다. 실제론 안 오는데 UI는 켜진 상태. 또 버그. 오늘 10개. 오래된 데이터를 불러왔다 일곱 번째 타겟. 데이터 상태. 1년 전 테스트 계정이 있다. 로그인했다. 마이페이지 들어갔다. 프로필 이미지가 안 보인다. URL이 만료됐나 보다. 오래된 게시글 눌렀다. 댓글이 이상하게 보인다. 탈퇴한 사용자 표시가 안 됨. 찜 목록 들어갔다. 삭제된 상품이 그대로 있다. 눌렀더니 404 에러. 버그 3개 더 등록. "만료된 이미지 URL 처리 미흡" "탈퇴 사용자 댓글 표시 오류" "삭제된 상품 찜 목록 표시" 개발자들이 안 보는 데이터. 오래된 것, 삭제된 것, 만료된 것. 여기서 버그가 나온다. 이상한 조합을 시도했다 여덟 번째 타겟. 기능 조합. 검색하면서 필터 바꿨다. 정렬하면서 새로고침 했다. 동영상 재생 중에 화면 잠갔다. 검색어 입력 중에 필터 변경. 검색어가 사라졌다. 입력 상태 초기화. 버그. 동영상 재생 중 화면 잠금. 5분 후 해제. 동영상이 계속 재생 중이다. 소리는 안 나는데 재생은 됨. 배터리가 닳는다. 버그. 장바구니에 담고 로그아웃. 다른 계정으로 로그인. 장바구니가 이전 계정 거다. 데이터 안 지워짐. 심각한 버그. 오늘 15개. 배포 전이라 다행이다. 개발자와의 대화 버그 리포트 15건 올렸다. 개발자가 채팅 보냈다. "민수님, 이거 다 고쳐야 해요?" "네." "근데 이런 상황 실제로 일어나나요?" "네. 다 재현했어요." "우선순위 좀 정해주세요." 버그 심각도 다시 봤다. Critical: 3개 (앱 크래시, 데이터 유실) High: 7개 (기능 동작 안 함) Medium: 5개 (UI 깨짐, 불편) "Critical 3개는 배포 전에 필수요." "High는 다음 배포까지요." 개발자가 물었다. "이런 엣지 케이스를 어떻게 다 생각해요?" 몰라. 그냥 생각난다. 앱 쓰다 보면 자동으로 떠오른다. '이렇게 하면 어떻게 될까?' '여기서 끊으면?' '이걸 동시에 누르면?' 4년 차 직업병이다. 엣지 케이스가 일상이 된 순간 퇴근길 지하철. 유튜브 보다가 터널 들어갔다. 네트워크 끊겼다. 버퍼링. 터널 나왔다. 재생 재개. '이거 우리 앱은 어떻게 되지?' 테스트했었다. 버그 있었다. 고쳐졌을까? 내일 확인해야지. 편의점 들렀다. 결제 앱 켰다. 바코드 표시. '화면 밝기 최저일 때는?' '화면 회전하면?' '배터리 1%일 때는?' 다 테스트해봐야겠다. 내일 할 일이 또 생겼다. 집 와서 배달 앱 켰다. 주문하다가 앱이 튕겼다. '재현 가능한가?' 다시 켰다. 또 튕겼다. 리뷰 남겼다. "주문 중 앱 크래시, 아이폰 14 Pro, iOS 17.2, 재현 가능" 재현 스텝까지 적었다. 친구가 물었다. "너 왜 리뷰를 버그 리포트처럼 써?" 습관이다. 고칠 수가 없다. QA의 자부심 사람들은 묻는다. "QA가 뭐 하는 건데요?" "버그 찾는 거요." 틀렸다. 우리는 사용자를 보호한다. 정상 사용자가 안 할 동작을 내가 대신 한다. 앱이 죽을 수 있는 상황을 내가 먼저 찾는다. 엣지 케이스는 엣지가 아니다. 누군가에겐 일상이다. 네트워크가 불안정한 사람. 터치를 빨리 하는 사람. 화면을 자주 돌리는 사람. 백그라운드 전환이 잦은 사람. 그 사람들이 버그를 만나기 전에 내가 먼저 만난다. 개발자들은 정상 시나리오를 만든다. 나는 비정상 시나리오를 만든다. 둘 다 필요하다. 오늘 찾은 버그 15개. 배포 후 사용자가 만났을 버그 15개. 내가 막았다. 내일의 엣지 케이스 내일 테스트 계획 세웠다. 메모리 부족 상황 테스트. 앱 여러 개 켜놓고 우리 앱 실행. 백그라운드에서 죽는지 확인. 저장 공간 부족 상황. 파일 다운로드 시도. 에러 처리 되는지 확인. 시간대 변경 테스트. 해외 시간대로 바꾸고 날짜/시간 표시 확인. 언어 변경 테스트. 영어로 바꿨을 때 레이아웃 깨지는지 확인. 접근성 테스트. VoiceOver 켜고 스크린 리더로 사용 가능한지. 할 게 많다. 엣지 케이스는 끝이 없다. 그래도 좋다. 버그 찾을 때 짜릿하다. '이거 아무도 생각 못 했을 텐데' 싶은 버그 찾으면 이상하게 기분이 좋다. 나는 엣지 케이스 사냥꾼이다. 디테일에 숨은 버그를 찾는다. 그게 내 일이다.오늘도 버그 15개. 내일은 몇 개나 찾을까.