---
generated_at: 2026-02-20 12:00:00
metrics:
  claims_total: 40
  claims_with_evidence: 36
  claims_without_evidence: 4
confidence_derived: 0.90
---

# 根拠レポート：非機能要件テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.90**
  - 根拠あり：36 / 40、根拠なし：4
- 優先レビュー（高）
  1. **NFT-033（ファイルダウンロードテスト）**：合格基準の具体的な数値が根拠なし
  2. **NFT-017（パスインジェクション防止テスト）**：セキュリティ検証範囲が根拠不足
  3. **NFT-032（多言語メッセージ切り替えテスト）**：対応言語一覧の根拠なし
  4. **NFT-036（feature要件バリデーションテスト）**：エラーメッセージの詳細が要確認

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `source/app.d` - メイン起動エントリ、コマンドライン引数処理
- E-02: `source/crash_handler.d` - シグナルハンドラ、バックトレース処理
- E-03: `serverbase/source/served/serverbase.d` - LanguageServerConfig、GC設定、RPCルーティング、エラーハンドリング
- E-04: `serverbase/source/served/utils/fibermanager.d` - FiberManager、joinAll実装
- E-05: `serverbase/source/served/utils/memory.d` - メモリ管理ユーティリティ
- E-06: `serverbase/source/served/utils/async.d` - setTimeout/clearTimeout/parallelMain
- E-07: `lsp/source/served/lsp/jsonrpc.d` - RPCProcessor、MockRPC、JSON-RPCエラーハンドリング
- E-08: `lsp/source/served/lsp/filereader.d` - FileReader（Windows/POSIX実装）、readCodeWithBuffer
- E-09: `lsp/source/served/lsp/textdocumentmanager.d` - Document、TextDocumentManager、Unicode変換
- E-10: `http/source/served/http.d` - downloadFileManual、HTTP通信
- E-11: `source/served/extension.d` - initialize、shutdown、changedConfig、DCD管理、MessageHandler
- E-12: `source/served/types.d` - Configuration、Workspace、IncludedFeatures、requiredLibdparsePageCount
- E-13: `serverbase/source/served/utils/events.d` - EventProcessor、protocolMethod/protocolNotification
- E-14: `serverbase/source/served/utils/serverconfig.d` - ConfigHandler、onConfigChanged
- E-15: `source/served/backend/lazy_workspaced.d` - LazyWorkspaceD、LazyInstance
- E-16: `source/served/utils/trace.d` - TraceData、TraceDataStat、traceStatistics、dumpTraceInfos
- E-17: `.github/workflows/unittest.yml` - CI設定（マルチプラットフォーム、マルチコンパイラ）
- E-18: `dub.json` - ビルド設定、サブパッケージ定義、依存関係
- E-19: `source/served/utils/translate.d` - 多言語翻訳機能（参照のみ）
- E-20: `README.md` - プロジェクト概要、コマンドラインオプション

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 (NFT-001) | LSPリクエスト応答時間テスト：awaitResponseにタイムアウト機構あり | E-07 (jsonrpc.d L411-427: resolveWait with Duration.max timeout) | ○ |
| C-02 (NFT-002) | 大規模ファイル解析レスポンス遅延テスト：50KiB超でdelay変更 | E-11 (extension.d L1157: `document.length > 50 * 1024 ? 500 : 50`) | ○ |
| C-03 (NFT-003) | GC定期収集：30秒ごと収集、5回ごとMinimize | E-03 (serverbase.d L36-39: gcCollectSeconds=30, gcMinimizeTimes=5) | ○ |
| C-04 (NFT-004) | Fiberスタックサイズ：debug=128/release=32ページ | E-12 (types.d L16-18: requiredLibdparsePageCount) | ○ |
| C-05 (NFT-005) | 並行Fiber処理：FiberManagerが順次呼び出し | E-04 (fibermanager.d L49-94: call(), recentlyEnded[128]) | ○ |
| C-06 (NFT-006) | 多数ワークスペース制御：manyProjectsThreshold=6 | E-12 (types.d L114: manyProjectsThreshold=6), E-11 (extension.d L743-774) | ○ |
| C-07 (NFT-007) | RPCメッセージキュー：DList使用 | E-07 (jsonrpc.d L466: DList!RequestMessageRaw messageQueue) | ○ |
| C-08 (NFT-008) | パフォーマンストレース：TraceData構造体 | E-16 (trace.d L61-87: TraceData, L92-118: traceStatistics) | ○ |
| C-09 (NFT-009) | 致命的エラー時の継続稼働：Throwableキャッチ | E-03 (serverbase.d L404-417: gotRequest catches Throwable, shows message) | ○ |
| C-10 (NFT-010) | DCDクラッシュ時の自動復旧 | E-11 (extension.d L960-968: handleCrash for "dcd" component) | ○ |
| C-11 (NFT-011) | クラッシュシグナルハンドリング | E-02 (crash_handler.d L37-40: SIGABRT/SIGALRM/SIGILL等登録) | ○ |
| C-12 (NFT-012) | shutdown後のグレースフルシャットダウン | E-11 (extension.d L1078-1088: shutdown + 1秒timeout), E-03 (serverbase.d L354-363) | ○ |
| C-13 (NFT-013) | 未初期化状態のリクエスト拒否 | E-03 (serverbase.d L149-153: serverInitializeCalled check) | ○ |
| C-14 (NFT-014) | 不正JSON-RPCリクエスト耐性 | E-07 (jsonrpc.d L518-563: parseError/invalidRequest handling) | ○ |
| C-15 (NFT-015) | Content-Length不正値耐性 | E-07 (jsonrpc.d L505-509: contentLength<=0 check) | ○ |
| C-16 (NFT-016) | 標準入出力分離 | E-03 (serverbase.d L12-23: stdin→/dev/null, stdout→stderr) | ○ |
| C-17 (NFT-017) | パスインジェクション防止 | E-12 (types.d L359: startsWith("file://") check) | △ |
| C-18 (NFT-018) | マルチプラットフォームビルド | E-17 (unittest.yml: ubuntu-22.04/windows-latest/macos-latest) | ○ |
| C-19 (NFT-019) | Windowsファイルリーダー互換性 | E-08 (filereader.d L13-79: WindowsStdinReader with WaitForSingleObject) | ○ |
| C-20 (NFT-020) | POSIX selectファイルリーダー互換性 | E-08 (filereader.d L157-253: PosixFileReader with select API) | ○ |
| C-21 (NFT-021) | DMD/LDCコンパイラ互換性 | E-17 (unittest.yml: dmd-latest/ldc-latest matrix), E-18 (dub.json: -lowmem) | ○ |
| C-22 (NFT-022) | LSP仕様準拠 | E-03 (serverbase.d L583-726: unittest with full lifecycle), E-07 (jsonrpc.d unittests) | ○ |
| C-23 (NFT-023) | 非標準エディタ設定互換性 | E-14 (serverconfig.d L151-202: nonStandardConfiguration, startupConfiguration) | ○ |
| C-24 (NFT-024) | Unicode文字処理 | E-09 (textdocumentmanager.d L1252-1308: utf16DecodeUtf8Length, countUTF16Length, extensive unittests) | ○ |
| C-25 (NFT-025) | 部分メッセージ受信耐性 | E-07 (jsonrpc.d L813-852: unittest for unlucky buffering) | ○ |
| C-26 (NFT-026) | 前後空白耐性 | E-07 (jsonrpc.d L855-883: unittest for spec-resiliance with whitespace) | ○ |
| C-27 (NFT-027) | モジュール分離 | E-18 (dub.json: subPackages), E-17 (unittest.yml: separate dub test per package) | ○ |
| C-28 (NFT-028) | Lazy Initialization正常動作 | E-15 (lazy_workspaced.d L51-78: onBeforeAccessComponent lazy loading) | ○ |
| C-29 (NFT-029) | 設定ホットリロード | E-14 (serverconfig.d L256-268: didChangeConfiguration), E-11 (extension.d L59-203: changedConfig) | ○ |
| C-30 (NFT-030) | ログレベル動的変更 | E-01 (app.d L93-108: setLogLevel), E-11 (extension.d L1092-1098: $/setTrace) | ○ |
| C-31 (NFT-031) | ファイルログ出力 | E-01 (app.d L111-117: setLogFile with FileLogger) | ○ |
| C-32 (NFT-032) | 多言語メッセージ切り替え | E-01 (app.d L147-150: lang[0..2]), E-19 (translate.d: 参照のみ) | △ |
| C-33 (NFT-033) | ファイルダウンロード進捗通知 | E-10 (http.d L32-110: downloadFileManual, 1秒ごとFiber.yield) | △ |
| C-34 (NFT-034) | 不完全メッセージ受信時の回復 | E-07 (jsonrpc.d L797-810: unittest for unfinished message) | ○ |
| C-35 (NFT-035) | タイムアウト管理正確性 | E-06 (async.d L73-112: setTimeout/clearTimeout with StopWatch) | ○ |
| C-36 (NFT-036) | feature要件バリデーション | E-01 (app.d L152-163: IncludedFeatures check, return 1) | △ |
| C-37 (NFT-037) | バッチリクエスト処理 | E-07 (jsonrpc.d L520-531: visitJsonArray for batch requests) | ○ |
| C-38 (NFT-038) | ファイル読み取りバッファ動的拡張 | E-08 (filereader.d L376-430: readCodeWithBuffer + unittest) | ○ |
| C-39 (NFT-039) | WindowsFileReaderエラーリトライ | E-08 (filereader.d L115-137: errorCount>10 break) | ○ |
| C-40 (NFT-040) | MockRPCテスト基盤動作確認 | E-07 (jsonrpc.d L679-747: MockRPC implementation + extensive unittests) | ○ |

## 4) 不足情報（Unknown / Missing）
- **NFT-017（パスインジェクション防止）**：`file://`プレフィックスチェックは存在するが、パストラバーサル等の包括的セキュリティ検証の実装は確認できなかった。SLAやセキュリティ要件定義書が存在しない。
  - 候補：セキュリティ要件定義書 / 脅威モデル文書 / ペネトレーションテスト結果
- **NFT-032（多言語メッセージ切り替え）**：`translate.d`は参照のみ確認。対応言語の一覧や翻訳カバレッジについては未確認。
  - 候補：translate.dの完全な実装内容 / 翻訳リソースファイル / 国際化要件定義
- **NFT-033（ファイルダウンロード）**：ダウンロード速度やタイムアウトの具体的な合格基準値がコードから導出できなかった。
  - 候補：SLA定義書 / パフォーマンス要件定義 / ネットワーク要件
- **NFT-036（feature要件バリデーション）**：終了コード1は確認できたが、エラーメッセージの詳細仕様（国際化対応等）は要確認。
  - 候補：エラーメッセージ仕様書 / コマンドラインインターフェース設計書

## 5) リスクフラグ（レビュー観点）
- **リスク2（高）**：セキュリティ関連テストケース（NFT-014～NFT-017）については、コードレベルの入力バリデーションは確認できるが、包括的なセキュリティテスト仕様（ファジング等）は未定義。LSPサーバーという性質上、ネットワーク経由の攻撃面は限定的だが、レビューが必要。
- **リスク1（中）**：性能テストの合格基準値（応答時間の具体的な閾値、メモリ使用量の上限等）がコードから導出できた値は限定的。実測に基づく調整が必要。
- **リスク1（中）**：Fiberスタックサイズ（NFT-004）はlibdparseの大規模ファイルパース要件に依存しており、コメントに「ridiculously high fiber size」とある通り、今後の変更で再調整が必要になる可能性がある。
- **リスク0（低）**：CI/CDパイプライン（unittest.yml）で自動テストが実行されており、互換性テストの多くは自動的にカバーされている。

## 6) レビュアーチェックリスト（最小）
- [ ] 性能テスト（NFT-001～NFT-008）の合格基準値が実運用環境に適合しているか確認
- [ ] GC収集間隔（30秒）とMinimize頻度（5回に1回）が実運用でのメモリ使用パターンに合っているか確認
- [ ] Fiberスタックサイズ（debug=1MiB/release=256KiB）がターゲット環境のメモリ制約内か確認
- [ ] セキュリティテスト（NFT-014～NFT-017）に不足するテストケース（ファジング、バッファオーバーフロー等）がないか確認
- [ ] Unicode処理テスト（NFT-024）のテストデータが十分な文字種をカバーしているか確認
- [ ] 多言語対応（NFT-032）の対応言語一覧と翻訳カバレッジを別途確認
- [ ] 不完全メッセージ（NFT-034）のエッジケース（ゼロバイト送信、超大サイズContent-Length等）がカバーされているか確認
