# QA 로그 — GlucoClampTracer

- 날짜: 2026-05-18
- 환경: macOS (Darwin 25.5.0), Python 3.9.6
- 설치 라이브러리: streamlit 1.50.0, numpy 2.0.2, scipy 1.13.1,
  pandas 2.3.3, matplotlib 3.9.4 / **statsmodels 미설치**

전체 결과: **PASS**

---

## QA1 — Python 구문 검사 (모든 .py 파일)

```
python3 -c "import ast; ast.parse(open('FILE').read())"
```

| 파일 | 결과 |
|------|------|
| `app.py` | **PASS** (`app.py OK`) |
| `clamp_core.py` | **PASS** (`clamp_core.py OK`) |
| `generate_sample_data.py` | **PASS** (`generate_sample_data.py OK`) |

---

## QA2 — 샘플 데이터 생성

```
python3 generate_sample_data.py
```

결과: **PASS** — CSV 3종 생성 확인
- `data/clamp_timeseries.csv` — 288 rows, 18 animals
- `data/tracer_enrichment.csv` — 36 rows
- `data/tissue_2dg.csv` — 144 rows, 8 tissues

---

## QA3 — 생성 CSV pandas 로드/파싱

```
python3 -c "import pandas as pd; [print(f, pd.read_csv('data/'+f).shape) for f in (...)]"
```

결과: **PASS** — 3개 파일 모두 정상 파싱
- `clamp_timeseries.csv` (288, 8)
- `tracer_enrichment.csv` (36, 9)
- `tissue_2dg.csv` (144, 7)

---

## QA4 — clamp_core.py 단독 import (streamlit 불필요)

```
python3 -c "import clamp_core"
python3 -c "import sys; sys.modules['streamlit']=None; import clamp_core"
```

결과: **PASS** — streamlit 없이도 import 성공.
`clamp_core`는 numpy/scipy/pandas만 요구하며 statsmodels는 선택적
(미설치 시 혼합효과모형만 비활성, 나머지 정상).

---

## QA5 — clamp_core.py 자체 검증

```
python3 clamp_core.py
```

결과: **PASS**
```
steady-state: True 20.0 - 120.0 min, CV=9.84%
kinetics: {'ra_basal': 25.0, 'ra_clamp': 40.0, 'hgp_basal': 25.0,
           'hgp_clamp': 10.0, 'rd_clamp': 40.0,
           'hgp_suppression_pct': 60.0, 'gir': 30.0}
tissue Rg': 0.0514
statsmodels available: False
clamp_core self-check OK
```

---

## QA6 — 전체 파이프라인 스모크 테스트 (18마리, 3그룹)

데모 데이터에 대해 정상상태 탐지 → GIR 정규화 → Steele 동역학 →
조직 Rg' → ANOVA → 쌍별 비교를 전 동물에 대해 실행.

결과: **PASS** — 18마리 전원 정상상태 탐지 성공, 생물학적으로 타당한 기울기 확인:

| 그룹 | GIR (mg/kg/min) | 클램프 Rd | HGP 억제율 (%) | 조직 Rg' 평균 |
|------|-----------------|-----------|-----------------|----------------|
| Control (C57BL/6) | 35.5 | 43.8 | 63.4 | 0.0657 |
| DIO | 11.2 | 28.2 | 42.5 | 0.0289 |
| dbdb (db/db) | 4.9 | 33.5 | 23.3 | 0.0113 |

- GIR 일원배치 ANOVA: F = 151.58, p = 1.1e-10 (그룹 간 유의)
- 쌍별 비교 3쌍 생성, 조직 Rg' 144행 계산 정상
- QC 플래그 함수 정상 동작

방향성: Control > DIO > db/db 로 인슐린 감수성 감소 — 모델 특성과 일치.

---

## QA7 — Streamlit headless AppTest 스모크 런

```
python3 -c "from streamlit.testing.v1 import AppTest; at=AppTest.from_file('app.py'); at.run()"
```

결과: **PASS** — 예외 없음(`exception: NONE`), 탭 5개 정상 렌더링,
페이지 오류 0건. 데모 데이터 자동 로드 및 5개 기능 탭 모두 렌더링 확인.

초기 실행 시 발견된 경고는 모두 수정 완료:
- `use_container_width` deprecation → `width="stretch"` 로 교체
- matplotlib `boxplot(labels=)` deprecation → `tick_labels=` 로 교체
- matplotlib 한글 글리프 누락(DejaVu Sans) → 차트 내 텍스트를 영문으로 변경
  (UI/리포트 텍스트는 한국어 유지)

수정 후 재실행: 경고 없음, 예외 없음.

---

## 비고

- `statsmodels`는 본 환경에 미설치. `requirements.txt`에는 포함(0.14.4 핀)되어
  있으며, 미설치 환경에서도 앱·코어 모듈이 정상 동작하도록 scipy 기반
  대체(ANOVA·Welch t-검정·Bonferroni)를 구현함. 혼합효과모형 탭은
  statsmodels 설치 시에만 활성화되며, 미설치 시 안내 메시지 표시.
- 외부 네트워크/API 호출 없음 — 완전 오프라인 동작 확인.
- 전 단계 1회 통과, 재시도 불필요(경고 수정은 QA 범위 내 개선 조치).
