生成AIのチャットモーダル利用が主であるテスト設計者向け
企業によっては、APIが利用できない場面を考慮して公開しています。
今更プロンプト?
と、私も思いましたが、必要な場面やAPIによるコーティングが出来ない事があるため公開しました。
作業に最適な人格モデルを設定して、今回はテスト設計に最適と考えられるモデルにしています。
*最適である前提は私の経験に基づき、数値化しています。
基本スタンスとして、テストパターンの重複を避けるように設計されています。
パラメータまで設計させる事もプロンプトを改良すればできますが、テストケースレビューが面倒な為、筋が良いテストパターンを採用するには最適です。
今回は50項目の作成を指示していますが、好きに変更してください。網羅率95%は狙って設定しています。ハードコーディング的に作成していますが、値を変数に変更される方はお好きにカスタマイズしてください。
o1-preview、o1-mini用に生成していますが、添付ファイルなどで仕様関連の情報を付与させる事で出力精度が上がる形にしています。
将来的な出力精度も考慮しています。
*GPT4o用、内容の解説、他のプロンプトも後日公開予定。更新が待てない方は内容の解説を生成AIにお伝えすれば、分析や評価はしてもらえます。
*プロンプトの一部を抜粋して既にGPT4oで添付ファイルで仕様を付与すると出力効果が上がることは確認しています。
以下のプロンプトのみを投げても効果の良し悪しは感じづらいです。普通に文章で雑にプロンプトを投げるのと、それほど変化はありません。
APIではLatexの利用が困難である為、
今回の手法は利用できませんのであしからず。
*APIを利用したテストケース生成は暇な時に出します。まぁまぁな量になる為。
GenerateTestCases(
Task="50項目のテストケースを生成",
ConsiderationTime={
"Formula": "T_consideration = k_complexity * (|S| + |T|) + k_coverage * (Coverage_goal - Coverage_current)",
"k_complexity": 0.5, # 複雑さに基づく待機時間の係数(例: 0.5秒)
"k_coverage": 0.2, # カバレッジに基づく待機時間の係数(例: 0.2秒)
"Coverage_goal": 0.95 # 目標カバレッジ率(95%)
},
TestCaseGeneration={
"TargetScreens": ["注文画面", "決済画面", "購入完了画面"],
"Functionality": "決済機能",
"UserInterface": "Webブラウザ",
"NumberOfTestCases": 50,
"Columns": [
"TestNo",
"ItemName",
"UIElement",
"TestPurpose", # テストの目的 Q
"Preconditions", # テストデータ、ブラウザ種類など
"ExpectedResult", # 期待結果 P
"Steps" # 手順: PがQを満たすことを確認
],
"Preconditions": {
"TestData": [
"有効なクレジットカード情報",
"無効なクレジットカード情報",
"残高不足の電子マネー",
"ネットワーク接続エラー",
# 他の具体的なテストデータ...
],
"BrowserTypes": [
"Google Chrome 最新版",
"Mozilla Firefox 最新版",
"Safari 最新版",
"Microsoft Edge 最新版"
]
}
},
FormalThinking={
"SpecificationFormalization": {
"Process": "∮Spec → S",
"Method": "形式手法: Z記法 (Z-Notation)"
},
"ModelConstruction": {
"Process": "StateModel(S) → M",
"Method": "状態遷移モデル: UMLステートマシン"
},
"CoverageCriteria": {
"Process": "∮Coverage(M) → C",
"Method": "カバレッジ基準: ペアワイズ法 (Pairwise Testing)",
"CoverageGoal": 0.95 # 目標カバレッジ率を追加
},
"TestCaseExtraction": {
"Process": "M, C → T",
"Method": [
"テストケース抽出: モデルベーステスト (MBT)",
"補完手法: ランダムテスト、N-wise Testing"
]
}
},
CoverageGuideline={
"TotalStates": "|S|",
"PairwiseCoverage": "f_pair(S)",
"ModelBasedCoverage": "f_model(S)",
"RandomTestCoverage": "f_random(S)",
"ExploratoryTestCoverage": "f_exploratory(S)",
"TotalCoverageFormula": "Coverage_total = f_pair(S) + f_model(S) + f_random(S) + f_exploratory(S)",
"CoverageGoal": 0.95 # 目標カバレッジ率を追加
},
PersonalityModel={
"Model": "BigFive",
"Traits": {
"Conscientiousness": 0.9, # 誠実性
"Meticulousness": 0.9, # 几帳面さ
"Openness": 0.7 # 柔軟性
},
"ImpactOnTestGeneration": {
"Conscientiousness": "詳細な手順とカバレッジ基準に基づいたテストケースを生成",
"Openness": "新しいテストケース生成方法を積極的に採用し、柔軟に対応",
"Meticulousness": "細部への徹底した注意を払い、テストケースの品質を向上"
}
},
Mindset={
"AttentionToDetailMindset": {
"Clarity": 1.0,
"Verification": 1.0,
"StepByStep": 1.0,
"DoubleCheck": 1.0,
"Persistence": 0.9
}
},
NonRepetitionRule="forall i, j (i ≠ j) ⇒ TestCase(i) ≠ TestCase(j)", # テストケースの重複を防止
ExecutionProcess=[
{
"Step": "Wait for careful consideration",
"Description": "設計の複雑さとカバレッジに基づいた待機時間を設定",
"Action": "計算された T_consideration 秒間待機",
"ConsiderationFormula": {
"ComplexityWaitTime": "f_complexity(S, T) = k_complexity * (|S| + |T|)",
"CoverageWaitTime": "f_coverage(C) = k_coverage * (Coverage_goal - Coverage_current)",
"TotalWaitTime": "T_consideration = f_complexity(S, T) + f_coverage(C)"
},
"CalculatedWaitTime": "例: T_consideration = 45秒 (複雑さ) + 15秒 (カバレッジ) = 60秒"
},
{
"Step": "Generate test cases",
"Description": "50項目のテストケースを生成",
"Action": [
"Test Input = Input {i}",
"Expected Output = Output {i}",
"Steps = [Validate, Process, Describe]",
"Comments = 各テストケースごとにユニークなコメントを追加"
],
"EfficiencyConsiderations": [
"入力データの再利用を行い、生成の効率を高める",
"既存のテストデータを最大限に活用",
"自動ツールを使用してテストケース作成のスピードを向上"
]
},
{
"Step": "Verify test cases",
"Description": "生成されたテストケースが期待される結果を正確にカバーしているかを検証",
"Action": [
"各テストケースの手順と入力値が仕様に沿っているかを確認",
"期待結果と実際の結果を比較し、誤差がないか確認",
"手順を繰り返し確認し、曖昧さがないかチェック",
"カバレッジ基準に基づき、組み合わせが十分にテストされているかを確認"
],
"VerificationCriteria": [
"全ての機能パスが正常に実行されていること",
"異常入力に対する適切なエラーメッセージが表示されていること",
"目標カバレッジ率(95%)を達成していること"
]
}
],
OutputFormat="Table")