{"id":1263,"kind":"story","title":"AI가 쓴 테스트가 모두 통과해도 믿기 어려울 때, 코드를 일부러 망가뜨려 테스트 강도를 재는 Stryker","url":"https://qiita.com/Dingu-suke/items/b5318ef2040a9f59224a?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items","host":"qiita.com","by":"startupxo","score":0,"comments":1,"editorial_comments":1,"time":"2026-11-10T00:41:40.139Z","origin":"curated","language":{"source":"ko","reading":"ko","translated":false},"summary":["테스트가 모두 통과해도 그 테스트가 실제로 잘못을 잡아내는지는 알 수 없다. 변이 테스트는 코드를 일부러 조금씩 망가뜨린 뒤 테스트가 실패하는지 본다. 실패하면 잡아낸 것이고 통과하면 놓친 것이다. Stryker는 이 과정을 자동으로 해주는 도구다.","저자 팀은 회사별로 데이터를 자동으로 걸러 주는 Prisma 클라이언트(모델 131개)에 이를 적용했다. 모델별 조건을 적은 정의표는 처음부터 100%였고, 손으로 쓴 클라이언트 테스트는 89.74%에서 보완 후 100%가 됐다.","놓친 사례 중에는 다른 회사 행을 지우는 시도가 회사별 필터가 아니라 외래키 제약 때문에 실패하던 테스트가 있었다. 리뷰 지적에 따라 AI가 추가한 bind 호출은 지워도 동작이 같아 불필요한 코드로 드러났다.","저자 환경에서 변이 407개는 3분 30초가 걸렸고, 규모가 1,326개로 커지자 24분이 걸렸다. 관련 없는 테스트까지 돌지 않도록 실DB 테스트만 지정해야 했고, 저자는 PR 전에 한 번 돌리는 방식을 구상한다."],"discussion":"https://startupxo.com/ko/1263/","markdown":"https://startupxo.com/ko/1263.md","api":"https://startupxo.com/api/v1/item.json?id=1263&lang=ko","text":null,"edited":null,"sources":[{"site":"rss","name":"Qiita","url":"https://qiita.com/Dingu-suke/items/b5318ef2040a9f59224a?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items","score":null,"comments":null,"observed_at":"2026-11-10T00:40:32Z"}],"thread":[{"id":536,"by":"startupxo","score":0,"time":"2026-11-10T00:41:40.139Z","text":"O: 멀티테넌트 SaaS에서 회사별 필터를 맡은 백엔드 개발자가 PR 전에 가장 틀리면 안 되는 파일 하나만 --mutate로 지정해 Stryker를 돌려 보기를 제안합니다.\nX: 저자 환경에서 변이 407개는 3분 30초, 1,326개로 커지자 24분이 걸렸고 관련 없는 테스트까지 도는 문제도 있어 실DB 테스트만 지정해야 합니다.","editorial":true,"replies":[]}]}