มหาวิทยาลัยมหามกุฏราชวิทยาลัย · ระบบสาธิต (Demo)
ข้ามไปยังเนื้อหา

แผนการทดสอบหลัก (Master Test Plan)

งวดที่ 1 · ทดสอบ

ดาวน์โหลด .md

แผนการทดสอบหลัก (Master Test Plan)

อ้างอิง TOR: ข้อ 4.7.1 (Master Test Plan + Test Case + Traceability กับ SRS) และข้อ 7.1.4 (เอกสารส่งมอบงวดที่ 1) ฉบับ: 1.0 — วันที่ 3 ตุลาคม พ.ศ. 2569 เอกสารที่เกี่ยวข้อง: /documents/srs (รหัส FR/NFR), /documents/test-checklist (Checklist ประสิทธิภาพ/ความปลอดภัย), /documents/test-reports-index (ดัชนีรายงานผลทดสอบ)

ตารางกรณีทดสอบในเอกสารนี้จัดทำจาก ไฟล์ทดสอบที่มีอยู่จริงใน repository (tests/unit, tests/api, tests/e2e) จำนวนกรณีนับจากบรรทัด it(...) / test(...) ในแต่ละไฟล์ (it.each นับเป็น 1 แม้จะขยายเป็นหลายกรณีตอนรัน) ผลการรันจริงให้ดูจากรายงานที่สร้างจากการรันแต่ละครั้ง (หัวข้อ 9) — เอกสารนี้ไม่ได้อ้างผลผ่าน/ไม่ผ่าน


1. วัตถุประสงค์

  1. กำหนดกลยุทธ์ ระดับ สภาพแวดล้อม เกณฑ์เริ่ม/สิ้นสุด และวิธีบริหารข้อบกพร่องของการทดสอบตลอดโครงการ
  2. ระบุกรณีทดสอบ (Test Case) และความเชื่อมโยงกับความต้องการใน SRS (FR-xxx) และข้อ TOR (Traceability)
  3. เป็นฐานของการทดสอบถดถอย (Regression) อัตโนมัติทุก API และทุก CTA หลัก (TOR 4.7.5)

2. ขอบเขต

อยู่ในขอบเขตนอกขอบเขตของรอบนี้
Domain logic (retrieval, guardrail, citation, token budget, chunking, scorers, SLA, PII)การทดสอบเจาะระบบโดยผู้ทดสอบภายนอก — ไม่ได้ดำเนินการในรอบนี้ตามคำสั่งของผู้ว่าจ้าง
API ทุก endpoint ใน OpenAPI registry (107 operation) + middlewareการทดสอบโหลด 500 concurrent บนคลาวด์จริง (ทำระดับเครื่องเดียว)
RAG pipeline 8 โหนด (LangGraph) ด้วย Mock LLMFirefox / Safari / Edge (sandbox มี Chromium เท่านั้น)
UI E2E 3 viewport (390/768/1280)UAT กับผู้ใช้จริงของมหาวิทยาลัย (มีแม่แบบและ Defect Log รองรับ)
ไฟล์ส่งมอบ IaC (YAML parse), สคริปต์สำรอง/กู้คืนการรัน CI/CD บน GitHub Actions จริง
การประเมินคุณภาพ AI 7 ชุด (Benchmark)

3. กลยุทธ์การทดสอบ

  • Test pyramid: เน้น unit test ที่ src/domain (pure TypeScript) มากที่สุด ตามด้วย API test ที่เรียก route handler ตรง (ไม่ต้องเปิดเซิร์ฟเวอร์) และ E2E ครอบคลุมเส้นทางผู้ใช้หลัก
  • ข้อมูลทดสอบแยก: vitest สร้างฐานข้อมูล template หนึ่งครั้งต่อการรัน (prisma migrate deploy + prisma/seed.ts, tests/helpers/global-setup.ts) แล้วแต่ละไฟล์ทดสอบคัดลอกเป็นฐานข้อมูลของตนเอง — ไม่แตะ prisma/dev.db
  • LLM แบบ deterministic: ชุด vitest ตั้ง LLM_FORCE_MOCK=1 จึงใช้ MockLlmAdapter เสมอ ผลจึงทำซ้ำได้และไม่เสียค่า API ส่วนคุณภาพของ LLM จริง (Typhoon) วัดแยกด้วยระบบประเมินผล (หัวข้อ 4.5)
  • Regression ทุก API: 2 ชั้น — (1) tests/api/openapi-coverage.test.ts ตรวจว่าทุก path+method ใน registry ของ /api/openapi.json มีไฟล์ทดสอบที่ import handler นั้น (2) เมื่อรัน npm test (OPENAPI_COVERAGE=1) teardown ใน tests/helpers/global-setup.ts ตรวจการเรียกจริงที่บันทึกโดย withApi และเขียน coverage/openapi-coverage.json — endpoint ใหม่ที่ไม่มีการทดสอบจะทำให้ชุดทดสอบล้มเหลว (รายละเอียดใน /documents/test-reports-index หัวข้อ 4)
  • สิทธิ์: ทุกกลุ่ม endpoint มีกรณีสำเร็จและกรณีสิทธิ์ไม่พอ (401/403) อย่างน้อยกลุ่มละ 1
  • Coverage gate: src/domain/** + src/application/** lines/functions/statements ≥80%, branches ≥75% (vitest.config.ts) — ต่ำกว่าเกณฑ์ vitest ออกด้วยรหัสผิดพลาด (TOR 4.7.3)

4. ระดับการทดสอบ

ระดับเครื่องมือตำแหน่งไฟล์กรณี (นับจากซอร์ส)คำสั่ง
Unit (รวม component)vitest + Testing Library (jsdom)tests/unit/**29391npx vitest run tests/unit
API / SITvitest (เรียก route handler ตรง)tests/api/*.test.ts24172npm run test:sit
ทั้งชุด + regression ทุก APIvitest + OPENAPI_COVERAGE=1unit + api53563npm test / npm run test:coverage
E2E / Functional UIPlaywright (Chromium) × 3 viewporttests/e2e/*.spec.ts326 (× 3 viewport = 78 การรัน)npm run test:e2e
ประสิทธิภาพscripts/perf/load-test.ts, seed-perf-users.tsscripts/perf/——npm run report:perf
ความปลอดภัยnpm auditscripts/security/npm-audit-report.ts——npm run report:security
กู้คืนข้อมูลbash + sqlite3scripts/restore-test.sh——npm run report:restore-test
คุณภาพ AIEvaluation runnersrc/application/evaluation/runner.ts, scripts/eval/run-acceptance.ts7 ชุด650 ข้อ (+ Injection 20)npm run eval:acceptance
UATผู้ใช้ของมหาวิทยาลัยDefect Log (/admin/defect-log)——ดำเนินการในงวดที่ 2–3

4.1 การทดสอบ Functional และ SIT บนสภาพแวดล้อมทดสอบ (TOR 4.7.4)

  • ระบบสาธิต: API test รันกับฐานข้อมูลทดสอบแยกต่อไฟล์ (เทียบเท่า Test Environment) ผ่าน npm run test:sit
  • Production: SIT/UAT ดำเนินการบน namespace mbu-test (deploy อัตโนมัติจาก branch release/* ตาม .github/workflows/ci-cd.yml) — ยังไม่ได้ติดตั้งจริงในรอบนี้

4.2 การประเมินคุณภาพ AI (Benchmark)

ชุดจำนวนข้อWorkflowเกณฑ์ขั้นต่ำ (TOR ก.5.3)
DS-1 ธรรมศึกษา ปรนัย100Accuracy (exact match ตัวเลือก)≥80%
NT-2 นักธรรม ตอบสั้น50LLM-as-Judge 0–3≥2.00
RET-1 พระวินัยปิฎก100Recall@5≥80%
RET-2 พระสุตตันตปิฎก100Recall@5≥80%
RET-3 พระอภิธรรมปิฎก100Recall@5≥80%
GR-1 นอกขอบเขต100Refusal≥80%
GR-2 หัวข้อสุ่มเสี่ยง50Refusal≥80%
INJ Prompt injection (รายงานความปลอดภัย)20Refusal≥80%

ต้องรันอย่างน้อย 2 ครั้ง (Baseline และ Acceptance — TOR 4.7.7) ผลดูที่ /admin/evaluation และ /documents/baseline-evaluation-report

5. สภาพแวดล้อมการทดสอบ

สภาพแวดล้อมรายละเอียด
เครื่องพัฒนา/sandboxNode.js ≥22, SQLite, macOS หรือ Debian; dev server ที่ http://localhost:3210 (E2E ใช้ E2E_PORT, ค่าเริ่มต้น 3210)
ฐานข้อมูลทดสอบprisma/test-template-<pid>.db (สร้างอัตโนมัติ) แล้วคัดลอกต่อไฟล์ทดสอบ
LLMMock (vitest) / Typhoon typhoon-v2.5-30b-a3b-instruct (การประเมินผลและการใช้งานจริงเมื่อตั้ง TYPHOON_API_KEY)
เบราว์เซอร์Chromium ของระบบ (CHROMIUM_PATH หรือ /usr/bin/chromium) viewport 390×844 (มือถือ, touch), 768×1024, 1280×800; locale th-TH
CIGitHub Actions ubuntu-latest (ไฟล์ส่งมอบ ยังไม่ได้รันจริง)
ProductionKubernetes 3 namespace mbu-dev / mbu-test / mbu-prod (Helm) — ยังไม่ได้ติดตั้ง

6. เกณฑ์เริ่มต้นและเกณฑ์สิ้นสุด

Entry criteria

  1. ความต้องการใน SRS ได้รับการทบทวนและมีรหัส FR/NFR
  2. ฐานข้อมูล migrate + seed สำเร็จ (ผู้ใช้สาธิต 6 บัญชี, config, prompt, guardrail, คลังความรู้, ชุดทดสอบ)
  3. npx tsc --noEmit และ npm run lint ผ่าน
  4. สำหรับ E2E: dev server ตอบ GET /api/health = 200

Exit criteria

  1. npm test ผ่านทั้งหมด รวม openapi-coverage (ทุก endpoint ถูกทดสอบ)
  2. Coverage src/domain + src/application ผ่าน gate (≥80% / branches ≥75%) — ดู /documents/coverage-report
  3. npm run test:e2e ผ่านทั้ง 3 viewport
  4. npm audit ไม่มีช่องโหว่ระดับ High/Critical (/documents/vulnerability-scan-report)
  5. Benchmark 7 ชุดผ่านเกณฑ์ขั้นต่ำ TOR ก.5.3 (ไม่ผ่าน = ไม่ตรวจรับตาม ก.5.3.1)
  6. Defect Log ไม่มีรายการ High/Critical ค้าง (TOR 4.7.8)
  7. Restore test ผ่าน (/documents/restore-test-report)

Suspension / Resumption: หยุดการทดสอบระดับถัดไปเมื่อระดับก่อนหน้าล้มเหลว (ลำดับเดียวกับ pipeline: lint → test → security → build → e2e) และเริ่มใหม่เมื่อแก้ไขและผ่านการทดสอบซ้ำ

7. ตารางกรณีทดสอบ (Test Cases) และ Traceability

7.1 Unit tests (tests/unit)

รหัสไฟล์ขอบเขตกรณีFR/NFRTOR
UT-01tests/unit/audit-hash-chain.test.tsGENESIS_HASH, computeAuditHash, verifyChain (ตรวจการแก้ไขแถว)13FR-111ก.6.5.3
UT-02tests/unit/bm25.test.tsBm25Index: เพิ่ม/ลบ/ค้นหา incremental14FR-031ก.4.6.1
UT-03tests/unit/chunking-policy.test.tsestimateTokens, โหมด marker (ไม่ตัดข้อเดียวกัน, oversized, หน้าเริ่ม–จบ), โหมด semantic (ไม่ตัดตามโทเคนล้วน)28FR-071ก.4.8.2, ก.4.6.2
UT-04tests/unit/citation-vo.test.tsformatCitationLabel, resolveCitations (ตัด cite ปลอม, ป้ายไม่มีอ้างอิง)14FR-012, FR-043ก.3.6.3, ก.4.6.3
UT-05tests/unit/config-snapshot.test.tsAI_CONFIG_DEFAULTS, CONFIG_GROUPS, aiConfigSchema (partial update), merge/diff14FR-080, FR-051ก.6.2.1, ก.6.2.6, ก.4.2.1
UT-06tests/unit/contrast.test.tsWCAG contrast ทุกคู่สีใน contrastPairs (light/dark)3NFR-008ก.3.1.1
UT-07tests/unit/documents.test.tsศูนย์เอกสาร: ครบ 36 ฉบับ, frontmatter, กัน path traversal3FR-1537.5
UT-08tests/unit/embedding.test.tsfnv1a, embed (512 มิติ, L2), cosine13FR-031ก.4.6.1
UT-09tests/unit/graph.test.tsLangGraph 8 โหนดตามลำดับ, refusal หยุด graph, stopAfter, mcq, fitContext ≤ maxPerPromptQa7FR-030, FR-040, FR-051ก.4.1.2, ก.4.2.1
UT-10tests/unit/guardrail-policy.test.tsหัวข้อเริ่มต้น, evaluateInput (injection/sensitive/yes-no/scope), evaluateOutput23FR-040–FR-043, FR-035ก.4.3.1, ก.4.4.1, ก.4.4.3, ก.4.5.3
UT-11tests/unit/i18n.test.tskey ของ messages/th และ messages/en ตรงกันทุก namespace3FR-150ก.3.2.1
UT-12tests/unit/infra-yaml.test.tsci-cd.yml (ลำดับ job, trigger, Node 22, deploy-prod ตรวจ tag), Helm (Chart/values parse, 8 services, HPA 70%, ingress TLS, 3 namespaces), สคริปต์ backup/restore/HTTPS17NFR-005, NFR-0144.6.2, 4.6.3, ก.1.3.2, ก.1.6.3, ก.2.1.2
UT-13tests/unit/llm-adapters.test.tsTyphoon/OpenAI-compatible, Gemini, Claude, Mock (fetch mock) และการสลับ provider7FR-030, NFR-012ก.4.1.2, 4.4.6
UT-14tests/unit/oauth-providers.test.tsGoogle/Facebook: authorize URL, state/PKCE, parse profile6FR-003ก.3.3.2
UT-15tests/unit/parsers.test.tsparsers 4 ชนิด, pipeline helpers (unwrapLines, chunkText), kb-admin helpers16FR-070, FR-073ก.4.8.1
UT-16tests/unit/password-lockout-rbac.test.tsนโยบายรหัสผ่าน (ผู้ใช้/ผู้ดูแล), lockout 5/20 ครั้ง 15 นาที, RBAC18FR-004, FR-006, FR-007ก.2.1.4, ก.6.1.1, ก.6.1.4
UT-17tests/unit/pii-masking.test.tsเลขบัตรประชาชน (checksum), เบอร์โทร, อีเมล, ชื่อ9FR-06314.3
UT-18tests/unit/relevance-scoring.test.tsDEFAULT_PRECEDENCE, applyPrecedence (≤10)8FR-034, FR-011ก.4.8.3, ก.3.6.2
UT-19tests/unit/report-scripts.test.tsฟังก์ชันช่วยของสคริปต์รายงาน: percentile/summarize, mdTable, replaceSection/extractSection43NFR-001, FR-1414.7.9, 12.2
UT-20tests/unit/reranker.test.tsHeuristicReranker (0.6/0.3/0.1), phraseCandidates15FR-033ก.4.7.1
UT-21tests/unit/rrf.test.tsrrfFuse6FR-031ก.4.6.1
UT-22tests/unit/sanitize.test.tsINJECTION_LINE_PATTERNS (ไม่ตัดเนื้อหาธรรม), sanitizeText12FR-075, FR-041ก.4.4.1
UT-23tests/unit/scorers.test.tsnormalizeAnswer, extractChoiceLabel, exactMatch, recallAtK, mockJudge, refusal, aggregate24FR-092, FR-095ก.5.2.2, ก.5.3
UT-24tests/unit/sla-policy.test.tsslaHoursFor, slaDeadline (ชั่วโมงทำการ), overdue, ค่าปรับ15FR-14012.3, 12.4, 10.2
UT-25tests/unit/synonyms.test.tsSYNONYM_GROUPS ไทย–บาลี–อังกฤษ, expandQuery16FR-031, FR-032ก.4.6.1, ก.4.7.2
UT-26tests/unit/token-budget-policy.test.tsestimateTokens, checkDailyBudget (cap, margin, alert), checkInputLength, fitContext13FR-050–FR-053ก.3.4.1, ก.3.4.4, ก.4.4.2, ก.7.3.5
UT-27tests/unit/tokenizer.test.tsnormalizeText, segmentWords (Intl.Segmenter), tokenize, charNgrams17FR-031ก.4.6.1
UT-28tests/unit/tor-map.test.tsตาราง TOR 200 ข้อ, clauseId ครบ/ไม่ซ้ำ, route มีจริง, เอกสาร /documents/<slug> มีไฟล์, todo มี note7FR-1534.4, 7.5
UT-29tests/unit/components/chat-components.test.tsxReferenceList (แสดง 3 + Expand All), AnswerSummary + CitationChip, FeedbackButtons7FR-011, FR-012, FR-014ก.3.6.2, ก.3.6.3, ก.3.8.1

7.2 API / SIT tests (tests/api)

รหัสไฟล์ขอบเขตกรณีFRTOR
AT-01tests/api/admin-users.test.tsค้นหา/ดู/แก้/ระงับ/ลบผู้ใช้, สิทธิ์ Dhamma Talk, เปลี่ยน role เฉพาะ SUPER_ADMIN, conversation_accessed10FR-100–FR-102, FR-021ก.6.1.1–ก.6.1.3
AT-02tests/api/ai-config.test.tsอ่าน/แก้ config มีผลทันที, snapshot, revert, models, test-llm7FR-080, FR-081ก.6.2.1–ก.6.2.6
AT-03tests/api/alerts.test.tsรายการ AlertEmailLog, ส่งแจ้งเตือนทดสอบ3FR-130ก.4.10.2, ก.7.3.5
AT-04tests/api/audit-log.test.tsค้นหา/กรอง, export CSV, verify hash chain, UPDATE/DELETE ถูกปฏิเสธ6FR-110–FR-112ก.6.5.1–ก.6.5.4
AT-05tests/api/auth.test.tsregister (consent), login, logout, บัญชีระงับ, lockout, /api/me6FR-001, FR-002, FR-004, FR-008ก.3.3.1, ก.2.1.4, 14.2
AT-06tests/api/backup.test.tsสร้าง/รายการไฟล์สำรอง (SUPER_ADMIN เท่านั้น)4FR-142ก.1.6.3
AT-07tests/api/chat-qa.test.tsSSE references≤10 → delta → done (citation, usage, trace 8 โหนด), ถามต่อ + retention 90 วัน, INPUT_TOO_LONG, เพดาน 24 ชม. → 503 + auto unavailable + alert, Unavailable mode, IDOR, chunks, feedback, ลบบทสนทนา10FR-010–FR-017, FR-050–FR-054ก.3.4, ก.3.5.1, ก.3.6.2, ก.3.6.3, ก.3.8.1, ก.4.4.2
AT-08tests/api/dashboard.test.tsusage/tokens/feedback ตามช่วงเวลา + เทียบช่วงก่อน, สิทธิ์8FR-120–FR-122ก.7.1–ก.7.3
AT-09tests/api/data-destruction.test.tsทำลายข้อมูลตาม scope + ข้อความยืนยัน + หนังสือรับรอง, AuditLog ไม่ถูกลบ6FR-1434.11.3
AT-10tests/api/defect-log.test.tsCRUD, deadline ตามความรุนแรง, resolutionNote บังคับ, confirm → overdue/ค่าปรับ, export6FR-14012.3, 12.4, 10.2, 4.7.8
AT-11tests/api/dhamma-talk.test.tsสิทธิ์ (403 เมื่อปิด), SSE artifact, ใช้ฉบับที่ผู้ใช้แก้เป็นบริบท3FR-020, FR-021ก.3.7.1–ก.3.7.4, ก.3.3.3
AT-12tests/api/evaluation.test.tsสิทธิ์, CRUD ชุด/ข้อ, CSV import + template, version bump, runs, compare, thresholds, security-report, export18FR-090–FR-097ก.5.1–ก.5.3, ก.6.4.1–ก.6.4.3, 7.2.7
AT-13tests/api/guardrails.test.tsCRUD หัวข้อ, ทดสอบข้อความ, snapshot5FR-044ก.6.2.5
AT-14tests/api/health-status-openapi.test.ts/api/health, /api/status (ไม่เปิดเผยความลับ), /api/openapi.json, /api/csrf, /api/documents5FR-144, FR-005, FR-153ก.4.1.1
AT-15tests/api/knowledge-base.test.tsอัปโหลด TXT/TEI/DOCX/PDF → job → chunks → ค้นเจอ, oversized, ตัด injection, PDF สแกน, PATCH metadata/precedence + audit, reindex selected/all (คง id), retry, delete, coverage 91 เล่ม/เป้า 20%28FR-070–FR-075, FR-034ก.4.8.1–ก.4.8.3, ก.6.3.1–ก.6.3.3, 4.5.3, ข.1
AT-16tests/api/oauth.test.tsAuthorization Code flow ครบด้วย Mock Provider (start → authorize → callback → token → userinfo), state ไม่ตรงถูกปฏิเสธ4FR-003ก.3.3.2
AT-17tests/api/openapi-coverage.test.tsทุก path+method ใน registry มีไฟล์ทดสอบที่ import handler (ชั้น static) — ชั้น runtime ตรวจใน teardown เมื่อ OPENAPI_COVERAGE=11ทุก FR ที่มี API4.7.5
AT-18tests/api/pricing.test.tsCRUD อัตราค่าโทเคน4FR-084ก.7.3.3
AT-19tests/api/privacy-requests.test.tsผู้ดูแลดำเนินการ access_copy / erase (anonymize) / withdraw_consent (ระงับบัญชี), สร้างแทนผู้ใช้7FR-06214.4, ก.6.1.2
AT-20tests/api/privacy.test.tsexport JSON ข้อมูลตนเอง, ยื่น/ดูคำขอ5FR-06114.4
AT-21tests/api/prompts.test.tsเวอร์ชันใหม่, diff, activate/rollback, audit prompt_changed6FR-082ก.4.9.1, ก.6.2.4
AT-22tests/api/rbac-ip-allowlist.test.tsCSRF 403, rate limit login 10/นาที และเขียน 60/อ่าน 600, admin IP allowlist 403 (API+หน้าเว็บ) + audit, locale7FR-004–FR-007ก.2.1.4, ก.2.1.5, ก.6.1.4, ก.2.2.1
AT-23tests/api/sla-report.test.tsavailability, p95 latency, TTFT p95, error rate, defect เกิน SLA, export Markdown7FR-14112.1, 12.2, 12.5
AT-24tests/api/unavailable.test.tsเปิด/ปิด Unavailable + ข้อความ th/en, /api/status, snapshot6FR-054ก.3.4.3, ก.6.6.1

7.3 E2E tests (tests/e2e, Playwright × 3 viewport)

รหัสไฟล์สถานการณ์FRTOR
E2E-01tests/e2e/public.spec.tsหน้าแรก: โลโก้ มมร. + สลับภาษา + สลับธีม (คงค่าหลังโหลดใหม่) + ไม่มี horizontal scrollFR-150–FR-152ก.3.1.3, ก.3.2.1, 4.3.3
E2E-02tests/e2e/public.spec.ts/tor แสดง 200 ข้อ + กรองสถานะ + ค้นหาFR-1534.4
E2E-03tests/e2e/public.spec.ts/documents เปิดเอกสาร 1 ฉบับ + ดาวน์โหลด .mdFR-1537.5
E2E-04tests/e2e/public.spec.tsหน้า help / privacy-policy / unavailable / 404 แสดงผลได้FR-154, FR-06411.2, ก.1.1.3
E2E-05tests/e2e/public.spec.tsหน้าที่ต้องเข้าสู่ระบบ redirect ไป /loginFR-006ก.6.1.1
E2E-06tests/e2e/public.spec.tsFCP ของหน้าแรก < 5 วินาทีNFR-00112.2
E2E-07tests/e2e/chat.spec.tsregister → consent → login → เข้าหน้าแชตFR-001, FR-002ก.3.3.1
E2E-08tests/e2e/chat.spec.tsรหัสผ่านผิดแสดงข้อผิดพลาดFR-002ก.3.3.1
E2E-09tests/e2e/chat.spec.tsMock OAuth: Gmail (โหมดสาธิต) → เลือกบัญชี → เข้าสู่ระบบFR-003ก.3.3.2
E2E-10tests/e2e/chat.spec.tsถาม → อ้างอิง 3 รายการ + Expand All → บทสรุปมี citation → modal → 👍 → RAG Trace → ประวัติFR-010–FR-016ก.3.6.1–ก.3.6.3, ก.3.8.1, ก.3.5.1
E2E-11tests/e2e/chat.spec.tsคำถามต้องห้ามถูกปฏิเสธพร้อมเหตุผล (การเมือง / ใช่-ไม่ใช่)FR-042, FR-035ก.4.4.3, ก.4.5.3
E2E-12tests/e2e/chat.spec.tsFCP ของหน้าแชต < 5 วินาทีNFR-00112.2
E2E-13tests/e2e/chat.spec.tsDhamma Talk: สร้าง artifact → แก้ไขใน modal → บันทึก → คำสั่งถัดไปคงข้อความที่แก้FR-020ก.3.7.1–ก.3.7.4
E2E-14tests/e2e/admin.spec.tsทุกหน้าใน Admin เปิดได้ ไม่มี horizontal scrollFR-152ก.6, 4.3.3
E2E-15tests/e2e/admin.spec.tsDashboard: KPI มีค่า + เลือกช่วงเวลา + เทียบช่วงก่อนหน้าFR-120ก.7.1
E2E-16tests/e2e/admin.spec.tsตั้งค่า AI: เปลี่ยนค่า → มีผลทันที → ย้อนกลับด้วย snapshotFR-080ก.6.2.6
E2E-17tests/e2e/admin.spec.tsPrompt: หลายเวอร์ชัน + diff + rollback แล้วคืนค่าเดิมFR-082ก.6.2.4
E2E-18tests/e2e/admin.spec.tsGuardrails: ทดสอบข้อความที่หน้า adminFR-044ก.6.2.5
E2E-19tests/e2e/admin.spec.tsUnavailable: เปิดโหมด → banner แสดงทุกหน้า → ปิดโหมดFR-054ก.3.4.3, ก.6.6.1
E2E-20tests/e2e/admin.spec.tsAudit Log: ตรวจ hash chain = valid + export CSVFR-111, FR-112ก.6.5
E2E-21tests/e2e/admin.spec.tsผู้ใช้: ค้นหา + เปิดรายละเอียดFR-100ก.6.1.2
E2E-22tests/e2e/admin.spec.tsฐานองค์ความรู้: อัปโหลด TXT → job เสร็จ → ค้นเจอ → ลบFR-070, FR-073ก.6.3
E2E-23tests/e2e/admin.spec.tsDefect Log: ความรุนแรงสูง → deadline 24 ชม. → ปิดต้องมีหมายเหตุFR-14012.3, 4.7.8
E2E-24tests/e2e/admin.spec.tsSLA report: ตัวเลขไม่ว่างFR-14112.1–12.5
E2E-25tests/e2e/admin.spec.tsผู้ใช้ทั่วไปเข้า /admin ไม่ได้ และ API ตอบ 403FR-006ก.6.1.1, ก.7.1.3
E2E-26tests/e2e/admin.spec.tsหน้า Backup / Data destruction แสดงสำหรับ SUPER_ADMINFR-142, FR-143ก.1.6.3, 4.11.3

ไฟล์สนับสนุน (ไม่ใช่กรณีทดสอบ): tests/e2e/global-setup.ts, tests/e2e/helpers.ts, tests/helpers/{api,setup,global-setup,empty}.ts, tests/fixtures/kb/* (ไฟล์ตัวอย่าง PDF/DOCX/TEI/TXT และ PDF ไม่มีชั้นข้อความ), tests/unit/expected-clause-ids.json

7.4 สรุป Traceability: FR ที่ยังไม่มีกรณีทดสอบอัตโนมัติโดยตรง

FRสถานะวิธีตรวจทดแทน
FR-060 (purge อัตโนมัติ)endpoint purge-conversations ถูกเรียกใน regression (openapi-coverage) แต่ไม่มีกรณีที่รอ schedulerตรวจด้วย npm run purge:conversations และ audit system
FR-064 (GA หลังยินยอม)ไม่มี E2E เฉพาะการโหลด GAตรวจด้วยตนเองตาม checklist (/documents/test-checklist)
FR-083 (prompts:publish)ไม่มีกรณีทดสอบอัตโนมัติรันสคริปต์แล้วตรวจเวอร์ชันที่ /admin/prompts
FR-145 (logging)ตรวจทางอ้อมผ่าน SLA report (ApiRequestLog)ตรวจ logs/app.log
NFR-002/003/004วัดด้วยสคริปต์ ไม่ใช่ unit test/documents/performance-report, /documents/sla-monthly-report

8. การบริหารข้อบกพร่อง (Defect Management)

หัวข้อแนวปฏิบัติ
เครื่องมือ/admin/defect-log (ตาราง DefectLog) — ส่งออก CSV ได้
ข้อมูลที่บันทึกโมดูล, รายละเอียด, ความรุนแรง, ผู้แจ้ง, เวลาที่มหาวิทยาลัยแจ้ง (เริ่มนับ SLA), ผู้รับผิดชอบ, ระยะที่พบ (SIT/UAT), สถานะ, วิธีแก้และมาตรการป้องกันซ้ำ
ระดับความรุนแรงและ SLA (TOR 12.3)critical/high 24 ชม., medium 48 ชม., low 10 วันทำการ (80 ชม.) นับเป็นชั่วโมงทำการ (src/domain/report/sla-policy.ts)
วงจรสถานะopen → in_progress → resolved → closed; ปิด high/critical ต้องมี resolutionNote; การยืนยันของมหาวิทยาลัย (confirmedAt) สิ้นสุดการนับ (TOR 12.4) และคำนวณชั่วโมงเกิน + ค่าปรับโดยประมาณ 0.025%/ชม. ของมูลค่าสัญญา (TOR 10.2)
การทดสอบซ้ำทุกการแก้ไขต้องเพิ่ม/ปรับกรณีทดสอบอัตโนมัติที่ครอบคลุมข้อบกพร่อง แล้วรัน npm test ทั้งชุด (regression)
ช่องโหว่ความปลอดภัยnpm audit High/Critical ถือเป็นข้อบกพร่องระดับ high ต้องแก้ก่อนใช้งานจริง (ก.2.2.2)
เกณฑ์ตรวจรับไม่มี High/Critical ค้าง (การ์ดสรุปในหน้า Defect Log)
การรายงานสรุปใน Progress Report ทุก 30 วัน และรายงาน SLA รายเดือน

9. รายงานผลการทดสอบ

ผลการรันจริงอยู่ในรายงานที่สร้างจากเครื่องมือ (ดูดัชนีที่ /documents/test-reports-index): coverage-report, performance-report, vulnerability-scan-report, pentest-report (บันทึกว่าไม่ได้ดำเนินการรอบนี้), restore-test-report, baseline-evaluation-report, guardrail-security-report, ingestion-report, sla-monthly-report และผล E2E ที่ test-results/e2e-results.json

10. บทบาทและความรับผิดชอบ

บทบาทหน้าที่
QA Leadจัดทำ/ปรับแผน ทบทวน Traceability ติดตาม Defect
Developerเขียน unit/API test คู่กับฟีเจอร์ แก้ข้อบกพร่อง
AI Engineerดูแลชุด Benchmark และการประเมินคุณภาพ AI
คณะกรรมการ/ผู้ใช้ของมหาวิทยาลัยUAT และยืนยันการแก้ไขข้อบกพร่อง