nabemall

Evals & testing

전부 통과했다 — 초록불 테스트를 살아남은 결함 22개

돌아가는 시스템 하나를 만들고 출고하며 확인한 결함 22건을, 검사가 통과하고 성공을 보고하면서도 아무것도 증명하지 못하는 여덟 가지 방식으로 묶었다. 각각 증상·원인·조치 — 그중 둘은 아직 부분 조치다.

기계 번역 · 원문

Twenty-two defects that survived a green test suite, grouped by the eight ways a check can pass without proving anything.

What is in it

  • README.md — the taxonomy, a 7-question checklist, and all 20 entries with symptom, cause and fix
  • defects.csv — the register as data, sortable by blind spot or area
  • blindspots.json — counts per blind spot and which fixes are still partial

Claims, and how to check them

  • every entry was observed, not constructed as an example
    check: each has a specific symptom, a confirmed cause and the fix that was applied
  • the seven blind spots are stack-independent
    check: read the blind spot column alone; none of the seven names a language or library
  • two fixes are still incomplete and are marked as such
    check: blindspots.json lists partial_fixes; the entries carry the note in place

What it does not do

  • no code library or test framework — this is a register, not a tool
  • not a study: 20 defects from one system, not a random sample, so no percentage here is a base rate
  • does not cover concurrency, distributed systems or performance regressions
  • two of the twenty fixes are only partial and say so

You need already

  • nothing — plain markdown, CSV and JSON

blind_spots: 8defects: 22examples_from: Python, SQLite, FastAPI, CSSformat: markdown, csv, jsonlanguage: English

결함 스물두 건. 하나하나가 잡았어야 할 검사를 살아남았다.

버그 자체는 평범하다 — 빠진 마이그레이션, 가려진 변수, 빈 열. 흥미로운 건 두 번째 칸이다: 각각에 대해, 검사가 돌고 성공을 보고하고도 아무것도 증명하지 못한 구체적인 기제. 그 목록은 짧고, 반복되며, 다른 언어로 다른 일을 하는 코드베이스에도 그대로 옮겨 간다.

검사가 거짓말하는 여덟 가지 방식

• 검사가 실패할 수 없었다 — 정확성과 무관한 이유로 통과하는 단언. 검사가 없느니만 못하다. 색깔을 보고하기 때문이다.

• 환경이 너무 깨끗했다 — 테스트가 현재 정의대로 세계를 만들기 때문에, 정의와 이미 존재하는 세계 사이의 불일치는 거기서 일어날 수가 없다.

• API가 실패 대신 값을 돌려준다 — 없는 키는 빈칸을, 모르는 CSS 클래스는 무스타일을 준다. 덧붙이기는 바꿔치기가 아니다. 아무것도 raise되지 않으니 아무것도 기록되지 않는다.

• 수정이 산출물에 닿지 않았다 — 소스는 이렇게 말하고 디스크의 파일은 저렇게 말한다.

• 성공만 셌다 — 통한 것의 보고는 보고가 아니다.

• 주석이 코드와 어긋났다 — 확신에 찬 틀린 문장은 다음 독자가 확인하는 것을 멈추게 한다.

• 두 개념이 한 열을 썼다 — 묻고 있는 질문 옆의 질문에 확신을 갖고 답하는 고지.

• 부분문자열을 신원으로 취급했다 — 이름으로 매칭한 정리 작업이 진짜를 지웠다.

구성

• README.md — 분류 체계, 당신의 스위트에 돌릴 8문항 체크리스트, 그리고 증상·확인된 원인·적용한 조치가 붙은 22건 전부

• defects.csv — 등록부를 데이터로. 눈이 안 닿는 자리별로도, 영역별로도 정렬 가능

• blindspots.json — 횟수, 그리고 어느 조치가 아직 부분적인지

항목은 이렇게 생겼다

새 설치는 import에서 죽는데 개발 기기는 무한정 멀쩡했다 — create_all이 이미 있는 테이블을 건너뛰고 따라서 외래키도 절대 해석하지 않기 때문이다. 어떤 스위트는 15/15를 보고했지만 가장 중요한 단언 셋은 한 번도 실행되지 않았다. 빈 결과가 거짓으로 만든 if 뒤에 숨어 있었다. 테스트 픽스처를 지우려고 쓴 정리 질의가 완성된 실제 상품을 매칭했다. 필터가 부분문자열이었고 진짜 제목에 "fastest"라는 단어가 들어 있었기 때문이다.

깔끔한 결말은 없다

스물두 건 중 둘은 조치가 부분적이라고 그 자리에 표시돼 있다. 근본 원인이 아직 열려 있고 다음번에도 조용히 일어날 것이기 때문이다. 말끔한 해결만 모은 등록부는 마케팅 문서다.

이것이 아닌 것

조사도, 연구도, 모범 사례도 아니다. 한 사람이 한 시기에 만든 시스템 하나에서 나온 결함 22건이다. 표본은 작고 무작위도 아니다 — 그냥 일어난 일이다. 여기 어떤 퍼센트도 기저율이 아니다. 제공하는 것은 분류 체계와 체크리스트이며, 둘 다 배우는 데 실제 시간이 들었다.

이런 분께

테스트 스위트가 초록불인데 그게 대체 무엇을 증명하는지 궁금해지기 시작한 사람. 예시는 파이썬·SQLite·웹앱이지만, 여덟 가지 눈이 안 닿는 자리는 그렇지 않다.

영어. 마크다운·CSV·JSON — 설치할 소프트웨어 없음.

testingsoftware qualitydebuggingpythonengineering