JP5825231B2 - ソフトウェア設計支援装置及びソフトウェア設計支援方法 - Google Patents

ソフトウェア設計支援装置及びソフトウェア設計支援方法 Download PDF

Info

Publication number
JP5825231B2
JP5825231B2 JP2012195729A JP2012195729A JP5825231B2 JP 5825231 B2 JP5825231 B2 JP 5825231B2 JP 2012195729 A JP2012195729 A JP 2012195729A JP 2012195729 A JP2012195729 A JP 2012195729A JP 5825231 B2 JP5825231 B2 JP 5825231B2
Authority
JP
Japan
Prior art keywords
source code
element information
model
unit
functional requirement
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
JP2012195729A
Other languages
English (en)
Other versions
JP2014052757A (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2012195729A priority Critical patent/JP5825231B2/ja
Publication of JP2014052757A publication Critical patent/JP2014052757A/ja
Application granted granted Critical
Publication of JP5825231B2 publication Critical patent/JP5825231B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

形式的手法を利用してソースコードから形式言語で記述されたモデルを構築するソフトウェア設計支援装置に関する。
ソフトウェア開発において、設計段階で混入する不具合の発覚が下流工程まで持ち越されると、修正のための時間的・金銭的コストが肥大化する問題がある。上流工程の設計段階で動作試験や仕様の性質の検証が可能な形式的手法は、この問題へのひとつの対処法として期待されている。
形式的手法とは、数学的に厳密に定義されたソフトウェア開発手法を総称して指す言葉で、形式言語を用いて仕様を記述し、その仕様の性質を検証、または、証明する手法である。ISO/IEC13817−1で標準化されている言語VDM−SL(Vienna Development Method−Specification Language)を用いた手法VDMや、Bメソッドと呼ばれる手法などがある。一般的なソフトウェア開発では、自然言語や準形式言語(例えば、図や記号など)で仕様を記述するため、曖昧な表現や解釈の取り違え、記述の抜け落ちが生じやすいが、形式的手法を用いることで仕様を一意に記述できる。また、ツールを用いて仕様の動作を確認することも可能である。
形式的手法を用いて仕様の性質を検証する方法は主に2つあり、モデル検査と定理証明である。モデル検査は、形式言語で記述された仕様(モデル)の実行可能パスをすべて動的に実行し、証明の対象となる性質に反例がないことを確認する手法の総称である。SPINは、モデル検査の代表的な例である。もうひとつの手法である定理証明は、モデルの実行可能パスをすべて網羅的に試すのではなく、数学的推論を使って、証明の対象となる性質が、モデルの上で数学的に成り立っていることを示す手法の総称である。前述のBメソッドや、Coq、Isabelleなどは定理証明の代表的な例である。
定理証明では、モデルと証明の対象となる性質、また必要であれば証明の道程を特定する定理集合やその適用順序などを入力とするのが一般的である。証明の対象となる性質は、「変数Aはいかなる関数を実行したとしても必ず0以下の値は取らない」、「変数Bの条件を満たす値に対し、変数Cの条件を満たす値が必ず1つ以上存在する」などの論理式で表される。定理証明ツールの持つ定理集合及び推論方式を利用して、その論理式が真であるかどうか証明する。定理証明は、実行可能パス空間の大きさに左右されず、モデル検査よりも包括的かつ数学的厳密に検証することができる。
従来、形式言語によるモデルの記述は、自然言語で記述された仕様を基に人手で行われている。人手によるモデルの記述には、仕様の規模にもよるが数週間〜数ヶ月の時間を必要とし、仕様が頻繁に変更される昨今のソフトウェア開発にはそぐわない。また、ソフトウェア開発では、一から仕様を起こして製品を作ることはほとんどなく、多くは前バージョンの製品の仕様を一部改修したり、何世代かの製品に渡って使用してきたソフトウェアモジュールなどを利用したりするのが一般的である。このような場合も、従来では一から人手でモデルを記述する必要があった。また、人手が介在することによりモデルにヒューマンエラーが混入する可能性があった。
そこで、形式的手法を用いてソースコードの検証を行う研究が進められている。ソースコードの検証を行う際に、検証の前提条件が影響するソースコード範囲を検証前に決定し、その範囲だけを検証することによって検証時間を短縮する技術が提示されている。(下記特許文献1参照)
また、ソースコードをブーリアン表現に翻訳し、SATベースのモデル検査を適用することで、ソースコードの状態遷移を検証する技術が提示されている。ソースコード中の各基本ブロックを最小構成要素として翻訳し、ブロック間の遷移をモデル検査で検証する手法である。(下記特許文献2参照)
特開2008−191963 特表2007−528059
しかしながら、特許文献1ではソースコードの検証を具体的にどのように行うかについては提示されていない。また、特許文献2はブロック間の遷移を検証するものであって、ブロック内の処理を検証することはできない。
本発明は、上記に鑑みてなされたものであって、ソースコードからステートメント単位でモデルを構築して検証するソフトウェア設計支援装置を得ることを目的としている。ステートメントとは、制御や宣言などを行うためにプログラミング言語の言語仕様にあらかじめ組み込まれている命令語を用いて記述された一つの命令文のことである。
本発明のソフトウェア設計支援装置は、抽象化フィルタ作成部により作成された抽象化フィルタによって、関数や変数、定数から成る要素情報を含むソースコードから機能要件に関連する要素情報を含むステートメントを抽出し、ソースコードが記述されたソースコード記述言語から形式言語への書換規則に基づいて、モデル構築部が1以上のステートメントの集合である部分ソースコードから形式言語で記述されたモデルを構築するようにしたものである。
本発明によれば、ソースコードからステートメント単位でモデルを構築し、検証することが可能である。
実施の形態1に係るソフトウェア設計支援装置を示すブロック図。 実施の形態1に係るユーザ関数リスト、大域変数リスト、大域定数リストの例を示す図。 実施の形態1に係る抽象化フィルタ作成部の動作を示すフローチャート。 実施の形態1に係る選択可能機能要件リスト、選択可能ユーザ関数リスト、選択可能大域変数リスト、選択可能大域定数リストの例を示す図。 実施の形態1に係る抽象化フィルタ作成部により作成された抽象化フィルタの例を示す図。 実施の形態1に係る機能要件に対応した抽象化フィルタによりモデルが抽出される過程を示す図。 実施の形態1に係る書換規則テーブルの例を示す図。 実施の形態2に係るソフトウェア設計支援装置を示すブロック図。 実施の形態2に係る機能要件と関連する要素情報とを対応付ける要素情報リストの例を示す図。 実施の形態2に係るコード修正支援部の動作を示すフローチャート。 実施の形態2に係る修正対象候補リストの例を示す図。 実施の形態4に係るソフトウェア設計支援装置を示すブロック図。
実施の形態1.
図1は、実施の形態1に係るソフトウェア設計支援装置100を示すブロック図である。ソフトウェア設計支援装置100は、UI(User Interface)101からソースコード102が入力されるとソースコード解析部103に出力し、ソースコード解析部103においてソースコード102を解析し、解析した情報を解析情報蓄積部104へ蓄積する。抽象化フィルタ作成部105は、UI101を介してユーザに問い合わせながら、仕様106に記載された機能要件と、解析情報蓄積部104に蓄積されたソースコード102の解析情報とを関連付けて抽象化フィルタ107を作成する。
抽象化フィルタ107は、UI101を介して入力されたソースコード102をフィルタリングし、モデル構築部108へ出力する。モデル構築部108は、フィルタリングされたソースコード102からモデル111を構築する。このとき、モデル構築部108は書換規則テーブル109に格納されたソースコード記述言語から形式言語への書換規則書換規則を適用する。モデル構築部108は、構築されたモデル111の内部に矛盾がないか外部の定理証明器110で証明した後、モデル111を出力する。
ソースコード102は、C言語などのプログラミング言語でプログラムが記述されているものを想定する。ソースコード102は、コンパイル済みのオブジェクトファイルなど、プログラムの制御構造が抽出できないものでない限り、記述言語、方式は問わない。
ソースコード102をソースコード解析部にて解析した結果を図2に示す。図2は、実施の形態1に係るユーザ関数リスト200、大域変数リスト201、大域定数リスト202の例を示す図である。
ソースコード解析部103は、ソースコード102の制御構造を解析する。制御構造とは、ソースコード102内で規定されている関数、その入力変数及び戻値、関数内部で定義される局所変数、局所定数、大域変数、大域定数など、ソースコード102の機能を実現するための要素情報及びそれらの間の依存関係を指す。ソースコード解析部103は、これらの解析情報を抽出し、解析情報蓄積部104に蓄積する。蓄積の形態は特に限定しないが、例えば、図2に示すリストとなる。
ユーザ関数リスト200は、ソースコード102中で定義されるユーザ関数を、その入力変数、戻値、内部で使用する局所変数や局所定数の名称とともに、関数1、関数2、といった一意の識別子で管理する。大域変数リスト201は、ソースコード102内で定義されている大域変数を、使用されるユーザ関数とともに、大域変数1、大域変数2、といった一意の識別子で管理する。大域定数リスト202は、ソースコード102内で定義されている大域定数を、使用されるユーザ関数とともに、大域定数1、大域定数2、といった一意の識別子で管理する。
仕様106は、ソースコード102が満たすべき性質(機能要件)が自然言語や準形式言語で記述されたものである。ユーザは、仕様106から機能要件を抽出する。抽出される機能要件は、例えば、「暗号化のための暗号鍵の格納は、アクセス権限のある管理者のみが可能である」といったものである。仕様106や機能要件は、以後説明する処理を行うことができるものであれば、記法や記述の仕方は問わない。本実施の形態では、4個の機能要件が抽出されたと仮定して説明する。
次に抽象化フィルタ作成部105の動作を説明する。
図3は、実施の形態1に係る抽象化フィルタ作成部105の動作を示すフローチャートである。抽象化フィルタ作成部105は、解析情報蓄積部104に蓄積された解析情報から機能要件に関連する要素情報を抽出し、抽象化フィルタ107を作成する。
図4は、実施の形態1に係る選択可能機能要件リスト400、選択可能ユーザ関数リスト401、選択可能大域変数リスト402、選択可能大域定数リスト403の例を示す図である。選択可能機能要件リスト400、選択可能ユーザ関数リスト401、選択可能大域変数リスト402、選択可能大域定数リスト403は、図3のフローチャートにおいて各項目が選択可能または選択済を示すリストで、初期値はすべて選択可能に設定しておき、フローチャートの処理に従って選択済に変更する。図3のフローチャートにおいて、選択可能ユーザ関数リスト401は、図2に示すユーザ関数リスト200とあわせて1つのリストとしてもよい。選択可能大域変数リスト402、選択可能大域定数リスト403についても同様に、大域変数リスト201、大域定数リスト202と合わせて各々一つのリストとしてもよい。
図5は、実施の形態1に係る抽象化フィルタ作成部105により作成された抽象化フィルタ107a〜dの例を示す図である。
抽象化フィルタ作成部105は、図3のステップS300より処理を開始する。ステップS301へ進み、抽象化フィルタ作成部105は、UI101を通して選択可能機能要件リスト400において選択可能な機能要件をユーザに提示する。抽象化フィルタ作成部105はユーザに機能要件を1つ選択させると(機能要件iとする)、ステップS302へ進む。ステップS302において、抽象化フィルタ作成部105は、選択可能ユーザ関数リスト401を参照し、選択可能なユーザ関数が残されているか調べる。残されていればステップS303へ進み、残されていなければステップS306へ進む。ステップS303において、抽象化フィルタ作成部105は、選択可能ユーザ関数リスト401からユーザ関数を1つ選択し(ユーザ関数jとする)、ステップS304へ進む。
ステップS304において、抽象化フィルタ作成部105は、ユーザ関数jが機能要件iと関連するかを、UI101を通してユーザに問い合わせる。ユーザが関連すると回答した場合は、選択可能ユーザ関数リスト401のユーザ関数jを選択済とし、ステップS305へ進む。関連しないと回答した場合は、選択可能ユーザ関数リスト401のユーザ関数jを選択済とし、ステップS302へ進む。ステップS305において、抽象化フィルタ作成部105は、抽象化フィルタiにユーザ関数jを追加し、ステップS302に戻る。
ステップS306において、抽象化フィルタ作成部105は、選択可能大域変数リスト402に選択可能な大域変数が残されているか調べる。残されていればステップS307へ進む。残されていなければステップS310へ進む。ステップS307において、抽象化フィルタ作成部105は、選択可能大域変数リスト402から大域変数を1つ選択し(大域変数kとする)、ステップS308へ進む。ステップS308において、抽象化フィルタ作成部105は、大域変数kが機能要件iと関連するかを、UI101を通してユーザに問い合わせる。
ユーザが関連すると回答した場合は、抽象化フィルタ作成部105は、選択可能大域変数リスト402の大域変数kを選択済とし、ステップS309へ進む。関連しないと回答した場合は、選択可能大域変数リスト402の大域変数kを選択済とし、ステップS306へ進む。ステップS309において、抽象化フィルタ作成部105は、抽象化フィルタiに大域変数kと大域変数kを内部で使用するユーザ関数を追加し、ステップS306へ進む。ただし、そのユーザ関数がすでに抽象化フィルタiに追加されている場合は再追加しない。
ステップS310において、抽象化フィルタ作成部105は、選択可能大域定数リスト403に選択可能な大域定数が残されているか調べる。残されていればステップS311へ進む。残されていなければ、ステップS314へ進む。ステップS311において、抽象化フィルタ作成部105は、選択可能大域定数リスト403から大域定数を1つ選択し(大域定数lとする)、ステップS312へ進む。ステップS312において、抽象化フィルタ作成部105は、大域定数lが機能要件iと関連するかを、UI101を通してユーザに問い合わせる。
ユーザが関連すると回答した場合、抽象化フィルタ作成部105は、選択可能大域定数リスト403の大域定数lを選択済とし、ステップS313へ進む。関連しないと回答した場合、抽象化フィルタ作成部105は、選択可能大域定数リスト403の大域定数lを選択済とし、ステップS310へ進む。ステップS313において、抽象化フィルタ作成部105は、抽象化フィルタiに大域定数lと大域定数lを内部で使用するユーザ関数を追加し、ステップS310へ進む。ただし、そのユーザ関数がすでに抽象化フィルタiに追加されている場合は再追加しない。
ステップS314において、抽象化フィルタ作成部105は、選択可能機能要件リスト400に選択可能な機能要件が残されているか調べる。選択可能な機能要件が残されている場合、抽象化フィルタ作成部105は、選択可能ユーザ関数リスト401、選択可能大域変数リスト402、選択可能大域定数リスト403をすべて選択可能に設定し、ステップS301に戻る。選択可能な機能要件が残されていなければステップS315へ進み、処理を終了する。このようにして作成された抽象化フィルタ107は、例えば図5に示すものとなり、機能要件に関連する関数や大域変数、大域定数から成る。
次に、ソフトウェア設計支援装置100が抽象化フィルタ107を利用してモデル111を構築する動作を説明する。
図6は、実施の形態1に係る機能要件に対応した抽象化フィルタ107a〜dによりモデル111a〜dが抽出される過程を示す図である。抽象化フィルタ107a〜dは、抽象化フィルタ作成部105によって作成されたものである。
図7は、実施の形態1に係る書換規則テーブル109の例を示す図である。図7は、ソースコード記述言語をC言語、形式言語をB言語としたときの書換規則テーブル109に格納された書換規則の例である。変数名や定数名は、形式言語における構文規則などに特に支障がない限りそのまま使用する。
抽象化フィルタ107a〜dは、ソースコード102を入力として、各機能要件に関連する関数や大域変数、大域定数が含まれるステートメントを抽出する。1つのフィルタからステートメントが1以上抽出され、1つのフィルタから抽出されたステートメントの集合を部分ソースコード600a〜dと呼ぶこととする。
モデル構築部108は、書換規則テーブル109に格納された書換規則を適用することにより、ソースコード記述言語で記述された部分ソースコード600a〜dを形式言語へステートメント単位で書き換え、モデル111a〜dを構築する。構築されたモデル111a〜dは、内部で矛盾を起こしていないことを証明するため、定理証明器111にかけられる。定理証明器111は、ソフトウェア設計支援装置100が想定する形式言語に対応した証明ツールで、特定の方式に用途を限定するものではない。ソフトウェア設計支援装置100は、定理証明器111により内部に矛盾がないことが証明されたモデル111a〜dを出力する。
したがって、本実施の形態では、関数や変数、定数から成る要素情報を含むソースコード102から機能要件に関連する要素情報を含むステートメントを抽出する抽象化フィルタ107a〜dを作成する抽象化フィルタ作成部105と、ソースコード102が記述されたソースコード記述言語から形式言語への書換規則に基づいて、1以上のステートメントの集合である部分ソースコード600a〜dから形式言語で記述されたモデル111a〜dを構築するモデル構築部108と、を備えているので、ソフトウェア設計支援装置100はソースコード102から形式言語で記述されたモデル111をステートメント単位で構築し、検証することが可能である。
また、ステートメント単位でモデル111を構築することにより、元のソースコード102に近い形でモデル111を構築できるため、検証できる性質も細かく指定することができる。現状の仕様を元にしたソフトウェア開発においては、構築されたモデル111に修正を加えることで、効率的に修正することができる。
さらに、自然言語で記述された仕様から人手でモデル111を記述する場合と比較して開発者の負荷を軽減し、短期間でのソフトウェア開発を実現する。また、人手による不具合混入を低減し、モデル構築者の技量によって出ていたモデル111の質の差をなくすことができる。
実施の形態2.
以上の実施の形態1では、抽象化フィルタ作成部105により作成された抽象化フィルタ107によってソースコード102から機能要件と関連する部分ソースコード600a〜dを抽出し、ソースコード102が記述されたソースコード記述言語から形式言語への書換規則を定義した書換規則に基づいて、モデル構築部108が部分ソースコード600a〜dから形式言語で記述されたモデル111を構築するようにしたものであるが、本実施の形態においては、機能要件が変更された場合にソフトウェア設計支援装置800がソースコード102の修正を支援する実施の形態を示す。
なお、実施の形態2におけるコード修正支援部801と抽象化フィルタ作成部105以外の部分は実施の形態1と同じであるため、説明を割愛する。
図8は、実施の形態2に係るソフトウェア設計支援装置800を示すブロック図である。コード修正支援部801は、UI101を通して機能要件の変更がユーザより通知されると、抽象化フィルタ作成部105に当該機能要件に関連する要素情報を問い合わせ、UI101を通してユーザへ提示する。
図9は、実施の形態2に係る機能要件と関連する要素情報とを対応付ける要素情報リスト900の例を示す図である。抽象化フィルタ作成部105は、抽象化フィルタ107を作成する際、機能要件と関連する要素情報とを対応付けてあらかじめ要素情報リスト900を作成しておく。抽象化フィルタ作成部105は、要素情報リスト900を作成する際に、機能要件をより細分化して関連する要素情報と関連付けて記憶させてもよい。機能要件を細分化することにより、変更に関連する要素情報が絞り込まれ、修正対象候補リスト1100に格納される要素情報も絞り込まれる。よって、ユーザはより効率的にソースコード102を修正することができる。
図10は、実施の形態2に係るコード修正支援部801の動作を示すフローチャートである。
図11は、実施の形態2に係る修正対象候補リスト1100の例を示す図である。コード修正支援部801が修正対象候補リスト1100を作成する。
次に、コード修正支援部801の動作を図10を用いて説明する。
コード修正支援部801は、ユーザよりUI101を通して変更のある機能要件(機能要件xとする)が入力されると、ステップS1000より処理が始まる。処理はステップS1001へ進み、コード修正支援部801は、ユーザから提示された機能要件xに関連する要素情報を抽象化フィルタ作成部105に問い合わせる。抽象化フィルタ作成部105は要素情報リスト900を参照し、機能要件xに関連する要素情報をコード修正支援部801へ通知する。処理はステップS1002へ進む。
ステップS1002において、コード修正支援部801は、機能要件xに関連する要素情報を修正対象候補リスト1100に追加し、ステップS1003へ進む。コード修正支援部801は、修正対象候補リスト1100に機能要件と当該機能要件に関連する要素情報とを格納する。修正対象候補リスト1100は、例えば図11に示すようなリストとなる。処理はステップS1003へ進む。
ステップS1003において、コード修正支援部801は、機能要件xに関連する要素情報について機能要件x以外の機能要件に関連するか抽象化フィルタ作成部105に問い合わせる。機能要件xに関連する要素情報が複数存在する場合、コード修正支援部801は各要素情報について機能要件x以外の機能要件に関連するか抽象化フィルタ作成部105に問い合わせる。抽象化フィルタ作成部105は、各要素情報について機能要件x以外に関連する機能要件があればコード修正支援部801へ通知する。関連する機能要件(機能要件yとする)があれば処理はステップS1004へ進み、関連する機能要件が1つもなければステップS1006へ進む。
ステップS1004において、コード修正支援部801は抽象化フィルタ作成部105から通知された機能要件yについて、変更があるかどうかユーザに問い合わせる。機能要件yに変更があればステップS1005へ進み、機能要件yに変更がなければステップS1006へ進む。なお、抽象化フィルタ作成部105から通知された機能要件が複数ある場合は、各機能要件について変更があるかどうかユーザに問い合わせる。変更のある機能要件があればステップS1005へ進み、変更のある機能要件が1つもなければステップS1006へ進む。
ステップS1005において、コード修正支援部801は、変更のある機能要件yに関連する要素情報を抽象化フィルタ作成部105に問い合わせ、修正対象候補リスト1100に追加し、ステップS1006へ進む。ステップS1006において、コード修正支援部801は、修正対象候補リスト1100に記載されているすべての要素情報をユーザへ提示する。処理はステップS1007へ進み、終了する。
したがって、本実施の形態では、抽象化フィルタ作成部105は抽象化フィルタ107を作成する際に機能要件と関連する要素情報とを対応付けた要素情報リスト900を作成し、機能要件が変更された場合に、要素情報リスト900に基づいて抽象化フィルタ作成部105から通知される変更された機能要件に関連する要素情報を提示するコード修正支援部801を備えているので、機能要件に変更があってソースコード102を修正する場合に、ユーザは当該機能要件と関連する要素情報を把握して的確にソースコードを修正することができる。
また、コード修正支援部801は、機能要件が変更され、関連する要素情報が他の機能要件にも関連し、他の機能要件に変更がある場合、要素情報リスト900に基づいて抽象化フィルタ作成部105から通知される他の機能要件に関連する要素情報を提示するので、ユーザは一部の機能要件の修正が影響を及ぼす他の機能要件を把握することができ、的確にソースコード102を修正することができる。
実施の形態3.
以上の実施の形態2では、機能要件が変更された場合にソースコード102の修正を支援するものであるが、本実施の形態においては、機能要件の変更に伴うモデル111の修正を支援する実施の形態を示す。
なお、実施の形態2におけるコード修正支援部801とモデル構築部108以外の部分は実施の形態2と同じであるため、説明を割愛する。
モデル構築部108は、モデル111を作成する際、あらかじめ機能要件と関連するモデル111とを対応付けて記憶しておく。コード修正支援部801は、UI101を通して機能要件の変更がユーザより通知されると、当該機能要件に関連するモデル111をモデル構築部108に問い合わせ、UI101を通してユーザへ提示する。
したがって、本実施の形態では、モデル構築部108はモデル111を構築する際に機能要件とモデルとの対応付けを保持し、機能要件が変更された場合に、対応付けに基づいてモデル構築部108から通知される変更された機能要件に関連するモデル111を提示するコード修正支援部801を備えているので、機能要件に変更があってモデル111を修正する場合に、ユーザは当該機能要件と関連するモデル111を的確に修正することができる。
実施の形態4.
以上の実施の形態3では、機能要件の変更に伴うモデル111の修正を支援するものであるが、本実施の形態においては、複数の書換規則から選択してモデル111を構築する実施の形態を示す。
なお、実施の形態4における書換規則テーブル1201、書換規則選択部1202以外の部分は実施の形態1と同じであるため、説明を割愛する。
さらに、以下は、実施の形態1に対する変更について説明するが、実施の形態2または実施の形態3に対する変更としても構成可能である。
書換規則選択部1101の動作を説明する。
図12は、実施の形態4に係るソフトウェア設計支援装置1200を示すブロック図である。書換規則テーブル1201は複数の書換規則を保持し、書換規則選択部1202は書換規則テーブル1201からモデル構築に適用する書換規則を選択する。
書換規則テーブル1201は、1つのソースコード記述言語に対して複数の形式言語への書換規則を保持する。通常、書換規則選択部1202はモデル構築の際に適用する書換規則を1つ決めておく。書換規則をユーザに選択させる場合、書換規則選択部1202はUI101を通してユーザに選択肢となる書換規則を提示して、選択させる。
また、モデル111を定理証明器110にかけた際に、タイムアウトやメモリが不足して証明がうまくいかなかった場合、モデル構築部108は書換規則選択部1202へ通知する。書換規則選択部1202は書換規則テーブル1201から他の書換規則を選択してモデル構築部108に通知し、モデル構築部108は通知された書換規則を適用してモデル111を構築する。このとき、書換規則選択部1201が他の書換規則をユーザに提示して選択させてもよい。形式言語の違いは、ユーザにとってモデル111が読みやすく保守しやすいかどうかや定理証明の容易さに影響する。
なお、ソフトウェア設計支援装置1200は、機能要件の変更に伴うソースコード102の修正を支援するコード修正支援部801をあわせて保持してもよい。
したがって、1つのソースコード記述言語から複数の形式言語への書換規則を保持する書換規則テーブル1201と、書換規則テーブル1201から書換規則を選択する書換規則選択部1202を備えているので、モデル構築の際に適用する書換規則を変更することにより、ユーザにとって読みやすく保守のしやすさを優先するか、形式言語が複雑になっても定理証明を容易にするかといったユーザの要望に合わせたモデル111の構築が可能になる。
また、書換規則選択部1202は書換規則テーブル1201の書換規則を提示して選択させるようにしているので、ユーザがモデルを記述する形式言語を選択することができる。
100、800、1200 ソフトウェア設計支援装置
101 UI
102 ソースコード
103 ソースコード解析部
104 解析情報蓄積部
105 抽象化フィルタ作成部
106 仕様
107、107a〜d 抽象化フィルタ
108 モデル構築部
109、1201 書換規則テーブル
110 定理証明器
111、111a〜d モデル
200 ユーザ関数リスト
201 大域変数リスト
202 大域定数リスト
400 選択可能機能要件リスト
401 選択可能ユーザ関数リスト
402 選択可能大域変数リスト
403 選択可能大域定数リスト
600a〜d 部分ソースコード
801 コード修正支援部
900 要素情報リスト
1100 修正対象候補リスト
1202 書換規則選択部

Claims (7)

  1. 関数や変数、定数から成る要素情報を含むソースコードから機能要件に関連する前記要素情報を含むステートメントを抽出する抽象化フィルタを作成する抽象化フィルタ作成部と、
    前記ソースコードが記述されたソースコード記述言語から形式言語への書換規則に基づいて、1以上の前記ステートメントの集合である部分ソースコードから前記形式言語で記述されたモデルを構築するモデル構築部と、
    を備えることを特徴とするソフトウェア設計支援装置。
  2. 前記抽象化フィルタ作成部は、前記抽象化フィルタを作成する際に機能要件と関連する前記要素情報とを対応付けた要素情報リストを作成し、
    コード修正支援部は、機能要件が変更された場合に、前記要素情報リストに基づいて前記抽象化フィルタ作成部から通知される変更された機能要件に関連する前記要素情報を提示することを特徴とする請求項1に記載のソフトウェア設計支援装置。
  3. 前記コード修正支援部は、機能要件が変更され、関連する前記要素情報が他の機能要件にも関連し、前記他の機能要件に変更がある場合、前記要素情報リストに基づいて前記抽象化フィルタ作成部から通知される前記他の機能要件に関連する前記要素情報を提示する
    ことを特徴とする請求項2に記載のソフトウェア設計支援装置。
  4. 前記モデル構築部は、モデルを構築する際に機能要件とモデルとの対応付けを保持し、
    前記コード修正支援部は、機能要件が変更された場合に、前記対応付けに基づいて前記モデル構築部から通知される変更された機能要件に関連するモデルを提示することを特徴とする請求項2または3に記載のソフトウェア設計支援装置。
  5. 1つのソースコード記述言語から複数の形式言語への書換規則を保持する書換規則テーブルと、
    前記書換規則テーブルから前記書換規則を選択する書換規則選択部
    を備えることを特徴とする請求項1乃至4のいずれか一項に記載のソフトウェア設計支援装置。
  6. 前記書換規則選択部は、前記書換規則テーブルの前記書換規則を提示して選択させることを特徴とする請求項5に記載のソフトウェア設計支援装置。
  7. 関数や変数、定数から成る要素情報を含むソースコードから機能要件に関連する前記要素情報を含むステートメントを抽出する抽象化フィルタを作成する抽象化フィルタ作成ステップと、
    前記ソースコードが記述されたソースコード記述言語から形式言語への書換規則に基づいて、1以上の前記ステートメントの集合である部分ソースコードから前記形式言語で記述されたモデルを構築するモデル構築ステップと、
    を有するソフトウェア設計支援方法。
JP2012195729A 2012-09-06 2012-09-06 ソフトウェア設計支援装置及びソフトウェア設計支援方法 Expired - Fee Related JP5825231B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012195729A JP5825231B2 (ja) 2012-09-06 2012-09-06 ソフトウェア設計支援装置及びソフトウェア設計支援方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012195729A JP5825231B2 (ja) 2012-09-06 2012-09-06 ソフトウェア設計支援装置及びソフトウェア設計支援方法

Publications (2)

Publication Number Publication Date
JP2014052757A JP2014052757A (ja) 2014-03-20
JP5825231B2 true JP5825231B2 (ja) 2015-12-02

Family

ID=50611217

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012195729A Expired - Fee Related JP5825231B2 (ja) 2012-09-06 2012-09-06 ソフトウェア設計支援装置及びソフトウェア設計支援方法

Country Status (1)

Country Link
JP (1) JP5825231B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7085938B2 (ja) * 2018-08-03 2022-06-17 三菱電機株式会社 変更影響分析装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008191963A (ja) * 2007-02-06 2008-08-21 Nec Corp ソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラム
JP2012059026A (ja) * 2010-09-09 2012-03-22 Hitachi Ltd ソースコード変換方法およびソースコード変換プログラム

Also Published As

Publication number Publication date
JP2014052757A (ja) 2014-03-20

Similar Documents

Publication Publication Date Title
Kästner et al. Type checking annotation-based product lines
WO2012032890A1 (ja) ソースコード変換方法およびソースコード変換プログラム
US8291372B2 (en) Creating graphical models representing control flow of a program manipulating data resources
WO2012057170A1 (ja) ソースコード変換方法およびソースコード変換プログラム
US20080276221A1 (en) Method and apparatus for relations planning and validation
Durán et al. FLAME: a formal framework for the automated analysis of software product lines validated by automated specification testing
WO2007001108A1 (en) System for providing feature-oriented software product line engineering environment
US20070129931A1 (en) Apparatus and method for supporting prototype development of embedded system
US20180107587A1 (en) Command coverage analyzer
CN106776334A (zh) 基于注释生成测试用例方法及装置
Oakes et al. Full contract verification for ATL using symbolic execution
CN105389262A (zh) 一种针对界面测试生成测试建议的方法和装置
Strüber et al. Scalability of Model Transformations: Position Paper and Benchmark Set.
JP6692281B2 (ja) テストケース生成装置、及びテストケース生成方法
Nieke et al. Guiding the evolution of product-line configurations
WO2021086704A1 (en) Rules generation using learned repetitive code edits
JP5825231B2 (ja) ソフトウェア設計支援装置及びソフトウェア設計支援方法
KR20070058943A (ko) 소프트웨어 아키텍처 평가 장치 및 방법
JP2012181666A (ja) 情報処理装置、情報処理方法及び情報処理プログラム
Pitchford Embedded software quality, integration, and testing techniques
Ferreira Filho et al. Generating counterexamples of model-based software product lines
Lengyel et al. Test-driven verification/validation of model transformations
Turner et al. Simulating Interaction Sequences
Slotosch Model-based tool qualification: The roadmap of eclipse towards tool qualification
JP2015133031A (ja) プログラム分析装置及びプログラム分析方法

Legal Events

Date Code Title Description
RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20140327

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140930

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150619

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150630

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150827

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: 20150915

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150928

R151 Written notification of patent or utility model registration

Ref document number: 5825231

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees