ai-test-process-mcp 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +101 -90
- package/dist/prompts/index.js +5 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/testPlanInterview.js +101 -0
- package/dist/prompts/testPlanInterview.js.map +1 -0
- package/dist/resources/index.js +14 -0
- package/dist/resources/index.js.map +1 -1
- package/dist/resources/iso29119.js +15 -0
- package/dist/resources/iso29119.js.map +1 -1
- package/dist/resources/testPlanTemplate.js +394 -0
- package/dist/resources/testPlanTemplate.js.map +1 -0
- package/dist/server.js +3 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/generateTestPlan.js +383 -52
- package/dist/tools/generateTestPlan.js.map +1 -1
- package/package.json +50 -46
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Hashi_Kazu
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Hashi_Kazu
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,90 +1,101 @@
|
|
|
1
|
-
# ai-test-process-mcp
|
|
2
|
-
|
|
3
|
-
AIによるテストプロセス支援MCPサーバー。
|
|
4
|
-
|
|
5
|
-
**Phase 1(実装済み)**: テスト計画書(ISO/IEC/IEEE 29119-3
|
|
6
|
-
**将来構想**: テスト設計・レビュー・品質ゲート・テストメトリクス・改善提案を段階的に追加。
|
|
7
|
-
|
|
8
|
-
## セットアップ
|
|
9
|
-
|
|
10
|
-
```bash
|
|
11
|
-
npm install
|
|
12
|
-
npm run build
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## 提供する機能
|
|
16
|
-
|
|
17
|
-
### Resource: `iso29119://test-plan/structure`
|
|
18
|
-
|
|
19
|
-
ISO/IEC/IEEE 29119-3のテスト計画15章立て(Introduction〜Approvals)を構造化データ(JSON
|
|
20
|
-
|
|
21
|
-
###
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
{
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
1
|
+
# ai-test-process-mcp
|
|
2
|
+
|
|
3
|
+
AIによるテストプロセス支援MCPサーバー。
|
|
4
|
+
|
|
5
|
+
**Phase 1(実装済み)**: テスト計画書(ISO/IEC/IEEE 29119-3準拠15章構成)の日本語ドラフト生成、および質問形式でのコンテキスト収集ガイド。
|
|
6
|
+
**将来構想**: テスト設計・レビュー・品質ゲート・テストメトリクス・改善提案を段階的に追加。
|
|
7
|
+
|
|
8
|
+
## セットアップ
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install
|
|
12
|
+
npm run build
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 提供する機能
|
|
16
|
+
|
|
17
|
+
### Resource: `iso29119://test-plan/structure`
|
|
18
|
+
|
|
19
|
+
ISO/IEC/IEEE 29119-3のテスト計画15章立て(Introduction〜Approvals)を構造化データ(JSON)として公開する。各セクションに日本語見出し(`titleJa`)を併記。
|
|
20
|
+
|
|
21
|
+
### Resource: `testplan://template/standard`
|
|
22
|
+
|
|
23
|
+
テスト計画書テンプレート(ISO/IEC/IEEE 29119-3準拠15章構成)の構造データ(JSON)を公開する。各セクションの見出し・必須フラグ・ISO29119対応(`isoRef`)・入力マッピング(`fieldKey`)に加え、固定リファレンス(テストタイプ・カタログ、インシデントランク、判定ステータス、標準メトリクス等)を含む。
|
|
24
|
+
|
|
25
|
+
### Tool: `gen_test_plan`
|
|
26
|
+
|
|
27
|
+
プロジェクト情報(`projectName`, `scope` は必須。`objectives`, `risks`, `scheduleConstraints`, `team`, `testItems`, `stakeholders`, `glossary` など多数の任意項目)を入力すると、ISO/IEC/IEEE 29119-3準拠の15章構成に沿った**日本語**Markdown形式のテスト計画書ドラフトを生成する。未入力の項目は `_未記入_`(必須項目は `_未記入(必須)_`)として明示される。テストタイプ説明・インシデントランク等の固定リファレンスは常に出力される。
|
|
28
|
+
|
|
29
|
+
### Prompt: `test_plan_interview`
|
|
30
|
+
|
|
31
|
+
質問形式でテスト計画書のコンテキストを収集するためのガイド。テンプレートの必須項目を中心に、ユーザーへ順に質問して回答を集め、`gen_test_plan` を呼び出すようアシスタントを誘導する。任意引数 `projectName` を受け取る。
|
|
32
|
+
|
|
33
|
+
## コマンド
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm run dev # tsc --watch
|
|
37
|
+
npm start # node dist/server.js(stdio transport)
|
|
38
|
+
npm test # vitest run
|
|
39
|
+
npm run inspect # build後、MCP Inspectorを起動して動作確認
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 動作確認(CLI)
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npx @modelcontextprotocol/inspector --cli node dist/server.js --method resources/list
|
|
46
|
+
npx @modelcontextprotocol/inspector --cli node dist/server.js --method tools/list
|
|
47
|
+
npx @modelcontextprotocol/inspector --cli node dist/server.js --method prompts/list
|
|
48
|
+
npx @modelcontextprotocol/inspector --cli node dist/server.js --method tools/call \
|
|
49
|
+
--tool-name gen_test_plan \
|
|
50
|
+
--tool-arg projectName="ECサイト" \
|
|
51
|
+
--tool-arg scope="決済とログイン機能"
|
|
52
|
+
npx @modelcontextprotocol/inspector --cli node dist/server.js --method prompts/get \
|
|
53
|
+
--prompt-name test_plan_interview --prompt-args projectName="ECサイト"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 実クライアントへの登録例(Claude Desktop / Claude Code)
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"mcpServers": {
|
|
61
|
+
"ai-test-process-mcp": {
|
|
62
|
+
"command": "node",
|
|
63
|
+
"args": ["<repo-path>/dist/server.js"]
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
npm公開後は、リポジトリをローカルにcloneしなくても `npx` 経由で起動できる(`.vscode/mcp.json` の例)。
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"servers": {
|
|
74
|
+
"ai-test-process-mcp": {
|
|
75
|
+
"command": "npx",
|
|
76
|
+
"args": ["-y", "ai-test-process-mcp"]
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## 公開手順(メンテナ向け)
|
|
83
|
+
|
|
84
|
+
1. `npm login`(npmjs.comのアカウントで認証)
|
|
85
|
+
2. `npm run build`(`npm publish` 実行時は `prepublishOnly` フックにより自動実行されるため、手動実行は任意)
|
|
86
|
+
3. `npm publish`
|
|
87
|
+
|
|
88
|
+
公開後の接続方式(stdio)は変わらない。MCPレジストリ(`server.json` / `mcp-publisher`)への登録は本手順の対象外で、将来の別タスクとして扱う。
|
|
89
|
+
|
|
90
|
+
## 将来機能の追加方法
|
|
91
|
+
|
|
92
|
+
新しい機能(テスト設計・レビュー・品質ゲート・テストメトリクス・改善提案)を追加する際は、以下のパターンに従う:
|
|
93
|
+
|
|
94
|
+
1. `src/resources/<name>.ts` — 必要な参照データ(構造化データ)を定義
|
|
95
|
+
2. `src/tools/<name>.ts` — zod入力スキーマ + 純粋なレンダリング関数 + `registerXxxTool()`
|
|
96
|
+
3. `src/resources/index.ts` / `src/tools/index.ts` にそれぞれ1行登録を追加
|
|
97
|
+
4. `test/<name>.test.ts` でレンダリング関数を単体テスト
|
|
98
|
+
|
|
99
|
+
`server.ts` 本体は変更不要。プラグインローダーやレジストリのような抽象化は、モジュール数が増えて明示的な登録リストが煩雑になるまで導入しない。
|
|
100
|
+
|
|
101
|
+
詳細は [AGENTS.md](./AGENTS.md) と [docs/ai/project-overview.md](./docs/ai/project-overview.md) を参照。
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,+BAA+B,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { testPlanTemplate } from "../resources/testPlanTemplate.js";
|
|
3
|
+
// 質問形式でのコンテキスト収集用プロンプト。
|
|
4
|
+
// テンプレート構造データ(titleJa + guidance)から設問を自動生成し、
|
|
5
|
+
// アシスタントがユーザーに順に質問して gen_test_plan を呼ぶよう誘導する。
|
|
6
|
+
// fieldKey → gen_test_plan の入力キーの対応メモ(設問に添えて収集漏れを防ぐ)。
|
|
7
|
+
const fieldHint = {
|
|
8
|
+
scope: "scope(必須)/ objectives[](任意)",
|
|
9
|
+
references: "references[]{name, author, version, receivedDate, note} / referenceDocs[]{name, description}",
|
|
10
|
+
background: "background{current, concerns}",
|
|
11
|
+
testLevels: "testLevels[]",
|
|
12
|
+
testItems: "testItems[]{name, summary} / systemOverview{name, users, purpose, detail, devType}",
|
|
13
|
+
selectedTestTypes: "selectedTestTypes[](テストタイプ名の配列)",
|
|
14
|
+
featuresToTest: "featuresToTest[]",
|
|
15
|
+
featuresNotToTest: "featuresNotToTest[]",
|
|
16
|
+
risks: "risks[]{description, impact, mitigation}",
|
|
17
|
+
testTechniques: "testTechniques[]{testType, approach, technique}",
|
|
18
|
+
testPeriod: "testPeriod",
|
|
19
|
+
scheduleConstraints: "scheduleConstraints{startDate, endDate, milestones}",
|
|
20
|
+
deliverables: "deliverables[]",
|
|
21
|
+
startCriteria: "startCriteria / endCriteria",
|
|
22
|
+
suspensionCriteria: "suspensionCriteria",
|
|
23
|
+
completionCriteria: "completionCriteria[]",
|
|
24
|
+
passFailCriteria: "passFailCriteria",
|
|
25
|
+
metricsNote: "metricsNote",
|
|
26
|
+
environment: "environment",
|
|
27
|
+
testDataRequirements: "testDataRequirements[]{description, owner, period}",
|
|
28
|
+
team: "team[]{role, name, responsibilities}",
|
|
29
|
+
stakeholders: "stakeholders[]{role, name, contact}",
|
|
30
|
+
assumptions: "assumptions[] / constraints[]",
|
|
31
|
+
glossary: "glossary[]{term, definition}",
|
|
32
|
+
approvers: "approvers[]",
|
|
33
|
+
notes: "notes",
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* テンプレート構造から質問形式のインタビュー指示文を生成する純関数。
|
|
37
|
+
* 必須(*)セクションを中心に、章ごとに設問を並べる。
|
|
38
|
+
*/
|
|
39
|
+
export function buildInterviewPrompt(template = testPlanTemplate, projectName) {
|
|
40
|
+
const lines = [];
|
|
41
|
+
const target = projectName?.trim() ? `「${projectName.trim()}」` : "対象システム";
|
|
42
|
+
lines.push(`あなたはテスト計画づくりの聞き手です。${target}のテスト計画書ドラフトを作成するため、` +
|
|
43
|
+
`以下の項目についてユーザーに1〜3項目ずつ順に質問し、回答を集めてください。`);
|
|
44
|
+
lines.push("");
|
|
45
|
+
lines.push("進め方:");
|
|
46
|
+
lines.push("- 必須(★)の項目を優先し、一度に多く聞きすぎない。");
|
|
47
|
+
lines.push("- ユーザーが「不明」「後で」と答えた項目はスキップしてよい(未記入として扱われる)。");
|
|
48
|
+
lines.push("- ひととおり集まったら、収集した回答を gen_test_plan ツールの引数にマッピングして呼び出し、" +
|
|
49
|
+
"テスト計画書ドラフトを生成する。");
|
|
50
|
+
lines.push("- projectName と scope は必須。最低限この2つは必ず確認する。");
|
|
51
|
+
lines.push("");
|
|
52
|
+
lines.push("## 質問項目");
|
|
53
|
+
lines.push("");
|
|
54
|
+
let currentChapter = "";
|
|
55
|
+
for (const section of template.sections) {
|
|
56
|
+
if (section.level === 1) {
|
|
57
|
+
currentChapter = `${section.no} ${section.titleJa}`;
|
|
58
|
+
// 章見出しでも、子を持たず入力に対応する(fieldKey あり)章は設問化する。
|
|
59
|
+
if (!section.fieldKey)
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
// 入力に対応する(fieldKey あり)セクションを設問化する。
|
|
63
|
+
if (!section.fieldKey)
|
|
64
|
+
continue;
|
|
65
|
+
const star = section.required ? "★" : "・";
|
|
66
|
+
const hint = fieldHint[section.fieldKey] ?? section.fieldKey;
|
|
67
|
+
const guidance = section.guidance ? ` — ${section.guidance}` : "";
|
|
68
|
+
const label = section.level === 1
|
|
69
|
+
? `${section.no} ${section.titleJa}`
|
|
70
|
+
: `${currentChapter} / ${section.no} ${section.titleJa}`;
|
|
71
|
+
lines.push(`${star} [${label}]${guidance}`);
|
|
72
|
+
lines.push(` (収集先: ${hint})`);
|
|
73
|
+
}
|
|
74
|
+
lines.push("");
|
|
75
|
+
lines.push("上記の質問が終わったら gen_test_plan を呼び出してください。未収集の必須項目は " +
|
|
76
|
+
"テスト計画書上で「未記入(必須)」と明示されます。");
|
|
77
|
+
return lines.join("\n");
|
|
78
|
+
}
|
|
79
|
+
export function registerTestPlanInterviewPrompt(server) {
|
|
80
|
+
server.registerPrompt("test_plan_interview", {
|
|
81
|
+
title: "Test Plan Interview",
|
|
82
|
+
description: "質問形式でテスト計画書のコンテキストを収集するためのガイド。テンプレートの必須項目を中心に、ユーザーへ順に質問し gen_test_plan を呼ぶよう誘導する。",
|
|
83
|
+
argsSchema: {
|
|
84
|
+
projectName: z
|
|
85
|
+
.string()
|
|
86
|
+
.optional()
|
|
87
|
+
.describe("テスト対象システム/プロジェクト名(分かっていれば)"),
|
|
88
|
+
},
|
|
89
|
+
}, (args) => ({
|
|
90
|
+
messages: [
|
|
91
|
+
{
|
|
92
|
+
role: "user",
|
|
93
|
+
content: {
|
|
94
|
+
type: "text",
|
|
95
|
+
text: buildInterviewPrompt(testPlanTemplate, args.projectName),
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=testPlanInterview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testPlanInterview.js","sourceRoot":"","sources":["../../src/prompts/testPlanInterview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGpE,wBAAwB;AACxB,6CAA6C;AAC7C,8CAA8C;AAE9C,sDAAsD;AACtD,MAAM,SAAS,GAA2B;IACxC,KAAK,EAAE,6BAA6B;IACpC,UAAU,EAAE,8FAA8F;IAC1G,UAAU,EAAE,+BAA+B;IAC3C,UAAU,EAAE,cAAc;IAC1B,SAAS,EAAE,oFAAoF;IAC/F,iBAAiB,EAAE,iCAAiC;IACpD,cAAc,EAAE,kBAAkB;IAClC,iBAAiB,EAAE,qBAAqB;IACxC,KAAK,EAAE,0CAA0C;IACjD,cAAc,EAAE,iDAAiD;IACjE,UAAU,EAAE,YAAY;IACxB,mBAAmB,EAAE,qDAAqD;IAC1E,YAAY,EAAE,gBAAgB;IAC9B,aAAa,EAAE,6BAA6B;IAC5C,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,sBAAsB;IAC1C,gBAAgB,EAAE,kBAAkB;IACpC,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,oBAAoB,EAAE,oDAAoD;IAC1E,IAAI,EAAE,sCAAsC;IAC5C,YAAY,EAAE,qCAAqC;IACnD,WAAW,EAAE,+BAA+B;IAC5C,QAAQ,EAAE,8BAA8B;IACxC,SAAS,EAAE,aAAa;IACxB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAA6B,gBAAgB,EAC7C,WAAoB;IAEpB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE1E,KAAK,CAAC,IAAI,CACR,sBAAsB,MAAM,qBAAqB;QAC/C,wCAAwC,CAC3C,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CACR,wDAAwD;QACtD,kBAAkB,CACrB,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACxB,cAAc,GAAG,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpD,2CAA2C;YAC3C,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,SAAS;QAClC,CAAC;QACD,mCAAmC;QACnC,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,SAAS;QAChC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC;QAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,MAAM,KAAK,GACT,OAAO,CAAC,KAAK,KAAK,CAAC;YACjB,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE;YACpC,CAAC,CAAC,GAAG,cAAc,MAAM,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,KAAK,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,iDAAiD;QAC/C,2BAA2B,CAC9B,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC/D,MAAM,CAAC,cAAc,CACnB,qBAAqB,EACrB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,mFAAmF;QACrF,UAAU,EAAE;YACV,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,4BAA4B,CAAC;SAC1C;KACF,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACT,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,oBAAoB,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC;iBAC/D;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
|
package/dist/resources/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { iso29119TestPlanStructure } from "./iso29119.js";
|
|
2
|
+
import { testPlanTemplate } from "./testPlanTemplate.js";
|
|
2
3
|
export function registerResources(server) {
|
|
3
4
|
server.registerResource("iso29119-test-plan-structure", "iso29119://test-plan/structure", {
|
|
4
5
|
title: "ISO 29119 Test Plan Structure",
|
|
@@ -13,5 +14,18 @@ export function registerResources(server) {
|
|
|
13
14
|
},
|
|
14
15
|
],
|
|
15
16
|
}));
|
|
17
|
+
server.registerResource("test-plan-template", "testplan://template/standard", {
|
|
18
|
+
title: "Test Plan Template",
|
|
19
|
+
description: "Structural reference for the test plan template: ISO/IEC/IEEE 29119-3 conformant 15 chapters with sub-sections, required flags, ISO 29119 cross-references, and input field mappings.",
|
|
20
|
+
mimeType: "application/json",
|
|
21
|
+
}, async (uri) => ({
|
|
22
|
+
contents: [
|
|
23
|
+
{
|
|
24
|
+
uri: uri.href,
|
|
25
|
+
mimeType: "application/json",
|
|
26
|
+
text: JSON.stringify(testPlanTemplate, null, 2),
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
}));
|
|
16
30
|
}
|
|
17
31
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,gBAAgB,CACrB,8BAA8B,EAC9B,gCAAgC,EAChC;QACE,KAAK,EAAE,+BAA+B;QACtC,WAAW,EACT,0IAA0I;QAC5I,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACd,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,IAAI,EAAE,CAAC,CAAC;aACzD;SACF;KACF,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,oBAAoB,EACpB,8BAA8B,EAC9B;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,uLAAuL;QACzL,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACd,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;aAChD;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -7,6 +7,7 @@ export const iso29119TestPlanStructure = {
|
|
|
7
7
|
{
|
|
8
8
|
id: "introduction",
|
|
9
9
|
title: "Introduction",
|
|
10
|
+
titleJa: "はじめに",
|
|
10
11
|
standardRef: "§4.2.1",
|
|
11
12
|
description: "Purpose, background, and references for the test plan.",
|
|
12
13
|
requiredFields: ["purpose", "background", "references"],
|
|
@@ -14,6 +15,7 @@ export const iso29119TestPlanStructure = {
|
|
|
14
15
|
{
|
|
15
16
|
id: "test-items",
|
|
16
17
|
title: "Test Items",
|
|
18
|
+
titleJa: "テスト対象",
|
|
17
19
|
standardRef: "§4.2.2",
|
|
18
20
|
description: "The items (software, systems, features) that are the object of testing.",
|
|
19
21
|
requiredFields: ["itemsUnderTest", "versionOrRelease"],
|
|
@@ -21,6 +23,7 @@ export const iso29119TestPlanStructure = {
|
|
|
21
23
|
{
|
|
22
24
|
id: "features-to-be-tested",
|
|
23
25
|
title: "Features to be Tested",
|
|
26
|
+
titleJa: "テスト対象機能",
|
|
24
27
|
standardRef: "§4.2.3",
|
|
25
28
|
description: "Features or functions that are within scope of the testing effort.",
|
|
26
29
|
requiredFields: ["featureList"],
|
|
@@ -28,6 +31,7 @@ export const iso29119TestPlanStructure = {
|
|
|
28
31
|
{
|
|
29
32
|
id: "features-not-to-be-tested",
|
|
30
33
|
title: "Features Not to be Tested",
|
|
34
|
+
titleJa: "テスト対象外機能",
|
|
31
35
|
standardRef: "§4.2.4",
|
|
32
36
|
description: "Features or functions explicitly excluded from testing, with rationale.",
|
|
33
37
|
requiredFields: ["excludedFeatureList", "exclusionRationale"],
|
|
@@ -35,6 +39,7 @@ export const iso29119TestPlanStructure = {
|
|
|
35
39
|
{
|
|
36
40
|
id: "approach",
|
|
37
41
|
title: "Test Approach",
|
|
42
|
+
titleJa: "テスト方針",
|
|
38
43
|
standardRef: "§4.2.5",
|
|
39
44
|
description: "The overall testing strategy, techniques, and levels to be applied.",
|
|
40
45
|
requiredFields: ["testLevels", "testTypes", "testTechniques"],
|
|
@@ -42,6 +47,7 @@ export const iso29119TestPlanStructure = {
|
|
|
42
47
|
{
|
|
43
48
|
id: "item-pass-fail-criteria",
|
|
44
49
|
title: "Item Pass/Fail Criteria",
|
|
50
|
+
titleJa: "合否基準",
|
|
45
51
|
standardRef: "§4.2.6",
|
|
46
52
|
description: "Criteria used to determine whether a test item has passed or failed testing.",
|
|
47
53
|
requiredFields: ["passCriteria", "failCriteria"],
|
|
@@ -49,6 +55,7 @@ export const iso29119TestPlanStructure = {
|
|
|
49
55
|
{
|
|
50
56
|
id: "suspension-resumption-criteria",
|
|
51
57
|
title: "Suspension and Resumption Criteria",
|
|
58
|
+
titleJa: "中断・再開基準",
|
|
52
59
|
standardRef: "§4.2.7",
|
|
53
60
|
description: "Conditions that would cause testing to be suspended, and conditions for resuming.",
|
|
54
61
|
requiredFields: ["suspensionCriteria", "resumptionCriteria"],
|
|
@@ -56,6 +63,7 @@ export const iso29119TestPlanStructure = {
|
|
|
56
63
|
{
|
|
57
64
|
id: "test-deliverables",
|
|
58
65
|
title: "Test Deliverables",
|
|
66
|
+
titleJa: "成果物",
|
|
59
67
|
standardRef: "§4.2.8",
|
|
60
68
|
description: "Documents and artifacts produced as output of the testing process.",
|
|
61
69
|
requiredFields: ["deliverableList"],
|
|
@@ -63,6 +71,7 @@ export const iso29119TestPlanStructure = {
|
|
|
63
71
|
{
|
|
64
72
|
id: "testing-tasks",
|
|
65
73
|
title: "Testing Tasks",
|
|
74
|
+
titleJa: "テスト作業",
|
|
66
75
|
standardRef: "§4.2.9",
|
|
67
76
|
description: "The set of tasks necessary to prepare for and perform testing.",
|
|
68
77
|
requiredFields: ["taskList", "taskDependencies"],
|
|
@@ -70,6 +79,7 @@ export const iso29119TestPlanStructure = {
|
|
|
70
79
|
{
|
|
71
80
|
id: "environmental-needs",
|
|
72
81
|
title: "Environmental Needs",
|
|
82
|
+
titleJa: "環境",
|
|
73
83
|
standardRef: "§4.2.10",
|
|
74
84
|
description: "Hardware, software, data, tools, and facilities required for testing.",
|
|
75
85
|
requiredFields: ["hardware", "software", "testData", "tools"],
|
|
@@ -77,6 +87,7 @@ export const iso29119TestPlanStructure = {
|
|
|
77
87
|
{
|
|
78
88
|
id: "responsibilities",
|
|
79
89
|
title: "Responsibilities",
|
|
90
|
+
titleJa: "責任分担",
|
|
80
91
|
standardRef: "§4.2.11",
|
|
81
92
|
description: "Roles and responsibilities of individuals or groups involved in testing.",
|
|
82
93
|
requiredFields: ["roleAssignments"],
|
|
@@ -84,6 +95,7 @@ export const iso29119TestPlanStructure = {
|
|
|
84
95
|
{
|
|
85
96
|
id: "staffing-and-training-needs",
|
|
86
97
|
title: "Staffing and Training Needs",
|
|
98
|
+
titleJa: "要員・教育",
|
|
87
99
|
standardRef: "§4.2.12",
|
|
88
100
|
description: "Staffing requirements and any training needed to carry out the test tasks.",
|
|
89
101
|
requiredFields: ["staffingNeeds", "trainingNeeds"],
|
|
@@ -91,6 +103,7 @@ export const iso29119TestPlanStructure = {
|
|
|
91
103
|
{
|
|
92
104
|
id: "schedule",
|
|
93
105
|
title: "Schedule",
|
|
106
|
+
titleJa: "スケジュール",
|
|
94
107
|
standardRef: "§4.2.13",
|
|
95
108
|
description: "Key dates, milestones, and duration estimates for testing tasks.",
|
|
96
109
|
requiredFields: ["startDate", "endDate", "milestones"],
|
|
@@ -98,6 +111,7 @@ export const iso29119TestPlanStructure = {
|
|
|
98
111
|
{
|
|
99
112
|
id: "risks-and-contingencies",
|
|
100
113
|
title: "Risks and Contingencies",
|
|
114
|
+
titleJa: "リスク・対策",
|
|
101
115
|
standardRef: "§4.2.14",
|
|
102
116
|
description: "Risks that could affect the testing effort, along with mitigation/contingency plans.",
|
|
103
117
|
requiredFields: ["riskList"],
|
|
@@ -105,6 +119,7 @@ export const iso29119TestPlanStructure = {
|
|
|
105
119
|
{
|
|
106
120
|
id: "approvals",
|
|
107
121
|
title: "Approvals",
|
|
122
|
+
titleJa: "承認",
|
|
108
123
|
standardRef: "§4.2.15",
|
|
109
124
|
description: "Names and roles of people who must approve the test plan.",
|
|
110
125
|
requiredFields: ["approverList"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iso29119.js","sourceRoot":"","sources":["../../src/resources/iso29119.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"iso29119.js","sourceRoot":"","sources":["../../src/resources/iso29119.ts"],"names":[],"mappings":"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"}
|