(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025145713
(43)【公開日】2025-10-03
(54)【発明の名称】プログラムの仕様書検証方法、そのシステム及びそのプログラム
(51)【国際特許分類】
G06F 11/36 20060101AFI20250926BHJP
G06F 8/20 20180101ALI20250926BHJP
【FI】
G06F11/36 108
G06F8/20
【審査請求】有
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2024046035
(22)【出願日】2024-03-22
(11)【特許番号】
(45)【特許公報発行日】2024-07-16
(71)【出願人】
【識別番号】524110609
【氏名又は名称】株式会社optima
(74)【代理人】
【識別番号】100108006
【弁理士】
【氏名又は名称】松下 昌弘
(72)【発明者】
【氏名】宮川 健
【テーマコード(参考)】
5B042
5B376
【Fターム(参考)】
5B042HH10
5B042HH14
5B042HH19
5B042HH49
5B376BB11
5B376BC02
5B376BC61
(57)【要約】
【課題】 プログラムの検証を少ない負荷で高精度に行え、且つ不要な警告を抑制できる仕様書検証方法を提供する。
【解決手段】 仕様書データを構文解析し、前記仕様書データのうち変換工程で扱えないデータであり、且つ設計チェック工程の検証処理で使用するヒントデータと、前記変換工程で扱える半構造化テキスト群データとを生成する構文解析工程と、前記半構造化テキスト群データを抽象構文木群データに変換する前記変換工程と、前記抽象構文木群データと、前記ヒントデータとを基に、前記仕様書データの前記検証処理を行う設計チェック工程と をコンピュータが実行する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
仕様書データを構文解析し、前記仕様書データのうち変換工程で扱えないデータであり、且つ設計チェック工程の検証処理で使用するヒントデータと、前記変換工程で扱える半構造化テキスト群データとを生成する構文解析工程と、
前記半構造化テキスト群データを抽象構文木群データに変換する前記変換工程と、
前記抽象構文木群データと、前記ヒントデータとを基に、前記仕様書データの前記検証処理を行う前記設計チェック工程と、
をコンピュータが実行する、
仕様書検証方法。
【請求項2】
前記設計チェック工程は、
前記抽象構文木群データ内に所定のルール違反の記述があるか否かを判定し、当該判定の結果を含む検証レポートを生成する
請求項1に記載の仕様書検証方法。
【請求項3】
前記ルール違反は、
テーブル名又はカラム名のスペルミス又は命名規則違反、テーブル構造の正規化違反、カラムの型指定違反、主キーの定義違反、アンチパターン違反のいずれかである
請求項2に記載の仕様書検証方法。
【請求項4】
前記設計チェック工程は、
前記ルール違反の記述があっても、前記ヒントデータに当該ルール違反が意図的なものであることを示すメモ情報がある場合には、前記ルール違反がない、あるいはルール違反の記述は意図的である旨を示す前記検証レポートを生成する
請求項3に記載の仕様書検証方法。
【請求項5】
前記設計チェック工程は、
前記抽象構文木群データ内のテーブル群全体としての関係や整合性を評価する
請求項4に記載の仕様書検証方法。
【請求項6】
前記設計チェック工程は、
前記抽象構文木群データのテーブルの関係構造をメモリ上に展開し、
特定のテーブル又はカラムに関係する前記ヒントデータを当該テーブル又はカラムに付与し、
テーブル名又はカラム名を評価して命名規則を推定し、前記命名規則に反するテーブル名又はカラム名に対して、命名規則違反を示す情報を付与して
前記検証レポートを生成する
請求項5に記載の仕様書検証方法。
【請求項7】
前記構文解析工程は、学習モデルにより、前記ヒントデータと、前記半構造化テキスト群データとを生成する
請求項5に記載の仕様書検証方法。
【請求項8】
前記設計チェック工程は、前記抽象構文木群データが検証項目の第1の条件を満たしているか否かを判断し、第1の条件を満たしていないと判断した前記検証項目について、当該検証項目に関係する前記ヒントデータを基に第2の条件を満たしているか否か判断し、第2の条件を満たしていると場合には、当該検証項目の条件は満たしていると判断する
請求項6記載の仕様書検証方法。
【請求項9】
前記ヒントデータは、前記仕様書データの備考欄、又は前記仕様書データ以外の部分に記載されている情報である
請求項7に記載の仕様書検証方法。
【請求項10】
前記仕様書データは、人間が読めるアプリケーションプログラムのデータである
請求項8に記載の仕様書検証方法。
【請求項11】
仕様書データを構文解析し、前記仕様書データのうち変換工程で扱えないデータであり、且つ設計チェック工程の検証処理で使用するヒントデータと、前記変換工程で扱える半構造化テキスト群データとを生成する構文解析工程と、
前記半構造化テキスト群データを抽象構文木群データに変換する前記変換工程と、
前記抽象構文木群データと、前記ヒントデータとを基に、前記仕様書データの前記検証処理を行う設計チェック工程と、
をコンピュータに実行させる、
仕様書検証プログラム。
【請求項12】
仕様書データを構文解析し、前記仕様書データのうち変換手段で扱えないデータであり、且つ設計チェック工程の検証処理で使用するヒントデータと、前記変換手段で扱える半構造化テキスト群データとを生成する構文解析手段と、
前記半構造化テキスト群データを抽象構文木群データに変換する前記変換手段と、
前記抽象構文木群データと、前記ヒントデータとを基に、前記仕様書データの前記検証処理を行う設計チェック手段と、
を有する仕様書検証システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムの仕様書検証方法、そのシステム及びそのプログラムに関するものである。
【背景技術】
【0002】
プログラムの仕様書は非常に複雑であり、多くの場合、さまざまな規則、条件、および要件が含まれている。そのため、これらの多様な要素を人的にミスなく適切に検証することは困難であり、膨大な時間を要する。またことは人的には困難である。
また、仕様書データには、意図的に本来使うべきコードにしていない場合があり、そのコードに警告が出てしまうことがある。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
プログラムの仕様書の検証は、プログラムの品質や信頼性を確保する上で重要であり、効果的な検証方法の開発が求められている。
また、不要な警告発生を抑制することが望まれている。
【0005】
本発明はかかる事情に鑑みてなされたものであり、その目的は、プログラムの検証を少ない負荷で高精度に行え、且つ不要な警告を抑制できるプログラムの仕様書検証方法、そのシステム及びそのプログラムを提供することにある。
【課題を解決するための手段】
【0006】
本発明は、仕様書データを構文解析し、前記仕様書データのうち変換工程で扱えないデータであり、且つ設計チェック工程の検証処理で使用するヒントデータと、前記変換工程で扱える半構造化テキスト群データとを生成する構文解析工程と、前記半構造化テキスト群データを抽象構文木群データに変換する前記変換工程と、前記抽象構文木群データと、前記ヒントデータとを基に、前記仕様書データの前記検証処理を行う設計チェック工程と、をコンピュータが実行する、仕様書検証方法である。
【0007】
好適には、前記設計チェック工程は、前記抽象構文木群データ内に所定のルール違反の記述があるか否かを判定し、当該判定の結果を含む検証レポートを生成する。
【0008】
好適には、前記ルール違反は、テーブル名又はカラム名のスペルミス又は命名規則違反、テーブル構造の正規化違反、カラムの型指定違反、主キーの定義違反、アンチパターン違反のいずれかである。
【0009】
好適には、前記設計チェック工程は、前記ルール違反の記述があっても、前記ヒントデータに当該ルール違反が意図的なものであることを示すメモ情報がある場合には、前記ルール違反がない、あるいはルール違反の記述は意図的である旨を示す前記検証レポートを生成する。
【0010】
好適には、前記設計チェック工程は、前記抽象構文木群データ内のテーブル群全体としての関係や整合性を評価する。
【0011】
また、好適には、前記設計チェック工程は、前記抽象構文木群データのテーブルの関係構造をメモリ上に展開し、特定のテーブル又はカラムに関係する前記ヒントデータを当該テーブル又はカラムに付与し、テーブル名又はカラム名を評価して命名規則を推定し、前記命名規則に反するテーブル名又はカラム名に対して、命名規則違反を示す情報を付与して前記検証レポートを生成する。
【0012】
好適には、前記構文解析工程は、学習モデルにより、前記ヒントデータと、前記半構造化テキスト群データとを生成する。
【0013】
好適には、前記設計チェック工程は、前記抽象構文木群データが検証項目の第1の条件を満たしているか否かを判断し、第1の条件を満たしていないと判断した前記検証項目について、当該検証項目に関係する前記ヒントデータを基に第2の条件を満たしているか否か判断し、第2の条件を満たしていると場合には、当該検証項目の条件は満たしていると判断する。
【0014】
好適には、前記ヒントデータは、前記仕様書データの備考欄、又は前記仕様書データ以外の部分に記載されている情報である。
【0015】
好適には、前記仕様書データは、人間が読めるアプリケーションプログラムのデータである。
【0016】
本発明は、仕様書データを構文解析し、前記仕様書データのうち変換工程で扱えないデータであり、且つ設計チェック工程の検証処理で使用するヒントデータと、前記変換工程で扱える半構造化テキスト群データとを生成する構文解析工程と、前記半構造化テキスト群データを抽象構文木群データに変換する前記変換工程と、前記抽象構文木群データと、前記ヒントデータとを基に、前記仕様書データの前記検証処理を行う設計チェック工程と、をコンピュータに実行させる、仕様書検証プログラムである。
【0017】
本発明は、仕様書データを構文解析し、前記仕様書データのうち変換手段で扱えないデータであり、且つ設計チェック工程の検証処理で使用するヒントデータと、前記変換手段で扱える半構造化テキスト群データとを生成する構文解析手段と、前記半構造化テキスト群データを抽象構文木群データに変換する前記変換手段と、前記抽象構文木群データと、前記ヒントデータとを基に、前記仕様書データの前記検証処理を行う設計チェック手段と、を有する仕様書検証システムである。
【発明の効果】
【0018】
本発明によれば、プログラムの検証を少ない負荷で高精度に行え、且つ不要な警告を抑制できるプログラムの仕様書検証方法、そのシステム及びそのプログラムを提供することができる。
【図面の簡単な説明】
【0019】
【
図1】
図1は、本発明の実施形態に係る仕様書検証システムを説明するための図である。
【
図2】
図2は、
図1に示す仕様書検証システム11のハードウェア構成図である。
【
図3】
図3は、
図1及び
図2に示す仕様書検証システム11が実行する処理の流れを説明するためのフローチャート図である。
【
図4】
図4は、
図3に示すステップST14の検証処理を説明するためのフローチャート図である。
【発明を実施するための形態】
【0020】
以下、本発明の実施形態に係る仕様書検証方法、そのシステム及びプログラムについて説明する。
図1は、本発明の実施形態に係る仕様書検証システムを説明するための図である。
図1に示すように、仕様書検証システム11は、例えば、構文解析部15,トランスパイラ21,設計チェック部25を有する。
【0021】
構文解析部15は、仕様書データ13を入力し、当該仕様書データ13を構文解析処理して、ヒントデータ19と、半構造化テキスト群データ17とを生成する。
仕様書データ13は、ワードやエクセル等のアプリケーションデータでもよい。
仕様書データ13は、さまざまな型式のhuman readableな設計書群(よって、さまざまな型式のドキュメントから設計に関係する情報を読み取り、その中から必要な情報を抽出することに主眼がある)。読取能力が最大の要点である。
【0022】
構文解析処理では、例えば、第一段階として字句(トークン)を生成する字句解析を行い、入力文字列は正規表現などによる定義に従い、意味のあるシンボルに分割される。次に、トークンの並びが構文規則に照らして正しい表現となっているかを判定する狭義の構文解析を行う。このため、構文規則を参照して再帰的に規則を適用していく。前述したように、構文規則で表現するのは現実的ではない言語上のルール、たとえば関数定義における仮引数名の重複などがあるので、そういったものへの対処を行う。
【0023】
構文解析部15は、例えば、学習モデルにより、ヒントデータ19と半構造化テキスト群データ17とを生成する。
【0024】
構文解析部15は、ルール違反が意図的なものであることを示すメモ情報がある場合には、当該メモ情報に関する情報をヒントデータ19に含める。当該メモは、仕様書データ13内にあってもよいし、仕様書データ13と関連付けられた部分にあってもよい。
【0025】
ヒントデータ19は、仕様書データのうち変換工程で扱えないデータであり、且つ設計チェック部25の検証処理で使用するデータである。
ヒントデータ19は、例えば、構文解析部15においてカラムの型の記載がない場合にカラム名からその型を推論し、ドメイン(定義域情報)の型がない場合にはドメイン名からその型を推論したことを示す情報である。
【0026】
定義域は、データ管理およびデータモデリング、データベース設計の文脈では、あるデータ要素が値としてとる可能性のある一意な値すべてから構成される、名前付きの有限集合である。 データ型と同じ意味である。単に型と略されることもある。
【0027】
例えば、構文解析部15は、「birthday」のようなカラム名がある場合、型は日付型と推定できるが、さらにドメイン情報として過去日付であることを推定する。また、「firstname」のようなカラム名がある場合、型は可変長文字列であると推定できるが、さらにドメイン情報として日本人の姓としての文字列であることを推定する。
構文解析部15は、例えば、表形式その他のテーブル定義をSQL文に翻訳し、半構造テキスト群データ17に出力する。その際、SQL文に含めることのできないメタ情報や、任意の設計書に記述された設計方針や例外事項をヒントデータ19に出力する。基本的には逐次処理であり、1パスで処理される。
【0028】
半構造化テキスト群データ17は、トランスパイラ21で扱えるデータである。
半構造化テキスト群データ17は、テーブル定義およびインデックス定義を示している。
【0029】
構文解析部15は、学習モデルにより、不特定の書式の設計書から、テーブル/カラム/インデックスの定義を読み取り、抽出して半構造化テキスト群データ17に出力し、また、半構造化テキスト群データ17には出力できないメタ情報(設計書上に明記はされていない事項を「推定して」半構造化テキスト群データ17に出力に出力した場合の、その事実等)や例外情報(特定の単語のスペルミスをあえて許容する等)をヒントデータ19に出力する。
(1)テーブル名、カラム名のスペルミス検出については、スペルミスであることは既知の問題であるが、あえてこのスペルミスは修正しないという決断をしている場合がある。その決断が仕様書データ13のどこか(例えば、備考欄、仕様書データ13以外の別紙等)にメモ情報として記載があった場合、当該テーブル名、カラム名についてスペルミスを指摘しない旨のヒントデータ19を出力する。
【0030】
(2)テーブル名、カラム名の命名規則については、意図的に命名規則を違反するケースがあり、この意図について設計書のどこかにメモ情報として記載があった場合、当該テーブル名、カラム名について命名規則違反を指摘しない旨のヒントデータ19を出力する。
(3)テーブル構造の正規化については、意図的に正規化を崩すケースがあり、この意図について設計書のどこかにメモ情報として記載があった場合、当該テーブルについて正規化違反を指摘しない旨のヒントデータ19を出力する。
【0031】
(4)型指定については、通常とは異なる型指定を意図的に選択するケースがあり、この意図について設計書のどこかにメモ情報として記載があった場合、当該カラムについて型指定違反を指摘しない旨のヒントデータ19を出力する
(5)主キーについては、意図的に主キーを定義しないケースがあり、この意図について設計書のどこかにメモ情報として記載があった場合、当該テーブルについて主キー定義なしを指摘しない旨のヒントデータ19を出力する。
【0032】
(6-1)ファントムファイルアンチパターンについて、バックアップ/リストア方式を別途定めている等、考慮すべき点を考慮していることが設計書のどこかにメモ情報として記載があった場合、当該カラムについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。
(6-2)サーティワンフレーバーアンチパターンについて、意図してenumを使用していることが設計書のどこかにメモ情報として記載があった場合、当該カラムについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。
【0033】
(6-3)ラウンディングエラーアンチパターンについて、意図してFLOATを使用していることが設計書のどこかにメモ情報として記載があった場合、当該カラムについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。
(6-4)メタデータトリブルアンチパターンについて、意図して年度別等でテーブル分割していることが設計書のどこかにメモ情報として記載があった場合、当該カラムについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。
【0034】
(6-5)マルチカラムアトリビュートアンチパターンについて、意図して同一名称のカラムのn個同一テーブル内に定義していることが設計書のどこかにメモ情報として記載があった場合、当該カラムについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。
(6-6)ポリモーフィック関連アンチパターンについて、意図してポリモーフィック関連を定義していることが設計書のどこかにメモ情報として記載があった場合、当該テーブルについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。
【0035】
(6-7)Entity Attribute Value アンチパターンについて、意図して Entity Attribute Value を定義していることが設計書のどこかにメモ情報として記載があった場合、当該テーブルについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。(ただし、このヒントデータ19は、特別に出力するように設定した場合のみとし、デフォルトでは出力しないものとする。EAVはRDBMSのコンセプトに反するものであり、必要ならばNoSQLを用いることが自然である...RDBMS製品の範疇でも、JSON型等を使う方法がある。)
【0036】
(6-8) Keyless Entry アンチパターンについて、意図して Keyless Entry を定義していることが設計書のどこかにメモ情報として記載があった場合、当該テーブルについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。(ただし、このヒントデータ19は、特別に出力するように設定した場合のみとし、デフォルトでは出力しないものとする。 Keyless Entry はRDBMSのコンセプトに反するものであるので、あえてKeyless Entryを選択している場合には現場で問題が発生している可能性が高い。)
【0037】
(6―9)Id Requiredアンチパターンについて、意図してId Requiredを定義していることが設計書のどこかにメモ情報として記載があった場合、当該テーブルについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。
(6-10)ナイーブツリーアンチパターンについて、意図してナイーブツリーを定義していることが設計書のどこかにメモ情報として記載があった場合、当該テーブルについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。
【0038】
(6-11)ジェイウォークアンチパターンについて、意図してジェイウォークを定義していることが設計書のどこかにメモ情報として記載があった場合、当該テーブルについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。
(6-12)安易な論理削除フラグアンチパターンについて、意図して論理削除フラグを定義していることが設計書のどこかにメモ情報として記載があった場合、当該テーブルについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。
【0039】
(6-13)交差テーブルの安易な命名アンチパターンについて、意図して交差テーブルの安易な命名を定義していることが設計書のどこかに記載があった場合、当該テーブルについてアンチパターン違反を指摘しない旨のヒントデータ19を出力する。
【0040】
トランスパイラ21は、構文解析部15から入力した半構造化テキスト群データ23を抽象構文木群データに変換する。
抽象構文木群データ23は、通常の構文木(具象構文木あるいは解析木とも言う)から、言語の意味に関係ない情報を取り除き、意味に関係ある情報のみを取り出した(抽象した)木構造の木である。
理論的には、有限なラベル付き有向木である。また、演算子と変数や定数といったオペランドから成る数式などのようなものに対する抽象構文木を例にすると、分枝点は演算子、葉はオペランド(変数や定数)である。
【0041】
設計チェック部25は、トランスパイラ21から入力した抽象構文木群データと、構文解析部15から入力したヒントデータとを基に、仕様書データの検証処理を行う。
【0042】
設計チェック部25は、トランスパイラ21が生成した抽象構文木群データ23が検証項目の第1の条件(ルール違反がないという条件)を満たしているか否かを判断する。
次に、設計チェック部25は、第1の条件を満たしていないと判断した検証項目について、当該検証項目に関係するヒントデータ19を基に第2の条件を満たしているか否か判断する。そして、設計チェック部25は、第2の条件を満たしていると場合には、当該検証項目の条件は満たしていると判断する。
【0043】
設計チェック部25は、ヒントデータ19の全部又は一部を含めて検証レポート27を生成する。
設計チェック部25は、上述したように、抽象構文木群データ23内に所定のルール違反の記述があるか否かを判定し、当該判定の結果を含む検証レポート27を生成する。
【0044】
当該ルール違反は、テーブル名又はカラム名のスペルミス又は命名規則違反、テーブル構造の正規化違反、カラムの型指定違反、主キーの定義違反、アンチパターン違反のいずれかである。
【0045】
設計チェック部25は、上記ルール違反の記述があっても、ヒントデータ19に当該ルール違反が意図的なものであることを示すメモ情報がある場合には、前記ルール違反がない、あるいはルール違反の記述は意図的である旨を示す検証レポート27を生成する。
【0046】
設計チェック部25は、抽象構文木群データ23内のテーブル群全体としての関係や整合性を評価する。
具体的には、設計チェック部25は、抽象構文木群データ23のテーブルの関係構造をメモリ上に展開する。そして、特定のテーブル又はカラムに関係する前記ヒントデータを当該テーブル又はカラムに付与した検証レポート27を生成する。
また、設計チェック部25は、テーブル名又はカラム名を評価して命名規則を推定し、命名規則に反するテーブル名又はカラム名に対して、命名規則違反を示す情報を付与した検証レポート27を生成する。
【0047】
設計チェック部25は、抽象構文木群データ23とヒントデータ19を基に、検証レポート27を生成する。よってリジッドに型式が定められたmachine readableなデータであり、これらを解釈して適切な警告メッセージを出力することができる。より有益な警告メッセージを出力し、ノイズとなるような無益な警告メッセージを抑止するところを継続的に向上させる機能を持つ。
【0048】
設計チェック部25の具体的処理は、以下である。
(1) 抽象構文木(AST)群23に含まれるテーブル名、カラム名についてスペルミスを検出する。検出したスペルミスについて、ヒントデータ19に警告を抑止する指定がないなら、スペルミスをレポートする。
(2)抽象構文木群データ23に含まれるテーブル名、カラム名について命名規則を推定する。(例: UserName=CamelCase, user_name=snake_case, user-name=kebab-case)検出した命名規則に反するテーブル名、カラム名について、ヒントデータ19に警告を抑止する指定がないなら、命名規則違反をレポートする。
【0049】
(3)抽象構文木群データ23に含まれる各テーブルのカラム定義について正規化違反を検出する。検出した正規化違反について、ヒントデータ19に警告を抑止する指定がないなら、正規化違反をレポートする。
(4)抽象構文木群データ23に含まれる各テーブルのカラム定義について型指定を検出する。検出した型指定違反について、ヒントデータ19に警告を抑止する指定がないなら、型指定違反をレポートする。
(5)抽象構文木群データ23に含まれる各テーブルに主キーが未定義のとき、ヒントデータ19に警告を抑止する指定がないなら、主キー定義漏れをレポートする。
【0050】
以下、アンチパターンについて:
(6-1)抽象構文木群データ23に含まれるテーブル名、カラム名から、当該カラムがファントムファイルアンチパターンに該当すると推定できるとき、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
(6-2)抽象構文木群データ23に含まれるカラム定義の中にenumが使用されている場合、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
(6-3)抽象構文木群データ23に含まれるカラム定義の中に浮動小数点型が使用されている場合、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
【0051】
(6-4)抽象構文木群データ23に含まれるテーブル定義の中に年度違い等の同一構造のテーブルが定義されている場合、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
(6-5)抽象構文木群データ23に含まれるテーブル定義の中に、同一定義のカラムが連続的に使用されている場合、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
【0052】
(6-6)抽象構文木群データ23に含まれるテーブル群の関係の中に、ポリモーフィック関連が使用されている場合、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
(6-7)抽象構文木群データ23に含まれるテーブルの中に、 Entity Attribute Value が使用されている場合、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
【0053】
(6-8)抽象構文木群データ23に含まれるテーブル群の関係の中に、外部キーがあるべき個所に外部キーが定義されていない場合、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
(6-9)抽象構文木群データ23に含まれるテーブルの中に、 主キーとしてidというカラム名が盲目的に使用されていると推定できる場合、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
(6-10)抽象構文木群データ23に含まれるテーブルの中に、 ナイーブツリーが使用されている場合、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
【0054】
(6-11)抽象構文木群データ23に含まれるカラム定義の中に、複数形のカラム名が使用されている場合、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
(6-12)抽象構文木群データ23に含まれるカラム定義の中に、is_deletedなど、安易な論理削除を思わせるカラム名が使用されている場合、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
(6-13)抽象構文木群データ23に含まれるテーブルの中に、 安易な交差テーブル名が使用されている場合、ヒントデータ19に警告を抑止する指定がないなら、アンチパターンの疑いを検証レポート27に含ませる。
【0055】
仕様書検証システム11では、
図1に示すように、構文解析部15とトランスパイラ21とを分離しているので、ExcelやWord以外の型式に対応するときは、構文解析部15を拡張すれば良く、トランスパイラ21は影響を受けない。
【0056】
仕様書検証システム11では、仕様書に実際に文字としてあった情報と、AIで推論した情報を区別し、その区別をヒントデータ19として出力する。
半構造化テキスト群データ17は、仕様書に実際に文字としてあった情報と、AIで推論した情報を区別しないで出力する。(トランスパイラの出力となる抽象構文木にはあいまいさを含められないため。)
また、構文解析部15及びトランスパイラ21のそれぞれを人間の手による教師データを渡して、より精緻な推論ができるようにモデルを構築する。
【0057】
図2は、
図1に示す仕様書検証システム11のハードウェア構成図である。
図2に示すように、仕様書検証システム11は、例えば、ディスプレイ51,操作部53,通信部55、メモリ59及び処理部61を有する。
図1に示す機能は、
図2に示すハードウェアを用いて実現される。
【0058】
ディスプレイ51は、処理部61からの信号に基づいた画像を表示する。
操作部53は、タッチパネル、キーボードやマウス等の操作手段である。
通信部55は、外部装置と通信を行う。
入力部57は、外部からデータを入力する端子等である。
メモリ59は、処理部61が実行するプログラムを記憶する。
処理部61は、メモリ59に記憶されたプログラムPR1を実行して、本実施形態で規定する仕様書検証システム11の処理を行う。
すなわち、処理部61は、プログラムを実行して
図1に示す仕様書検証システム11の機能を実現する。
【0059】
以下、
図1及び
図2に示す仕様書検証システム11が実行する処理の流れを説明する。
図3は、
図1及び
図2に示す仕様書検証システム11が実行する処理の流れを説明するためのフローチャート図である。
各ステップについて説明する。
ステップST11:
仕様書検証システム11は、仕様書データを入力する。
【0060】
ステップST12:
仕様書検証システム11は、ステップST11で入力した仕様書データ13を構文解析処理して、ヒントデータ19と、半構造化テキスト群データ17とを生成する。
【0061】
ステップST13:
仕様書検証システム11は、ステップST12で生成した半構造化テキスト群データ23を抽象構文木群データに変換する。
【0062】
ステップST14:
仕様書検証システム11は、ステップST13で生成した抽象構文木群データと、ステップST12で生成したヒントデータ13とを基に、仕様書データの検証処理を行う。
【0063】
ステップST15:
仕様書検証システム11は、ステップST14の検証結果を示す検証レポート27を出力する。
【0064】
以下、
図3に示すステップST14の検証処理について詳細に説明する。
図4は、
図3に示すステップST14の検証処理を説明するためのフローチャート図である。
ステップST21:
仕様書検証システム11は、抽象構文木群データ23が検証項目の第1の条件を満たしているか否かを判断する。
【0065】
ステップST22:
仕様書検証システム11は、ステップST21で第1の条件を満たしていないと判断した検証項目について、当該検証項目に関係するヒントデータ19を基に第2の条件を満たしているか否か判断する。
【0066】
ステップST23:
仕様書検証システム11は、ステップST22で第2の条件を満たさないと判断した場合に、その検証項目に問題ありとする検証レポート27を生成する。
【0067】
ステップST24:
仕様書検証システム11は、ステップST21,ST22で肯定判定の場合に、その検証項目に問題なしとする検証レポート27を生成する。
【0068】
本実施形態によれば、構文解析と検証処理を自動化し、検証プロセスの効率化と正確性向上を図ることで、検証負荷の軽減と不要な警告の抑制が可能になる。
【0069】
本発明は上述した実施形態には限定されない。
すなわち、当業者は、本発明の技術的範囲またはその均等の範囲内において、上述した実施形態の構成要素に関し、様々な変更、コンビネーション、サブコンビネーション、並びに代替を行ってもよい。
【産業上の利用可能性】
【0070】
本発明は、プログラム検証システムに適用可能である。
【符号の説明】
【0071】
11…仕様書検証システム
13…仕様書データ
15…構文解析部
17…半構造化テキスト群データ
19…ヒントデータ
21…トランスパイラ
23…抽象構文木群データ
25…設計チェック部
27…検証レポート