JP4673040B2 - 仕様書データ生成方法及び装置 - Google Patents

仕様書データ生成方法及び装置 Download PDF

Info

Publication number
JP4673040B2
JP4673040B2 JP2004326154A JP2004326154A JP4673040B2 JP 4673040 B2 JP4673040 B2 JP 4673040B2 JP 2004326154 A JP2004326154 A JP 2004326154A JP 2004326154 A JP2004326154 A JP 2004326154A JP 4673040 B2 JP4673040 B2 JP 4673040B2
Authority
JP
Japan
Prior art keywords
priority
arithmetic operation
arithmetic
data
argument
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2004326154A
Other languages
English (en)
Other versions
JP2006139357A (ja
Inventor
慎一 佐野
浩史 須永
浩治 小林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2004326154A priority Critical patent/JP4673040B2/ja
Priority to US11/065,711 priority patent/US7694283B2/en
Publication of JP2006139357A publication Critical patent/JP2006139357A/ja
Application granted granted Critical
Publication of JP4673040B2 publication Critical patent/JP4673040B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/10Requirements analysis; Specification techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Description

本発明は、プログラムの仕様書の自動生成技術に関する。
例えばJava(Sun Microsystems社の商標)により書かれたプログラムのレビューは、COBOL等のプログラムに比べると困難な場合が多い。これは、Javaに対するレビュアのスキルの問題もあるが、COBOLでは数式や構文で表されるものが、メソッドの呼び出しになるため見づらくなっているという点もある。例えばCOBOLでは、WK_OUTOUBI > XHIAWYEIDT と書かれるものが、wk_x16.getWK_OUTOUBI().isGreaterThan(xhiarxhi.getXHIAWYEIDT()) となるため、可読性が損なわれている。また、オブジェクト生成、EJB(Enterprize Java Beans)初期化などレビューとは無関係の処理が多く記述されているため、これもレビューの効率化の妨げになっている。
なお、仕様書の自動生成については例えば特開平6−149551号公報に開示されている。すなわち、入力されたプログラムの構文を解析し、構文構造とデータ属性を得ると共に、そのデータ・フローを解析してデータ・フロー情報を得る。また、プログラム中の一時変数の変数名を検出し、それらの一時変数と包含関係にあるデータを検出する。ついで、上記一時変数の参照箇所からデータの包含関係によって関連する変数の設定箇所までのデータ・フローをたどり、一時変数の用途(計算の中間結果保持、型変換、分割、合成等)を判別し、消去可能な一時変数を消去する。一時変数が消去された中間表現は自然言語記述に置き換えられ、仕様書を得るものである。但し、上で述べたようなオブジェクト指向言語の問題などについては考慮されていない。
特開平6−149551号公報
従来技術では、Javaなどのプログラム言語で書かれたプログラムのレビューが困難であるという問題については何ら解決策が示されていない。
従って、本発明の目的は、Javaなどのプログラム言語で書かれたプログラムのレビューを容易にするための仕様書自動生成技術を提供することである。
本発明に係る方法は、算術演算をメソッド形式で記述したソースプログラム(例えばJavaのBigDecimalクラスのメソッドを用いて記述されたソースプログラム)から仕様書データを生成する方法であって、ソースプログラムに含まれ且つ算術演算を規定する算術演算文に含まれる算術演算メソッドについて、予め定められた演算ルールに従った優先度を特定し、算術演算メソッドと優先度とを記憶装置に登録する登録ステップと、算術演算文において複数の算術演算メソッドが含まれており且つ優先度の高い演算メソッドのインスタンスとして優先度の低い算術演算メソッドが規定されていると記憶装置に格納されているデータに基づき判断した場合には、優先度の低い算術演算メソッドと当該優先度の低い算術演算メソッドのインスタンス及び引数とを所定のルールに従って算術演算記号を用いた第1の部分算式に変換し、当該第1の部分算式に対して優先的な演算を行うことを表すカッコを付し、優先度の高い演算メソッドと当該優先度の高い演算メソッドの引数とを所定のルールに従って算術演算記号を用いた第2の部分算式に変換して第1の部分算式と連結する処理を実施することにより仕様書データを生成し、仕様書データ格納部に格納する生成ステップとを含む。
例えば金融等における数式に使われる例えばJavaのBigDecimalクラスでは、全ての演算がメソッド呼び出しとなり、そのままでは非常にレビューしにくい記述となっている。そして、BigDecimalクラスのメソッドを使用して記述した算術演算文について単純な変換を行うのでは演算子(+や×)の優先順位は保持されなくなるので、正しい処理が行われているかレビューすることは困難である。従って上で述べた処理を実施することにより、算術演算文の正しい内容をレビュアに分かりやすい形式で提示することができるようになる。
また、上で述べた登録ステップにおいて、算術演算メソッドについて優先度と当該算術演算メソッドのインスタンスに関するデータと当該算術演算メソッドの引数に関するデータとを保持するデータブロックを生成し、記憶装置に格納するようにしてもよい。インスタンス及び引数が算術演算メソッドを用いて記述されている場合もあり、その場合には当該インスタンス及び引数についてもデータブロックが構成され、元の算術演算メソッドについてのデータブロックから参照することができるようになっている場合もある。また、引数及びインスタンスが算術演算メソッドを用いて記述されていない場合であっても後に処理のためにデータブロックが生成される場合もある。
さらに、上で述べた生成ステップが、変数名と当該変数名の意味を表す語句とが対応付けられて登録されている第1の辞書を参照し、第1の部分算式及び第2の部分算式に含まれる変数を対応する語句に置換するステップを含むようにしてもよい。よりレビュアが仕様書を読み易くなる。
また、ソースプログラムを解析して、処理文と当該処理文に関連する条件とを特定し、対応付けて仕様書データ格納部に格納するステップをさらに含むようにしてもよい。その場合、上で述べた登録ステップが、算術演算文である処理文及び条件について実施されるようにしてもよい。
さらに、上で述べた生成ステップが、算式において1項のみを囲うカッコ又はカッコで囲まれる文字のみを囲うカッコが存在するか確認するステップと、算式において1項のみを囲うカッコ又はカッコで囲まれる文字のみを囲うカッコが存在する場合には、当該カッコを除去するステップとを含むようにしてもよい。このような処理を実施することにより、より正確な算式を表現できるようになる。
また、上で述べた生成ステップが、変数の値の意味を表す語句が登録されている第2の辞書を参照し、特定の変数の特定の値に対応する語句を抽出し、特定の変数の特定の値に対応して仕様書データ格納部に格納するステップを含むようにしてもよい。例えば、ABCという変数が1になった場合という条件が規定されている場合、「1」という意味が何であるかよく分からない場合に、レビューが困難になることがあるためである。
さらに、上で述べた引数に関するデータが、引数が式であるか否かを表すデータを含むようにしてもよい。その際、上で述べた生成ステップが、データブロックを参照して、算術演算メソッドの引数が式であるか判断するステップと、引数が式であると判断された場合には、当該式を所定のルールに従って算術演算記号を用いた第3の部分算式に変換し、当該第3の部分算式に対してカッコを付すステップとを含むようにしてもよい。引数も式である場合には演算子の優先度を考慮する必要がある場合もあるためである。
本発明に係る仕様書データ生成方法をコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等の記憶媒体又は記憶装置に格納される。また、ネットワークを介してディジタル信号にて頒布される場合もある。なお、処理途中のデータについては、コンピュータのメモリ等の記憶装置に一時保管される。
本発明によれば、Javaなどのプログラム言語で書かれたプログラムのレビューを容易にすることができるようになる。
図1に本発明の一実施の形態に係る仕様書データ生成装置の機能ブロック図を示す。仕様書データ生成装置10は、仕様書を生成する対象となるソースプログラムを格納するソースプログラム格納部1と、ソースプログラムのパースなどを実施する構文解析部2と、構文解析部2の処理結果を格納する構文解析結果格納部3と、構文解析結果格納部3に格納されたデータを表形式のデータに変換する表変換部4と、変数と変数の意味を表す語句との対応関係が登録された語句辞書8と、変数と変数の値とその意味を表す語句との対応関係が登録されたコード辞書9と、表変換部4などの処理結果を格納する表データ格納部5と、表データ格納部5に格納されたデータを用いて以下で詳細に述べる算術演算式の変換処理を実施する式変換部6と、式変換部6における中間データであるデータブロック群を格納するデータブロック格納部7とを有する。語句辞書8及びコード辞書9とは、表変換部4と式変換部6において用いられる。
次に、図1に示した仕様書データ生成装置10の処理フローを図2乃至図19を用いて説明する。まず、構文解析部2は、ソースプログラム格納部1から処理対象となるソースプログラムを読み出し、パース処理を含む周知の構文解析処理を実施し、処理結果を構文解析結果格納部3に格納する(ステップS1)。次に、表変換部4は、構文解析結果格納部3に格納されたデータを用い、語句辞書8及びコード辞書9を参照して表変換処理を実施する(ステップS3)。この表変換処理については、後に詳しく述べる。表変換の処理結果は、表データ格納部5に格納される。そして、式変換部6は、表データ格納部5に格納されたデータを用い、語句辞書8及びコード辞書9を参照して式変換処理を実施する(ステップS5)。この式変換処理についても、後に詳しく述べる。式変換処理の結果は表データ格納部5に格納する。
次に、図3乃至図6を用いて表変換処理について説明する。まず、表変換部4は、構文解析結果格納部3を参照して、未処理の1行を読み出す(ステップS11)。そして、読み出された行が条件文であるか判断する(ステップS13)。ここではif文などであるかを確認する。もし、条件文であると判断された場合には、条件文抽出処理を実施する(ステップS15)。抽出された条件文のデータは、一旦メインメモリ等の記憶装置に格納される。一方、条件文であると判断されなかった場合には読み出された行は何らかの処理文を含み、又読み出された行が条件文である場合には当該条件文に関連する処理文が存在するので、当該処理文の抽出処理を実施する(ステップS17)。抽出された処理文のデータは、一旦メインメモリ等の記憶装置に格納される。そして、ステップS15及びステップS17で抽出された条件文及び処理文に関連してコメント文が存在する場合には、当該コメント文の抽出処理を実施する(ステップS19)。抽出されたコメント文のデータは、一旦メインメモリ等の記憶装置に格納される。また、抽出された条件文、処理文及びコメント文の行番号の抽出処理を実施する(ステップS21)。抽出された行番号は、一旦メインメモリ等の記憶装置に格納される。
そして、表変換処理部4は、例えばメインメモリに格納された抽出データにより表を構成して、表データ格納部5に格納する(ステップS23)。そして、全ての文を処理したか判断し(ステップS25)、未処理の文が存在すればステップS11に戻る。そして、全ての文について処理した場合には、元の処理に戻る。
例えば以下のようなJavaのソースプログラム(一部のみ)を処理する場合について説明する。
3 if (in_param.getRETURNCODE() == 0) {
4 out_param.setNISSU(in_param.getNISSU());
5 }
この例の場合条件文は、”in_param.getRETURNCODE()==0”であり、処理文は”out_param.setNISSU(in_param.getNISSU())”である。なお、左端の数字は行番号であるが、実際のプログラムには含まれておらず、ここでは参照のために示している。このような場合には、例えばステップS23の段階で、図4(a)に示すようなデータが保持される。図4(a)の例では、項番、行番号(処理の行番号及び条件の行番号)、処理、条件1(条件が複数関係する場合は条件2、条件3と続く)及び備考(コメント文用)の列が用意され、処理文と、関連する条件文と、それぞれの行番号が登録されている。
なお、ステップS23において、本実施の形態の最後に述べる変換ルールに従って図4(a)をさらに変換して、図4(b)に示すようなデータを格納するようにしても良い。すなわち、”out_param.setNISSU(in_param.getNISSU())”を”out_param.NISSU=in_param.NISSU”に、”in_param.getRETURNCODE()==0”を”in_param.RETURNCODE=0”に変換する。さらに、語句辞書8及びコード辞書9を参照して、変数の語句変換を行ってもよい。以下で説明する式変換処理は、主にBigDecimalクラスのメソッドの処理になるので、ステップS23において明らかにBigDecimalクラスのメソッドが関係無いと判断された処理文及び条件文について、簡単な変換処理を実施するものである。例えば図4(c)に示すように、語句辞書8を用いて変数を当該変数の意味を表す語句に変換するものである。語句辞書8には、例えば図5に示すようなデータが保持されている。すなわち変数名とその意味を示す語句データである。従って、”in_param”が「入力領域」に、”RETURNCODE”が「復帰値」に、”out_param”が「出力領域」に、”NISSU”が「日数」にそれぞれ変換される。なお、コード辞書9についても用いられる場合もある。コード辞書9は、例えば図6に示すようなデータを保持している。すなわち、変数名と当該変数の値とその意味を表すデータとを含む。従って、該当する変数名及びその値との組み合わせが特定されると、その意味を表すデータも表に登録する。
次に、式変換処理について図7を用いて説明する。まず、式変換部6は、表における未処理セル(処理及び条件の行についての未処理セル)を1つ特定する(ステップS31)。そして、当該セルに含まれる文について、BigDecimalクラスのメソッドが規定されているか判断する(ステップS33)。もし、BigDecimalクラスのメソッドが規定されていると判断された場合には、セルに含まれる文について演算解析処理を実施する(ステップS35)。この処理については後に説明するが、セルに含まれる文についてのデータブロック群を生成し、データブロック格納部7に格納する。そして、データブロック格納部7に格納されたデータを用いて変換処理を実施する(ステップS37)。この処理については後に説明するが、通常の演算子を用いた算術演算式をセルに格納する。なお、この際に、語句辞書8及びコード辞書9を用いた置換処理もあわせて実施する。一方、ステップS33でBigDecimalクラスのメソッドが規定されていないと判断された場合には、本実施の形態の最後に述べる変換ルールに従って通常の文字列変換処理を実施し、生成されたデータをセルに格納する(ステップS45)。
そして、ステップS37又はS45の後に、セル内の算術演算式に不要カッコが存在するか確認する処理を実施する(ステップS39)。もし、セル内の算術演算式に不要カッコが存在すると判断された場合には、当該不要カッコ除去処理を実施する。例えば、カッコ内が変数又は定数のみである場合にはそのカッコは不要であるから除去する(ステップS41)。例えば、”c.multiply(a).add(b)”という式(又は部分式)がセルに含まれている場合、変換処理により”c*(a)+(b)”というように変換してしまう場合もある。そうした場合には、(a)の()と(b)の()は不要であるから、削除する。また、((a+b))*cといった部分式が得られた場合も、((a+b))の外側の()については不要であるからこれを除去する。除去後のデータを表のセルに保存する。このように、(1)変数又は定数のみを囲っているカッコ、(2)カッコ以外の文字列を囲っていないカッコについては不要であり削除する。もし、不要なカッコが存在しないと判断された場合及びステップS41の後に、表において全てのセルについて処理したか判断する(ステップS43)。もし未処理のセルが存在している場合にはステップS31に戻る。一方、未処理のセルがない場合には元の処理に戻る。
次に、演算解析処理(図7:ステップS35)について図8乃至図13を用いて説明する。まず、式変換部6は、処理対象の式部分(図7のステップS35において呼び出される場合には式全体であるが、本演算解析処理は再帰的に呼び出されるのでその場合には処理対象の式部分となる)におけるBigDecimalクラスのメソッドについてデータブロックを生成する(ステップS50)。データブロック格納部7に領域を確保する。データブロックは、例えば図9に示すようなデータ領域である。すなわち、メソッド名(又は式)の領域と、インスタンスデータの領域と、引数データの領域と、優先順位の領域と、引数が式か否かを表すフラグの領域とを含む。メソッド名の領域には、呼び出されたメソッドの名前などが格納され、インスタンスデータの領域には、インスタンスがメソッドでない場合にはインスタンスのデータ名が格納され、インスタンスがメソッドである場合には当該インスタンスのメソッドについてのデータブロックへのポインタ(又は当該データブロックそのもの)が格納され、引数データの領域には、引数が式でない場合にはデータ名が格納され、引数が式である場合には当該引数についてのデータブロックへのポインタ(又は当該データブロックそのもの)が格納され、優先順位の領域には、BigDecimalクラスのメソッドについて対応する演算子の優先順位が格納され、引数が式か否かを表すフラグについては当該メソッドの引数が式であれば例えば「1」がそうでなければ「0」が格納される。なお、本例では、図7のステップS35以外で本演算解析処理が呼び出された場合には、当該データブロックの先頭アドレスを、呼出元の処理に応じてインスタンスデータの領域又は引数の領域に登録するものとする。
また、メソッド呼び出しは、インスタンス部、メソッド名及び引数の3つの部分から構成される。例えば data1.add(data2) というメソッド呼び出しの場合、インスタンス部はdata1であり、メソッド名はaddであり、引数はdata2である。さらにメソッド呼び出しが連続する場合、例えばdata1.add(data2).multiply(data4) というメソッド呼び出しの場合、メソッドmultipyについてのインスタンスはdata1.add(data2)であり、引数はdata4であり、メソッドaddについてのインスタンスはdata1であり、引数はdata2である。
そして、処理対象の式部分がBigDecimalクラスのメソッド呼び出しであるか判断する(ステップS51)。図7のステップS33でBigDecimalクラスのメソッド呼び出しであるか確認されているので、図7のステップS35において呼び出される場合には重複するが、本演算処理は再帰的に呼び出される処理であるため、本ステップが必要となる。
もし、BigDecimalクラスのメソッド呼び出しであると判断された場合には、インスタンス解析処理を実施する(ステップS53)。この処理については後に説明するが、インスタンス解析処理においても本演算解析処理は呼び出される。次に、処理対象の部分式のメソッド名を取得し、当該メソッドのためのデータブロックのメソッド名の領域に設定する(ステップS55)。また、当該メソッドのメソッド優先度を取得し、優先順位の領域に設定する(ステップS57)。メソッドの優先順位は、図10に示すようなものである。すなわち、pow>multiply又はdivide>add又はsubtratとなるように優先順位が予め定められている。これは通常の演算における優先順位を表している。さらに、引数解析処理を実施する(ステップS59)。この処理については後に説明するが、引数解析処理においても本演算解析処理は呼び出される。そして元の処理に戻る。
一方、ステップS51において、処理対象の式部分においてBigDecimalクラスのメソッドが呼び出されていない場合には、BigDecimalクラス以外のクラスが呼び出されているか確認する(ステップS61)。もし、メソッド呼び出しがあれば、インスタンス解析処理を実施し(ステップS63)、当該メソッドのメソッド名を取得し、当該メソッドのためのデータブロックのメソッド名の領域に設定する(ステップS65)。さらに、当該メソッドのための引数解析処理を実施する(ステップS67)。ステップS63はステップS53と同じ処理であり、ステップS67はステップS59と同じ処理である。そして元の処理に戻る。
また、ステップS61でメソッド呼び出しではないと判断された場合には、本実施の形態の最後に述べるような通常の文字列変換処理を実施し、処理対象の式部分のデータブロックのメソッド名の部分に、文字列を登録する(ステップS69)。そして元の処理に戻る。
次に図11を用いてインスタンス解析処理について説明する。式変換部6は、処理対象のインスタンスにメソッド呼び出しが含まれるか判断する(ステップS71)。もし、処理対象のインスタンスにメソッド呼び出しが含まれない場合には、インスタンス名を取得し、処理対象の部分式のデータブロックにおけるインスタンスデータの領域に設定する(ステップS73)。そして元の処理に戻る。一方、メソッド呼び出しが含まれると判断された場合には、当該メソッドについて図8の演算解析処理を実施する(ステップS75)。そして元の処理に戻る。このようにして、インスタンスにメソッド呼び出しが存在する場合には、データブロックの連鎖が形成されてゆく。
次に図12を用いて引数解析処理を説明する。式変換部6は、処理対象の引数が式であるか判断する(ステップS81)。本判断結果は、データブロックにおいて、引数が式か否かを表すフラグとしてセットされる。もし、処理対象の引数が式ではない場合には、引数名を取得し、処理対象の部分式のデータブロックにおける引数データの領域に設定する(ステップS83)。そして元の処理に戻る。一方、引数が式であると判断された場合には、当該引数について図8の演算解析処理を実施する(ステップS85)。そして元の処理に戻る。このようにして、引数が式である場合には、データブロックの連鎖が形成されてゆく。
ここで演算解析処理について具体例を用いて説明する。
data1.add(data2.method1()).subtract(data3.dat4).multiply(data5)
という算術演算式が処理対象となっている場合を考える。
まず、ステップS50でメソッドmultiply用のデータブロックが生成される。例えば図13に示すようにデータブロック1301が生成される。そして、ステップS51でメソッドmultiplyがBigDecimalクラスのメソッド呼び出しであることが確認されるので、ステップS53でインスタンス解析処理を実施する。インスタンス解析処理では、ステップS71でインスタンスがメソッド呼び出しであるか確認され、メソッドsubtractが存在するため、ステップS75においてメソッドsubtractについての演算解析処理を実施することになる。
そうすると、ステップS50においてメソッドsubtractについてのデータブロック1302(図13)が生成される。なお、データブロック1301のインスタンスデータの領域には、データブロック1302へのポインタが設定される。メソッドsubtractはBigDecimalクラスのメソッド呼び出しであることが確認されるので、ステップS53でインスタンス解析処理を実施する。インスタンス解析処理では、ステップS71でインスタンスがメソッド呼び出しであるか確認され、メソッドaddが存在するため、ステップS75においてメソッドaddについての演算解析処理を実施することになる。
そうすると、ステップS50においてメソッドaddについてのデータブロック1303(図13)が生成される。なお、データブロック1302のインスタンスデータの領域には、データブロック1303へのポインタが設定される。メソッドaddはBigDecimalクラスのメソッド呼び出しであることが確認されるので、ステップS53でインスタンス解析処理を実施する。インスタンス解析処理では、ステップS71でインスタンスがメソッド呼び出しではないと判断されるので、ステップS73でインスタンス名”data1”を取得し、データブロック1303のインスタンスデータの領域に格納する。次に、ステップS55においてメソッド名addを取得して、データブロック1303のメソッド名の領域に格納する。また、ステップS57においてメソッドaddに対応するメソッド優先度を取得して、データブロック1303の優先順位の領域に優先度「3」(図10参照)を設定する。その後ステップS59で引数解析処理を実施する。引数解析処理では、ステップS81でメソッドaddの引数が式であるか判断され、ここではadd2.method1()というメソッドを用いた式であると判断して、ステップS85で当該引数についての演算解析処理を実施する。なお、ここでデータブロック1303の引数が式か否かを表すフラグを1にセットする。
そうすると、ステップS50においてメソッドmethod1についてのデータブロック1304(図13)が生成される。なお、データブロック1303の引数データの領域には、データブロック1304へのポインタが設定される。ステップS51でメソッドmethod1はBigDecimalクラスのメソッド呼び出しではないと判断されるので、ステップS61に移行し、さらにメソッド呼び出しであるか判断される。メソッドmethod1はメソッド呼び出しであるから、ステップS63でインスタンス解析処理を実施する。インスタンス解析処理では、ステップS71でインスタンスがメソッド呼び出しであるか確認され、”data2”であるからメソッド呼び出しではないと判断され、ステップS73においてインスタンス名”data2”が取得され、データブロック1304のインスタンスデータの領域に設定される。次に、ステップS65においてメソッド名method1が取得され、データブロック1304のメソッド名の領域に設定される。さらに、ステップS67において引数解析処理を実施する。引数解析処理では、ステップS81でメソッドmethod1の引数が式であるか判断され、ここでは空であるから、ステップS83で何も設定せずにメソッドmethod1についての引数解析処理を終了する。なお、ここではデータブロック1304の引数が式か否かを表すフラグを0にセットする。
ここでメソッドaddの引数解析処理が完了したことになり、メソッドsubtractのインスタンス解析処理も完了したことになる。すなわち、メソッドsubtractについてのステップS53まで完了したことになる。そうすると、ステップS55においてメソッドsubtractのメソッド名が取得され、データブロック1302のメソッド名の領域に設定される。さらに、ステップS57においてメソッドsubtractに対応するメソッド優先度を取得して、データブロック1302の優先順位の領域に優先度「3」(図10参照)を設定する。その後ステップS59でメソッドsubtractの引数解析処理を実施する。引数解析処理では、ステップS81でメソッドsubtractの引数が式であるか判断され、ここではdata3+data4であるから式であると判断して、ステップS85で当該引数についての演算解析処理を実施する。なお、ここでデータブロック1302の引数が式か否かを表すフラグを1にセットする。
そうすると、ステップS50において引数data3+data4についてのデータブロック1305が生成される。なお、データブロック1302の引数データの領域には、データブロック1305へのポインタが設定される。ステップS51で引数data3+data4はBigDecimalクラスのメソッド呼び出しではないと判断され、さらにステップS61でメソッドでもないと判断される。従ってステップS69で引数についての文字列変換処理が実施され、”data3+data4”がデータブロック1305のメソッド名の領域に設定される。
これでメソッドsubtractの引数解析処理が完了することになり、メソッドmultiplyのインスタンス解析処理も完了したことになる。すなわち、メソッドmultiplyについてのステップS53まで完了したことになる。そうすると、ステップS55においてメソッドmultiplyのメソッド名が取得され、データブロック1301のメソッド名の領域に設定される。さらに、ステップS57においてメソッドmultiplyに対応するメソッド優先度を取得して、データブロック1301の優先順位の領域に優先度「2」(図10参照)を設定する。その後ステップS59でメソッドmultiplyの引数解析処理を実施する。引数解析処理では、ステップS81でメソッドmultiplyの引数が式であるか判断され、ここではdata5であるから式ではないと判断して、ステップS83において当該引数をデータブロック1301の引数データの領域に設定する。なお、ここでデータブロック1301の引数が式か否かを表すフラグを0にセットする。
以上のような処理実施することにより、図13に示すようなデータブロックが連鎖するデータ構造が生成されるようになる。データブロックの連鎖は、表データ格納部5の表のセルに対応付けられている。
なお、図8乃至図13を用いて説明した処理は、表のセルの1つのメソッド、又は1つのセルに複数の項が存在する場合には1つの項についての処理であり、1つのセルについて複数回上で述べたような処理を実施しなければならない場合もある。
次に、図14乃至図17を用いて変換処理(図7:ステップS37)を説明する。まず、式変換部6は、データブロック格納部7における未処理先頭データブロックを特定する(ステップS91)。そして、当該先頭データブロックから連鎖するデータブロック群についての部分式変換処理を実施する(ステップS93)。この処理については後に述べる。そして、全てのデータブロックについて処理したか判断する(ステップS95)。もし、未処理のデータブロックが存在する場合にはステップS91に戻り、全てのデータブロックについての処理が完了していれば、元の処理に戻る。
図15を用いて部分式変換処理を説明する。まず、式変換部6は、データブロックの処理対象の領域のデータ(メソッド名の領域又は引数データの領域のデータ)を読み出す(ステップS101)。そして、読み出したメソッド名などが、BigDecimalクラスのメソッドであるか判断する(ステップS103)。もし、BigDecimalクラスのメソッドであると判断された場合には、当該メソッドのインスタンスにおけるメソッドの優先順位が自メソッドの優先順位より低いか判断する(ステップS105)。例えば図13に示すようなデータブロック群の基となる算術演算式では、左から見るとメソッドsubtractの次にメソッドmultiplyが示されているが、実際の演算はメソッドmultiplyの引数とメソッドsubtractによる演算を含むメソッドmultiplyのインスタンス全体との掛け算を表している。従って、通常の算術演算式に直すのであれば、演算子の優先順位に従って、インスタンス全体をカッコでくくらなければならない。但し、掛け算より優先度が高くない引き算又は足し算、すなわちmultiplyの代わりにsubtractやaddであればカッコは不要となる。そこで、先頭のデータブロック1301の優先順位の領域の値と、インスタンスデータの領域により参照されるデータブロック1302の優先順位の領域の値とを比較する。
もし、当該メソッドのインスタンスにおけるメソッドの優先順位が自メソッドの優先順位より低い場合には、開きカッコを展開し、登録する(ステップS107)。例えば表データ格納部5における処理対象セルに、「(」と格納する。そしてステップS109に移行する。一方、当該メソッドのインスタンスにおけるメソッドの優先順位が自メソッドの優先順位以上である場合には、第2インスタンス変換処理を実施する(ステップS109)。第2インスタンス変換処理については後に説明する。そして、開きカッコを展開したか判断する(ステップS111)。ステップS107を通過した場合には開きカッコを展開したことになるので、閉じカッコを展開し、登録する(ステップS113)。例えば表データ格納部5における処理対象セルに「)」と格納する。開きカッコを展開していないと判断した場合又はステップS113の後に、処理対象のメソッド名の演算子変換を実施し、登録する(ステップS115)。multiplyであれば”*”に、addであれば”+”に、subtractであれば”−”に、divideであれば”/”に、powであれば”**”に変換して、表データ格納部5における処理対象セルに登録する。その後、第2引数変換処理を実施する(ステップS117)。この第2引数変換処理については後に説明する。そして元の処理に戻る。
一方、ステップS103において、読み出したメソッド名などがBigDecimalクラスのメソッドではないと判断された場合には、処理しているデータブロックは通常のメソッド又は通常の式が格納されていると考えられるので、当該データブロックの展開(例えば通常の式であればそのまま。通常のメソッドであればインスタンスデータの領域に格納されているデータを読み出し、instance.methodといった形式に展開する)を行い(ステップS119)、例えば語句辞書8及びコード辞書9を用いた語句変換処理を実施し、登録する(ステップS121)。語句辞書8及びコード辞書9に登録が無ければ、そのまま表データ格納部5の処理対象セルに登録する。インスタンスがin_paramでメソッド名がNISSUであり、語句辞書8に図5のような登録がなされていれば、「入力領域.日数」と変換され、表データ格納部5の処理対象セルに登録される。そして元の処理に戻る。
次にステップS109の第2インスタンス変換処理を図16を用いて説明する。まず、式変換部6は、処理対象メソッドのインスタンスがメソッド呼び出しになっているか判断する(ステップS125)。すなわち、本処理に係るデータブロックのインスタンスデータの領域に参照すべきデータブロックのポインタが登録されているか確認する。もし、処理対象メソッドのインスタンスがメソッド呼び出しになっている場合には、ポインタから呼び出し先のデータブロックを特定し(ステップS129)、図15の部分式変換処理を実施する(ステップS131)。そして元の処理に戻る。一方、処理対象メソッドのインスタンスがメソッド呼び出しではない場合には、処理に係るデータブロックのインスタンスデータの領域に格納されているインスタンス名を展開し、表データ格納部5の処理対象セルに登録する(ステップS127)。ここで、例えば語句辞書8を参照してインスタンス名を表す文字列をその意味を表す語句に変換し、コード辞書9を参照して変数の値についてその意味を表す語句に変換し、表データ格納部5の処理対象セルに登録する。なお、語句辞書8及びコード辞書9に登録されていない場合にはそのまま登録する。そして元の処理に戻る。このように、インスタンスにメソッドが規定されていると、データブロックが連鎖するので、その連鎖をたどって処理を行う。
次に、ステップS117の第2引数変換処理を図17を用いて説明する。まず、式変換部6は、処理対象の引数が式であるか確認する(ステップS135)。これはデータブロックの引数が式か否かを表すフラグにて簡単に判断できる。式であれば、開きカッコを展開し、表データ格納部5の処理対象セルに登録する(ステップS137)。そして、引数に係るデータブロックを、メソッドのデータブロックの引数データの領域を参照して特定する(ステップS139)。
そして、ステップS135で引数が式ではないと判断された場合又はステップS139の後に、引数についての部分式変換処理を実施する(ステップS141)。具体的には、ステップS135のYesルート経由である場合にはステップS139において特定されたデータブロックについて、ステップS135のNoルート経由である場合には元のメソッドのデータブロックについて処理を行う。そして、開きカッコを展開したか判断する(ステップS143)。すなわち、ステップS137を経由したか判断する。そして開きカッコを展開している場合には、対応する閉じカッコを展開し、表データ格納部5の処理対象セルに登録する(ステップS145)。そして、元の処理に戻る。一方、開きカッコを展開していない場合には元の処理に戻る。
このような処理を行うことにより図13に示したようなデータブロックが処理されて、レビュアが読みやすい通常の算術演算式が得られ、さらに変数の意味を表す語句などに変換されて、表形式でレビュアに提示されるようになる。
図14乃至図17の処理について、図13に示したようなデータブロックを処理する場合を具体的に説明する。最初に、ステップS101において、データブロック1301のメソッド名の領域に登録されたメソッド名multiplyを読み出し、ステップS103においてBigDecimalクラスのメソッドであるか確認する。メソッドmultiplyはBigDecimalクラスのメソッドであるから、ステップS105において、当該メソッドmultiplyのデータブロック1301の優先順位の領域に登録された優先順位と、データブロック1301のインスタンスデータの領域に設定されたポインタからたどることにより得られるデータブロック1302の優先順位の領域に登録された優先順位とを比較し、当該メソッドmultiplyのインスタンスのメソッドの優先順位が自メソッドmultiplyの優先順位より低いか判断する。ここでは、メソッドmultiplyのインスタンスのメソッドsubtractの優先順位が「3」であり、自メソッドmultiplyの優先順位は「2」であるから、条件を満たしていることになる。従って、ステップS107において開きカッコを展開する。この段階で「(」となる。次に、ステップS109において第2インスタンス変換処理を実施する。第2インスタンス変換処理においては、ステップS125においてメソッドmultiplyのインスタンスがメソッド呼び出しであるか判断する。データブロック1301のインスタンスデータの領域に設定されたポインタからたどることにより得られるデータブロック1302におけるメソッド名の領域にメソッド名subtractが登録されているので、メソッド呼び出しであると判断され、ステップS129で呼び出し先のデータブロック1302を特定し、ステップS131で部分式変換処理を実施する。
そうすると、ステップS101において、データブロック1302のメソッド名の領域に登録されたメソッド名subtractを読み出し、ステップS103においてBigDecimalクラスのメソッドであるか確認する。メソッドsubtractはBigDecimalクラスのメソッドであるから、ステップS105において、当該メソッドsubtractのデータブロック1302の優先順位の領域に登録された優先順位と、データブロック1302のインスタンスデータの領域に設定されたポインタからたどることにより得られるデータブロック1303の優先順位の領域に登録された優先順位とを比較し、当該メソッドsubtractのインスタンスのメソッドの優先順位が自メソッドsubtractの優先順位より低いか判断する。ここでは、メソッドsubtractのインスタンスのメソッドaddの優先順位が「3」であり、自メソッドsubtractの優先順位は「3」であるから、条件を満たしていないことになる。従って、ステップS109において第2インスタンス変換処理を実施する。第2インスタンス変換処理においては、ステップS125においてメソッドsubtractのインスタンスがメソッド呼び出しであるか判断する。データブロック1302のインスタンスデータの領域に設定されたポインタからたどることにより得られるデータブロック1303におけるメソッド名の領域にメソッド名addが登録されているので、メソッド呼び出しであると判断され、ステップS129で呼び出し先のデータブロック1303を特定し、ステップS131で部分式変換処理を実施する。
次に、ステップS101において、データブロック1303のメソッド名の領域に登録されたメソッド名addを読み出し、ステップS103においてBigDecimalクラスのメソッドであるか確認する。メソッドaddはBigDecimalクラスのメソッドであるから、ステップS105において、当該メソッドaddのデータブロック1303の優先順位の領域に登録された優先順位と、データブロック1303のインスタンスデータの領域に設定されたインスタンスの優先順位とを比較することになるが、データ1303のインスタンスデータの領域にはインスタンス”data1”が登録されているので優先順位は設定されていない。従って、条件を満たしていないことになる。そこで、ステップS109において第2インスタンス変換処理を実施する。第2インスタンス変換処理においては、ステップS125においてメソッドaddのインスタンスがメソッド呼び出しであるか判断する。上でも述べたようにデータブロック1303のインスタンスデータの領域には”data1”が登録されているので、メソッド呼び出しではないと判断される。そして、データブロック1303のインスタンスデータの領域からインスタンス名”data1”が読み出され、展開される。この段階で「(data1」となる。そしてメソッドaddについての第2インスタンス変換処理が完了したので、ステップS111でメソッドaddについての処理において開きカッコを展開したか判断する。ここでは開きカッコは展開していないので、メソッド名addに対応する演算子を展開する。この段階で「(data1+」となる。その後、ステップS117において第2引数変換処理を実施する。
第2引数変換処理においては、データブロック1303の引数が式か否かを表すフラグから引数が式であるか判断する。ここでは式であることを表す「1」が登録されているので、ステップS137で開きカッコの展開を行う。この段階で「(data1+(」となる。次に、ステップS139においてデータブロック1303の引数データの領域のポインタから引数についてのデータブロック1304を特定し、ステップS141で部分式変換処理を実施する。
部分式変換処理においては、ステップS101でデータブロック1304のメソッド名の領域からメソッド名等”method1”を読み出す。ステップS103において”method1”はBigDecimalクラスのメソッドではないと判断され、ステップS119においてデータブロック1304の展開を行う。この段階で「(data1+(data2.method1」となる。これでデータブロック1304における部分式変換処理が完了する。そして、データブロック1303の引数についての第2引数変換処理に戻り、ステップS143において開きカッコを展開したか判断する。ステップS137で開きカッコを展開したので、ステップS145で閉じカッコを展開する。この段階で「(data1+(data2.method1)」となる。これでデータブロック1303の引数についての第2引数変換処理が完了し、データブロック1303についての部分式変換処理も完了する。そうすると、データブロック1302のインスタンスについての第2インスタンス変換処理が完了したことになり、データブロック1302の部分式変換処理に戻る。
そうするとステップS111において開きカッコを展開したか判断するが、データブロック1302については開きカッコを展開していないのでステップS115に移行する。ステップS115ではメソッド名subtractに対応する演算子を展開する。この段階で「(data1+(data2.method1)-」となる。そしてステップS117において第2引数変換処理を実施する。
第2引数変換処理においては、ステップS135で引数が式であるかデータブロック1302の引数が式か否かを表すフラグで判断する。データブロック1302ではフラグが「1」となっているので引数は式であり、開きカッコを展開する。この段階で「(data1+(data2.method1)-(」となる。また、ステップS139で引数に係るデータブロックを、データブロック1302の引数データの領域に登録されたポインタから特定する。ここではデータブロック1305が特定される。そしてステップS141で、引数”data3+data4”について部分式変換処理を実施する。
部分式変換処理においては、ステップS101でデータブロック1305のメソッド名の領域からメソッド名等”data3+data4”を読み出し、ステップS103で”data3+data4”がBigDecimalクラスのメソッドであるか判断する。”data3+data4”はBigDecimalクラスのメソッドではないので、ステップS119でデータブロックの展開を行う。そうすると、「(data1+(data2.method1)-(data3+data4」となる。これでデータブロック1305についての部分式変換処理は終了し、データブロック1302についての第2引数変換処理に戻り、ステップS143において開きカッコを展開したか判断する。ステップS137を経由しているので開きカッコを展開しており、ステップS145において閉じカッコを展開する。この段階で「(data1+(data2.method1)-(data3+data4)」となる。これでデータブロック1302の第2引数変換処理が完了し、同時にデータブロック1302の部分式変換処理も完了したことになる。さらに、データブロック1301についての第2インスタンス変換処理も完了したことになる。
そこで、データブロック1301の部分式変換処理に戻り、ステップS111において開きカッコを展開したか判断する。ステップS107を通過しているので開きカッコを展開しており、ステップS113で閉じカッコを展開する。さらに、メソッド名を対応する演算子に変換する。この段階で「(data1+(data2.method1)-(data3+data4)*」となる。そして、ステップS117においてデータブロック1301についての第2引数変換処理を実施する。
第2引数変換処理では、ステップS135において引数が式であるかを、データブロック1301の引数が式か否かを表すフラグで判断する。データブロック1301ではフラグが「0」となっているので引数は式ではない。よって、ステップS141において、データブロック1301の引数データの領域に登録されている”data5”について部分式変換処理を実施する。
部分式変換処理では、ステップS101においてデータブロック1301の引数データの領域に登録されたデータ”data5”を読み出し、ステップS103でBigDecimalクラスのメソッドであるか判断する。”data5”はメソッドでないので、ステップS119でデータブロック1301の引数データをそのまま展開する。この段階で「(data1+(data2.method1)-(data3+data4)*data5」となる。
このようにすれば、レビュアでも容易にレビューすることができるデータに変換される。なお、上の例では、data1、data2、method1、data3、data4、data5については語句辞書8を用いた変換を行っていないが、語句辞書8に登録されていれば変換を実施する。また、data2.method1についてはカッコが余分に付されているので、不要カッコ除去処理において除去する。
例えば、以下のようなソースプログラムが存在する場合には、表データ格納部5に格納されるデータは図18に示すようになる。
[ソースプログラム例]
class sample {
void calc(denpyo in_param){
if (in_param.getRETURNCODE() == 0) {
out_param.setNISSU(in_param.getNISSU());
} else {
if (in_param.getRETURNCODE() == 1) {
out_param.setGANKIN(BigDecimal.valueOf(out_param.getGANKIN().get()+(1+200)).divide(BigDecimal.valueOf(out_param.getRITANI().get()),0,BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(out_param.getRITANI().get())));
if (out_param.getHASUKUBUN().equals("2")) {
out_param.setRISOKU(BigDecimal.valueOf(out_param.getWK_GANKIN().get()).multiply(BigDecimal.valueOf(out_param.getNISSU().get())).multiply(BigDecimal.valueOf(out_param.getRATE().get())).divide(BigDecimal.valueOf(365).multiply(BizMath.pow(BigDecimal.valueOf(10),7,10)),10,BigDecimal.ROUND_DOWN).add(new BigDecimal("0.999")));
} else {
out_param.setWK_RISOKUA(BigDecimal.valueOf(out_param.getWK_GANKIN().get()).multiply(BigDecimal.valueOf(out_param.getNISSU().get())).multiply(BigDecimal.valueOf(out_param.getRATE().get())).divide(BigDecimal.valueOf(365).multiply(BizMath.pow(BigDecimal.valueOf(10),7,1)),1,BigDecimal.ROUND_DOWN));
}
} else {
out_param.setERRORNO(2);
return;
}
}
out_param.setERRORNO(0);
}
}
図18の上部に示した、プロジェクト名、ワークスペース、ファイル名は、仕様書データ生成装置10の環境等から抽出されるデータであり、ここでは本実施の形態の主要部分ではないので説明を省略する。メソッド名は、ソースプログラムの2行目のデータに対応する。3行目以降については図18の表にまとめられている。第1行目は図4(c)と同じであり、基本的な格納データは同じである。但し、条件は複数段階で設定されているので、条件1、条件2、条件3といったように分けられている。なお、条件3以上の条件が設定されている場合には列数は増える。また、項番3の条件3において「端数処理区分.切り上げ」が登録されているが、これはコード辞書9によるデータであり、出力領域.端数処理区分の変数値「2」を意味する。
次に、上で説明を省略した文字列変換の変換ルールについて説明する。
(1)基本変換パターン
図19に基本変換パターンを示す。
(2)BigDecimal型への変換メソッドの展開
BigDecimalの算術演算のために、データクラス変数及び作業変数をBigDecimal型に変換する必要があるが、仕様書データ中では不要であるから以下のように変換する。
BigDecimal.valueOf(データ項目のgetter)=>データ項目
より具体的には以下のようになる。
BigDecimal.valueOf(wk_x16.getWK_ZOUHENGK().get())=>wk_x16.WK_ZOUHENGK
(3)BigDecimalクラスのメソッドdivide
上ではメソッドsubtract、add、及びmultiplyについては例示したが、メソッドdivideについては以下のように変換される。
BigDecimal.valueOf(データ項目1).divide(BigDecimal.valueOf(データ項目2), 小数点桁数, ROUNDED指定)=>データ項目1/データ項目2
より具体的には以下のようになる。
BigDecimal.valueOf(wk_x16.getWK_ZOUHENGK().get()).divide(BigDecimal.valueOf(kwlarkgv.getKGVKWCYUJBZK().get(), 10, BigDecimal.ROUND_DOWN)=>wk_x16.WK_ZOUHENGK/kwlarkgv.KGVKWCYUJBZK
(4)BizMathクラスのメソッドpow
以下のような変換が行われる。
BizMath.pow(被乗数,指数)=>被乗数**指数
BizMath.pow(BigDecimal.valueOf(被乗数), 指数, 小数部基準桁数)=>被乗数**指数
より具体的には以下のようになる。
BizMath.pow(BigDecimal.valueOf(wk_x16.getWK_ZOUHENGK().get(), 3, 5)=>wk_x16.WK_ZOUHENGK**3
(5)Mathクラスのメソッドpow
以下のような変換が行われる。
Math.pow(double型の被乗数,double型の指数)=>被乗数**指数
より具体的には以下のようになる。
Math.pow((double)(wk_x16.getWK_ZOUHENGK().get(), 3.5)=>wk_x16.WK_ZOUHENGK**3.5
(6)特殊処理対象のメソッド
以下のような変換が行われる。
setScale(小数点桁数, BigDecimal.ROUND_DOWN)(setterメソッドの末尾に存在しないこと)=>削除
より具体的には、以下のようになる。
x.setCC(BigDecimal.valueOf(x.getCC().get()).multiply(BigDecimal.valueOf(x.getBB().get())).setScale(10, BigDecimal.ROUND_DOWN).divide(BigDecimal.valueOf(x.getAA().get()), 8, BigDecimal.ROUND_DOWN))=> CC = CC * BB / AA
また、以下のような変換も行われる。
setterメソッド(演算結果.setScale(小数点桁数, BigDecimal.ROUND_HALF_UP))=>「ROUNDED」を変換後の実行分の末尾に付加
より具体的には、以下のようになる。
x.setCC(BigDecimal.valueOf(x.getCC().get()).divide(BigDecimal.valueOf(x.getAA().get()), 8, BigDecimal.ROUND_DOWN).setScale(8, BigDecimal.ROUND_HALF_UP))=> CC = CC / AA ROUNDED
(7)その他
例えば以下のように”set”を”=”に置換する。
wk_xl6.setWK_RISOKUG(wk_xl6.getWK_RISOKUG().checkDigit(BigDecimal.valueOf(wk_xl6.getWK_KEKKA1().get()).multiply(BigDecimal.valueOf(wk_xl6.getWK_KEKKA2().get())).multiply(BigDecimal.valueOf(wk_xl6.getWK_TSUKISU().get())).divide(BizMath.pow(BigDecimal.valueOf(10),7,0),0,BigDecimal.ROUND_DOWN)))=>wk_xl6.WK_RISOKUG = wk_xl6.WK_RISOKUG.checkDigit( wk_xl6.WK_KEKKA1 * wk_xl6.WK_KEKKA2 * wk_xl6.WK_TSUKISU / ( 10 ** 7 ) )
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。すなわち、実際のプログラムにおいて図1の機能ブロックがプログラムモジュールに対応しない場合もある。また、上で述べた処理フローについても同じ結果を得ることができるため並列に実行することができたり、順番を入れ替えたりすることができるステップも存在する。
また、仕様書データ生成装置10はコンピュータ装置であって、図20に示すように、メモリ2501(記憶装置)とCPU2503(処理装置)とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施の形態における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納される。本発明の実施の形態では、上で述べた処理を実施するためのアプリケーション・プログラムはリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
(付記1)
算術演算をメソッド形式で記述したソースプログラムから仕様書データを生成する方法であって、
前記ソースプログラムに含まれ且つ算術演算を規定する算術演算文に含まれる算術演算メソッドについて、予め定められた演算ルールに従った優先度を特定し、算術演算メソッドと優先度とを記憶装置に登録する登録ステップと、
前記算術演算文において複数の算術演算メソッドが含まれており且つ優先度の高い演算メソッドのインスタンスとして優先度の低い算術演算メソッドが規定されていると前記記憶装置に格納されているデータに基づき判断した場合には、前記優先度の低い算術演算メソッドと当該優先度の低い算術演算メソッドのインスタンス及び引数とを所定のルールに従って算術演算記号を用いた第1の部分算式に変換し、当該第1の部分算式に対して優先的な演算を行うことを表すカッコを付し、前記優先度の高い演算メソッドと当該優先度の高い演算メソッドの引数とを前記所定のルールに従って算術演算記号を用いた第2の部分算式に変換して前記第1の部分算式と連結する処理を実施することにより仕様書データを生成し、仕様書データ格納部に格納する生成ステップと、
を含み、コンピュータに実行される仕様書データ生成方法。
(付記2)
前記登録ステップにおいて、
算術演算メソッドについて前記優先度と当該算術演算メソッドのインスタンスに関するデータと当該算術演算メソッドの引数に関するデータとを保持するデータブロックを生成し、前記記憶装置に格納する
ことを特徴とする付記1記載の仕様書データ生成方法。
(付記3)
前記生成ステップが、
変数名と当該変数名の意味を表す語句とが対応付けられて登録されている第1の辞書を参照し、前記第1の部分算式及び前記第2の部分算式に含まれる変数を対応する語句に置換するステップ
を含む付記1記載の仕様書データ生成方法。
(付記4)
前記ソースプログラムを解析して、処理文と当該処理文に関連する条件とを特定し、対応付けて仕様書データ格納部に格納するステップ、
をさらに含み、
前記登録ステップが、前記算術演算文である処理文及び条件について実施される
ことを特徴とする付記1記載の仕様書データ生成方法。
(付記5)
前記生成ステップが、
算式において1項のみを囲うカッコ又はカッコで囲まれる文字のみを囲うカッコが存在するか確認するステップと、
算式において1項のみを囲うカッコ又はカッコで囲まれる文字のみを囲うカッコが存在する場合には、当該カッコを除去するステップと、
を含む付記1記載の仕様書データ生成方法。
(付記6)
前記生成ステップが、
変数の値の意味を表す語句が登録されている第2の辞書を参照し、特定の変数の特定の値に対応する語句を抽出し、前記特定の変数の特定の値に対応して前記仕様書データ格納部に格納するステップ
を含む付記1記載の仕様書データ生成方法。
(付記7)
前記引数に関するデータが、引数が式であるか否かを表すデータを含み、
前記生成ステップが、
前記データブロックを参照して、算術演算メソッドの引数が式であるか判断するステップと、
前記引数が式であると判断された場合には、当該式を前記所定のルールに従って算術演算記号を用いた第3の部分算式に変換し、当該第3の部分算式に対してカッコを付すステップと、
を含む付記2記載の仕様書データ生成方法。
(付記8)
付記1乃至7のいずれか1つ記載の仕様書データ生成方法をコンピュータに実行させるためのプログラム。
(付記9)
算術演算をメソッド形式で記述したソースプログラムから仕様書データを生成する装置であって、
前記ソースプログラムに含まれ且つ算術演算を規定する算術演算文に含まれる算術演算メソッドについて、予め定められた演算ルールに従った優先度を特定し、算術演算メソッドと優先度とを記憶装置に登録する登録手段と、
前記算術演算文において複数の算術演算メソッドが含まれており且つ優先度の高い演算メソッドのインスタンスとして優先度の低い算術演算メソッドが規定されていると前記記憶装置に格納されているデータに基づき判断した場合には、前記優先度の低い算術演算メソッドと当該優先度の低い算術演算メソッドのインスタンス及び引数とを所定のルールに従って算術演算記号を用いた第1の部分算式に変換し、当該第1の部分算式に対して優先的な演算を行うことを表すカッコを付し、前記優先度の高い演算メソッドと当該優先度の高い演算メソッドの引数とを前記所定のルールに従って算術演算記号を用いた第2の部分算式に変換して前記第1の部分算式と連結する処理を実施することにより仕様書データを生成し、仕様書データ格納部に格納する生成手段と、
を有する仕様書データ生成装置。
本発明の実施の形態に係る機能ブロック図である。 本発明の実施の形態に係るメイン処理の処理フローを示す図である。 表変換処理の処理フローを示す図である。 (a)乃至(c)は、変換例を示す図である。 語句辞書に格納されるデータの一例を示す図である。 コード辞書に格納されるデータの一例を示す図である。 式変換処理の処理フローを示す図である。 演算解析処理の処理フローを示す図である。 データブロックの構造を説明するための図である。 算術演算メソッドの優先順位を示す図である。 インスタンス解析処理の処理フローを示す図である。 引数解析処理の処理フローを示す図である。 データブロックの連鎖の具体例を示す図である。 変換処理の処理フローを示す図である。 部分式変換処理の処理フローを示す図である。 第2インスタンス変換処理の処理フローを示す図である。 第2引数変換処理の処理フローを示す図である。 仕様書データの一例を示す図である。 基本変換ルールのテーブルを示す図である。 コンピュータシステムの機能ブロック図である。
符号の説明
1 ソースプログラム格納部 2 構文解析部
3 構文解析結果格納部 4 表変換部
5 表データ格納部 6 式変換部
7 データブロック格納部 8 語句辞書 9 コード辞書
10 仕様書データ生成装置

Claims (5)

  1. 算術演算をメソッド形式で記述したソースプログラムから仕様書データを生成する方法であって、
    前記ソースプログラムに含まれ且つ算術演算を規定する算術演算文に含まれる算術演算メソッドについて、予め定められた演算ルールに従った優先度を特定し、算術演算メソッドと優先度とを記憶装置に登録する登録ステップと、
    前記算術演算文において複数の算術演算メソッドが含まれており且つ優先度の高い演算メソッドのインスタンスとして優先度の低い算術演算メソッドが規定されていると前記記憶装置に格納されているデータに基づき判断した場合には、前記優先度の低い算術演算メソッドと当該優先度の低い算術演算メソッドのインスタンス及び引数とを所定のルールに従って算術演算記号を用いた第1の部分算式に変換し、当該第1の部分算式に対して優先的な演算を行うことを表すカッコを付し、前記優先度の高い演算メソッドと当該優先度の高い演算メソッドの引数とを前記所定のルールに従って算術演算記号を用いた第2の部分算式に変換して前記第1の部分算式と連結する処理を実施することにより仕様書データを生成し、仕様書データ格納部に格納する生成ステップと、
    を含み、コンピュータに実行される仕様書データ生成方法。
  2. 前記登録ステップにおいて、
    算術演算メソッドについて前記優先度と当該算術演算メソッドのインスタンスに関するデータと当該算術演算メソッドの引数に関するデータとを保持するデータブロックを生成し、前記記憶装置に格納する
    ことを特徴とする請求項1記載の仕様書データ生成方法。
  3. 前記生成ステップが、
    算式において1項のみを囲うカッコ又はカッコで囲まれる文字のみを囲うカッコが存在するか確認するステップと、
    算式において1項のみを囲うカッコ又はカッコで囲まれる文字のみを囲うカッコが存在する場合には、当該カッコを除去するステップと、
    を含む請求項1記載の仕様書データ生成方法。
  4. 請求項1乃至3のいずれか1つ記載の仕様書データ生成方法をコンピュータに実行させるためのプログラム。
  5. 算術演算をメソッド形式で記述したソースプログラムから仕様書データを生成する装置であって、
    前記ソースプログラムに含まれ且つ算術演算を規定する算術演算文に含まれる算術演算メソッドについて、予め定められた演算ルールに従った優先度を特定し、算術演算メソッドと優先度とを記憶装置に登録する登録手段と、
    前記算術演算文において複数の算術演算メソッドが含まれており且つ優先度の高い演算メソッドのインスタンスとして優先度の低い算術演算メソッドが規定されていると前記記憶装置に格納されているデータに基づき判断した場合には、前記優先度の低い算術演算メソッドと当該優先度の低い算術演算メソッドのインスタンス及び引数とを所定のルールに従って算術演算記号を用いた第1の部分算式に変換し、当該第1の部分算式に対して優先的な演算を行うことを表すカッコを付し、前記優先度の高い演算メソッドと当該優先度の高い演算メソッドの引数とを前記所定のルールに従って算術演算記号を用いた第2の部分算式に変換して前記第1の部分算式と連結する処理を実施することにより仕様書データを生成し、仕様書データ格納部に格納する生成手段と、
    を有する仕様書データ生成装置。
JP2004326154A 2004-11-10 2004-11-10 仕様書データ生成方法及び装置 Expired - Fee Related JP4673040B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2004326154A JP4673040B2 (ja) 2004-11-10 2004-11-10 仕様書データ生成方法及び装置
US11/065,711 US7694283B2 (en) 2004-11-10 2005-02-25 Method and apparatus for generating specification data

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004326154A JP4673040B2 (ja) 2004-11-10 2004-11-10 仕様書データ生成方法及び装置

Publications (2)

Publication Number Publication Date
JP2006139357A JP2006139357A (ja) 2006-06-01
JP4673040B2 true JP4673040B2 (ja) 2011-04-20

Family

ID=36387960

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004326154A Expired - Fee Related JP4673040B2 (ja) 2004-11-10 2004-11-10 仕様書データ生成方法及び装置

Country Status (2)

Country Link
US (1) US7694283B2 (ja)
JP (1) JP4673040B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7899856B2 (en) * 2007-06-15 2011-03-01 International Business Machines Corporation Hysteresis for mixed representation of Java BigDecimal objects
US8782625B2 (en) * 2010-06-17 2014-07-15 Microsoft Corporation Memory safety of floating-point computations
US9027001B2 (en) * 2012-07-10 2015-05-05 Honeywell International Inc. Systems and methods for verifying expression folding
US11206249B2 (en) * 2019-07-26 2021-12-21 International Business Machines Corporation Enterprise workspaces
US11228575B2 (en) 2019-07-26 2022-01-18 International Business Machines Corporation Enterprise workspaces
CN112947908A (zh) * 2021-02-26 2021-06-11 上海商汤智能科技有限公司 代码生成方法、装置、设备及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002116918A (ja) * 2000-10-10 2002-04-19 Oki Electric Ind Co Ltd プログラムの意味解析方法プログラムの意味解析プログラムを記録した記憶媒体

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06149551A (ja) * 1992-11-06 1994-05-27 Fujitsu Ltd プログラム仕様書自動生成方法
US5742827A (en) * 1992-11-02 1998-04-21 Fujitsu Limited Method of automatically forming program specifications and apparatus therefor
JPH06231081A (ja) * 1993-01-29 1994-08-19 Sharp Corp 数式表示方式
US5499333A (en) * 1995-04-20 1996-03-12 International Business Machines Corporation Method and apparatus for at least partially instantiating an object in a compound document using the object's parent class configuration data when the object's configuration data is unavailable
JPH11259456A (ja) * 1998-03-12 1999-09-24 Toshiba Corp 文書作成装置、数式変換方法、及び記録媒体
US6951010B2 (en) * 2000-09-19 2005-09-27 Fujitsu Limited Program specification generating system

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002116918A (ja) * 2000-10-10 2002-04-19 Oki Electric Ind Co Ltd プログラムの意味解析方法プログラムの意味解析プログラムを記録した記憶媒体

Also Published As

Publication number Publication date
US20060107253A1 (en) 2006-05-18
JP2006139357A (ja) 2006-06-01
US7694283B2 (en) 2010-04-06

Similar Documents

Publication Publication Date Title
US8266585B2 (en) Assisting a software developer in creating source code for a computer program
US9037595B2 (en) Creating graphical models representing control flow of a program manipulating data resources
CN112394942B (zh) 基于云计算的分布式软件开发编译方法及软件开发平台
CN107704382B (zh) 面向Python的函数调用路径生成方法和系统
US8291372B2 (en) Creating graphical models representing control flow of a program manipulating data resources
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
CN109086215B (zh) 一种嵌入式软件单元测试用例生成方法及系统
JP4157016B2 (ja) コンパイラ装置及びコンパイル方法
CN110673854A (zh) Sas语言编译方法、装置、设备及可读存储介质
Wirth The programming language Pascal (Revised report)
US20210365258A1 (en) Method and system for updating legacy software
KR20010024576A (ko) 기계 기술로부터의 명령군 구조의 시뮬레이터 및 어셈블러생성 방법
JP4673040B2 (ja) 仕様書データ生成方法及び装置
KR102614967B1 (ko) 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법
CN112487019B (zh) 用于OpenGauss数据库的解析动态SQL的方法及系统
CN107577476A (zh) 一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质
JP4939007B2 (ja) システム設計支援プログラム
CN101923466B (zh) 装饰器模式的指令的存取方法
US20050071808A1 (en) Generic development tools for embedded software design
JP2006079484A (ja) システム移行に伴うソースプログラム変換プログラム
CN101916179A (zh) 控制寄存器中的标志位的存取方法
Erman et al. System engineering techniques for artificial intelligence systems
JP4371000B2 (ja) Idlコンパイル装置、idlコンパイル方法及びidlコンパイラ
CN115934103A (zh) 节点融合处理方法、装置及电子设备
CN114911474A (zh) 一种基于计算模块的数据处理方法、设备及存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070919

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20101129

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110118

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110120

R150 Certificate of patent or registration of utility model

Ref document number: 4673040

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140128

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees