커서를 사용하여 레거시 코드 리팩터링(테스트 먼저, 용기 두 번째)
테스트가 없는 600라인 모듈이 커서를 만났습니다. 생산을 중단하지 않고 리팩토링한 워크플로는 AI보다는 시퀀싱에 더 중점을 두었습니다.
이 모듈은 600개 라인으로, 10년이 지났고, 하중을 견디며, 프로덕션 트래픽에 의해서만 테스트되었습니다. 커서는 이를 잘 리팩토링했지만 AI는 아마도 전체 이야기의 3분의 1에 불과했을 것입니다. 나머지 2/3는 테스트, 경계, 에이전트의 빠른 이동 거부 등의 순서입니다.
첫 번째 단계는 특성화 테스트이며 Cursor는 이를 작성하는 데 정말 능숙합니다. 나는 모듈을 읽고 관찰 가능한 모든 동작(입력, 출력, 엣지 케이스, 오류 경로)을 나열하도록 요청했습니다. 그런 다음 '특성화: 정확성이 아니라 현재 동작을 주장합니다.'라는 라벨이 붙은 이상한 것들을 포함하여 현재 동작을 주장하는 테스트를 생성합니다. 이러한 테스트는 모든 것을 가능하게 만드는 안전망입니다.
2단계는 수술 전 경계입니다. 어떤 동작도 변경하지 않고 먼저 이음새에서 커서 추출 순수 기능(구문 분석, 계산, 서식 지정)을 수행했으며 각 추출은 녹색으로 확인되었습니다. 그런 다음에야 실제 리팩토링이 기능별로, 가장 중요한 지침인 '패스당 한 가지 변경, 테스트 실행, 중지'와 함께 시작되었습니다. 대담하게 리팩터링하는 에이전트는 자신있게 다시 작성하고 미묘하게 중단됩니다. 그들 사이에 검증을 통한 작은 패스가 통제력을 유지하는 방법입니다.
아무도 중요하지 않을 것으로 예상하는 단계: 적용하기 전에 커서가 각 변경 사항을 한 문장으로 설명하도록 했습니다. 설명에서는 테스트에서 파악하지 못한 두 가지 사항, 즉 동시성에서만 비트되는 공유 개체의 변형과 프로덕션 시간이 아닌 테스트 시간대에서 안전한 작업 순서 변경을 포착했습니다. 한 문장의 근거를 읽는 데는 변경당 10초가 걸리며 그물이 놓친 내용을 포착합니다.
최종 집계: 모듈은 이제 신입 사원이 읽을 수 있는 구조를 갖춘 300줄이며, 특성화 제품군에 의해 동일한 동작이 확인되었으며, 생산 사고가 발생하지 않았습니다. AI가 타이핑을 했습니다. 규율이 리팩토링을 수행했습니다. 둘 다 필요했습니다. 그 중 하나만 선택 사항이었습니다.
