JPH09237191A - プログラミング支援装置、プログラミング支援方法、及びプログラミング支援プログラムを記録した媒体 - Google Patents

プログラミング支援装置、プログラミング支援方法、及びプログラミング支援プログラムを記録した媒体

Info

Publication number
JPH09237191A
JPH09237191A JP8347053A JP34705396A JPH09237191A JP H09237191 A JPH09237191 A JP H09237191A JP 8347053 A JP8347053 A JP 8347053A JP 34705396 A JP34705396 A JP 34705396A JP H09237191 A JPH09237191 A JP H09237191A
Authority
JP
Japan
Prior art keywords
program
sections
execution
execution path
branch
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.)
Granted
Application number
JP8347053A
Other languages
English (en)
Other versions
JP3641090B2 (ja
Inventor
Naoshi Uchihira
直志 内平
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP34705396A priority Critical patent/JP3641090B2/ja
Publication of JPH09237191A publication Critical patent/JPH09237191A/ja
Application granted granted Critical
Publication of JP3641090B2 publication Critical patent/JP3641090B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】 超逐次プログラミングにおいて、信頼性の高
い並行プログラムを容易に開発する。 【解決手段】 エディタ1でプログラムを作成する。区
分手段2が、プログラムのプロセスを実行制御可能なセ
クションに区分する。検出手段3がプログラム中のセク
ション間の依存関係を検出する。生成手段4が、各プロ
セスの各セクションのありうる挙動順序をシナリオで表
す。選択手段6によって、依存関係に係るシナリオ中の
各分岐について、先に実行すべきセクションのエッジが
選択されると、意図する実行順序の組み合わせのみから
なるシナリオが生成される。このようなシナリオに基づ
いて、変換手段9が、第1のプログラムを、実行タイミ
ング制御の命令の挿入によって第2のプログラムに変換
すると、第2のプログラムには悪い非決定性が存在しな
い。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プログラミングを
支援するプログラミング支援装置及びプログラミング支
援方法の改良に関するもので、特に、信頼性の高い並行
プログラムを容易に開発するものに係る。
【0002】
【従来の技術】近年、半導体集積回路技術の進歩によ
り、複雑なプロセッサ及び大容量のメモリが小型かつ低
価格で実現できるようになり、多数のプロセッサからな
る並行処理システムや分散処理システムが実用化されて
いる。このようなハードウエアに対しては、専用のプロ
グラム、すなわち並列プログラムや分散処理プログラム
等(以下「並行プログラム(Concurrent Program=CP) 」
という)を用いなければならない。
【0003】この並行プログラムは、複数のプロセスが
同時並行的に動作するプログラムであって、その一類型
は、複数のCPUを有する並列計算機上で、複数のプロ
グラムが物理的に並行に動くプログラムである。また、
単一のCPU上で物理的には逐次的に動作する場合で
も、マルチタスクシステムのように複数のプロセスが論
理的に並行に動作するプログラムは、並行プログラムに
含まれる。なお、このように物理的または論理的な並行
性を持つシステムを並行システムと呼び、並行システム
では一般に並行プログラムが動作する。このような並行
プログラムをいかに効率よく開発するかは、優れたアル
ゴリズムを検討する場合と同様に重要な課題となってい
る。
【0004】ところで、プログラム開発においては、プ
ログラム中のバグを見付け修正すること(すなわち、テ
スト・デバッグ)と呼ばれる開発工程がプログラム開発
の効率に大きく影響する。しかし、並行プログラムの開
発においては、逐次プログラムの開発においては遭遇す
ることのない、並行プログラム特有の問題を考慮する必
要がある。この並行プログラム特有の問題とは、並行プ
ログラムを構成する各プロセスは、各プロセス間におけ
る相互作用のタイミングによる様々な振る舞いをする可
能性があるため、並行プログラム全体が正しく動作しな
いという問題である。この問題は、並行プログラムの性
質に基づく問題であり、一般に「非決定性(nondetermi
nism)」と呼ばれる。
【0005】非決定性は、よい非決定性、悪い非決定
性、無害の非決定性に分けられる。このうち、よい非決
定性は、(プログラムの)設計者の実現したい非決定性
であり、この非決定性により、外部(環境)からの非決
定的な刺激に適切に反応でき、プロセスの柔軟性、再利
用性、拡張性を実現できる。
【0006】一方、悪い非決定性は、設計者が予想ない
し期待しない非決定性であり、しばしばプログラムの機
能不全を生じさせる。すなわち、人間の一般的思考形態
は逐次であり、設計者が逐次的に思考した場面が、並行
プログラムの複数のプロセス間で実際に生じ得る場面の
すべてを網羅することは困難である。このため、設計時
には予想しなかったケースが、実際の並行プログラムの
実行では多々発生する。
【0007】無害の非決定性は、非決定的な選択子の選
択が、実行効率には影響があっても、最終的に得られる
結果には悪影響を与えない場合の非決定性である。
【0008】以下、上記悪い非決定性について示す。例
えば、図33に示す並行プログラムを考慮する。図33
(a)において、プロセスP1は、共有メモリMの初期
設定(init)を行うプロセス、プロセスP2は、共
有メモリMから読み出し(read)を行うプロセス、
プロセスP3は、共有メモリMに書込み(write)
を行うプロセスを示す。これらのプロセスをそれぞれ異
なるプロセッサで実行するような並行処理システム等で
動作させた場合、図33(b)に示すように、全部で6
通りの動作の組み合わせがあることになる。通常、シス
テムは初期設定で処理を開始するため、今、プロセスP
1(init)→P2(read)→P3(writ
e)又はP1(init)→P3(write)→P2
(read)の順番でプログラムが動作する場合に正し
い結果が得られるものとすれば、残りの4通り(例えば
P2→P3→P1)は、初期化が最初に行われないた
め、明らかに正しい結果が得られないことがわかる。
【0009】上記のようにプロセスの振る舞いに関する
非決定性は、並行プログラムを動作させる毎に、その時
点におけるシステムの状況等によって結果が異なったも
のになる。従って、この非決定性に関する問題を解決し
ない限り、その並行プログラムは、テストにおいてたと
え正常に動作することがあっても、常に正常に動作する
という保証はない。
【0010】また、非決定性に関するバグは、一般に、
逐次プログラムにおけるバグを見付ける場合よりも困難
である。なぜなら、逐次プログラムにおいては、テスト
・デバッグ時にプログラム中の全てのパスを実行するこ
とによって動作を確認することができるのに対し、並行
プログラムにおいては、全ての組合せ的なパス(すなわ
わち、各プロセス中の全てのパスのみならず、プロセス
相互間の振る舞い)を考慮してパスを実行しなければな
らないからである。上記の例のようにプロセスの数が少
ない場合にあっては、各プロセス相互間の振る舞いを全
て列挙することは比較的容易であるが、実際のプログラ
ム開発では、その数は膨大になり、その組合わせも膨大
なものとなるため、全ての振る舞いを把握することはも
はや不可能なものとなる。
【0011】
【発明が解決しようとする課題】ところで、一般に、プ
ログラミングには、従来からプログラミング支援装置及
びこのプログラミング支援装置上で実行されるプログラ
ミング支援方法が用いられている。プログラミング支援
装置及びプログラミング支援方法は、開発ツールと俗称
され、一般的にエディタ、デバッガ、プリプロセッサ、
オプティマイザ、解析ツール、シミュレータ、コンパイ
ラ、リンカなどを含む。
【0012】従来のプログラミング支援装置及びプログ
ラミング支援方法におけるプログラミングの手順の典型
例は、あり得る入出力をテストケースとして表し、テス
トケースによってプログラムをテスト実行し、バグを発
見するとテストの結果を参照しながらソースコードの修
正を行うことであった。また、従来技術では、解析ツー
ルによってソースコードやデータの構造を解析し、コン
パイラが、この解析結果を利用しながら実行効率やメモ
リ効率の優れた実行コードを生成するなども可能であっ
た。
【0013】しかしながら、並行プログラムは、プログ
ラムを構成する複数のプロセスの実行のタイミングによ
って挙動が非決定的に変化するので、まず、あり得るテ
ストケースの数が組合せ的な爆発を示すことが一般的で
ある。また、タイミングに係わるバグには再現性が無
く、テストケース自体の作成も困難であった。
【0014】さらに、従来のプログラミング支援装置及
びプログラミング支援方法では、解析やテスト実行の結
果をプログラムに反映させるにあたって、このような並
行プログラムの特徴は考慮されていなかった。このた
め、従来のプログラミング支援装置やプログラミング支
援方法では、信頼性の高い並行プログラムを開発するこ
とが困難であった。
【0015】なお、並行プログラムの開発(並行プログ
ラミング)を改良したものとして、超逐次プログラミン
グ(Hyper Sequential Programming)が知られている(参
考文献:特開平8−16429号)。超逐次プログラミ
ングは、並行プログラムを一旦逐次化して超逐次プログ
ラムを生成し、この超逐次プログラムに対してプログラ
ミング、テスト・デバッグを行う。これは、従来の逐次
プログラミングと同じレベルの困難さであり、通常の並
行プログラミングの困難さよりはるかに少ない。そし
て、テスト・デバッグが完了した時点で、テスト・デバ
ッグ情報を用いて上記超逐次プログラムを並行性し、並
行プログラムを復元する。
【0016】このような超逐次プログラミングでは、悪
い非決定性をもたらす要素間に、逐次実行を実現する制
御を与えて悪い非決定性を抑制する一方で、無害の非決
定性やよい非決定性を残し、並行プログラムの柔軟性と
いう利点を享受することができる。
【0017】しかしながら、並行プログラムを逐次化し
て一旦超逐次プログラムを生成し、それから再び並行プ
ログラムを復元するという作業が必要であり、信頼性の
高い並行プログラムを容易に作成することができなかっ
た。また、無害の非決定性についての設計者の処理を省
略すること等によってプログラミングを効率化したり、
無害の非決定性を容易に取り込むこと等により、プログ
ラミングの信頼性とプログラミングの効率とを向上させ
ることは容易ではなかった。
【0018】本発明は、上記のような従来技術の問題点
を解決するためのもので、その目的は、プロセスの各セ
クションのあり得る実行順序を表す実行経路に基づいて
プログラムを生成することにより、信頼性の高い並行プ
ログラムを容易に開発するプログラミング支援装置及び
プログラミング支援方法を提供することである。また、
本発明の他の目的は、設計者の処理を省略したり、無害
の非決定性を容易に取り込むことにより、プログラミン
グの効率を向上させるプログラミング支援装置及びプロ
グラミング支援方法を提供することである。更に、本発
明の他の目的は、実行経路に基づいて並行性を復元する
ことにより効率よく並行プログラムを生成することがで
きるプログラミング支援装置及びプログラミング支援方
法を提供することである。
【0019】また、本発明は、上述した超逐次プログラ
ミングにおいて並行プログラムを逐次化する部分、及び
並行プログラムを復元する部分のアルゴリズムを改善し
たものである。
【0020】
【課題を解決するための手段】上記の目的を達成するた
め、請求項1記載の発明によるプログラミング支援装置
は、第1のプログラムのプロセスを複数のセクションで
表し、前記複数のセクションのあり得る実行順序を前記
セクション間の分岐を用いて表す実行経路に対し、前記
実行経路の前記分岐について前記セクションを選択する
ための選択手段と、前記第1のプログラムを、前記選択
手段による選択がなされた前記実行経路に基づいて、前
記選択に基づく順序で一連の前記各セクションを実行す
る第2のプログラムに変換する変換手段とを具備するこ
とを特徴としている。
【0021】請求項1記載の発明によれば、プロセスが
実行制御可能なセクションに区分され、各セクションの
ありうる実行順序が実行経路(シナリオ)で表される。
シナリオは、例えばネットワーク構造の状態遷移図で表
すことができ、ある状態を表すノードからは、この状態
に後続して実行可能な各セクションが、分岐エッジとし
て次の状態のノードに伸びる。このようなシナリオ上に
は、各セクションのあり得る実行順序に対応して、順序
と同数の経路が存在する。このシナリオの各分岐につい
て、先に実行すべきセクションのエッジを選択していく
ことにより、意図する実行順序の組み合わせからなるシ
ナリオが生成される。このシナリオに基づいて、第1の
プログラムを変換して生成された第2のプログラムは、
悪い非決定性が存在しない。このように、請求項1記載
の発明によれば、シナリオ上で実行順序を指定するだけ
で指定通りの挙動を示すプログラムを得ることができる
ため、信頼性の高いプログラムを容易に作成することが
できる。
【0022】請求項2記載の発明によるプログラミング
支援装置は、複数のプロセスを含む第1のプログラムの
前記各プロセスを複数のセクションで表し、前記複数の
セクションのあり得る実行順序を前記セクション間の分
岐を用いて表す実行経路に対し、前記実行経路の前記分
岐について前記セクションを選択するための選択手段
と、前記第1のプログラムを、前記選択手段による選択
がなされた前記実行経路に基づいて、前記選択に基づく
順序で一連の前記各セクションを実行する第2のプログ
ラムに変換する変換手段とを具備することを特徴として
いる。
【0023】また、請求項15記載の発明によるプログ
ラミング支援方法は、請求項2記載の発明を方法の観点
から把握したものであって、複数のプロセスを含む第1
のプログラムの前記各プロセスを複数のセクションで表
し、前記複数のセクションのあり得る実行順序を前記セ
クション間の分岐を用いて表す実行経路に対し、前記実
行経路の前記分岐について前記セクションを選択するた
めの選択処理と、前記第1のプログラムを、前記選択処
理における選択がなされた前記実行経路に基づいて、前
記選択に基づく順序で一連の前記各セクションを実行す
る第2のプログラムに変換する変換処理とを具備するこ
とを特徴としている。
【0024】請求項2、15記載の発明によれば、各プ
ロセスの各セクションのあり得る実行順序が実行経路
(シナリオ)で表される。シナリオは、請求項1記載の
発明と同様に、例えばネットワーク構造の状態遷移図で
表すことができる。このようなシナリオ上には、各プロ
セスの各セクションのあり得る実行順序に対応して、順
序と同数の経路が存在する。このシナリオの各分岐につ
いて、先に実行すべきセクションのエッジを選択してい
くことにより、意図する実行順序の組み合わせからなる
シナリオが生成される。このシナリオに基づいて生成さ
れる第2のプログラムには、悪い非決定性が存在しな
い。このように、請求項2、15記載の発明によれば、
シナリオ上で実行順序を指定するだけで指定通りの挙動
を示すプログラムが得られるため、複数のプロセスが同
時並行的に動作する並行プログラムを容易に作成するこ
とができる。また、信頼性の高い並行プログラムを容易
に作成することができる。
【0025】請求項3記載の発明によるプログラミング
支援装置は、複数のプロセスを含む第1のプログラムの
前記各プロセスを、実行制御可能なセクションに区分す
る区分手段と、前記各プロセスの前記各セクションのあ
り得る実行順序を、前記セクション間の分岐を用いて表
す実行経路を生成する生成手段と、前記生成手段によっ
て生成される前記実行経路の前記分岐について、前記セ
クションを選択するための選択手段と、前記第1のプロ
グラムを、前記選択手段による選択がなされた前記実行
経路に基づいて、前記選択に基づく順序で一連の前記各
セクションを実行する第2のプログラムに変換する変換
手段とを具備することを特徴としている。
【0026】請求項16記載の発明によるプログラミン
グ支援方法は、請求項3記載の発明を方法の観点から把
握したものであって、複数のプロセスを含む第1のプロ
グラムの前記各プロセスを、実行制御可能なセクション
に区分する区分処理と、前記各プロセスの前記各セクシ
ョンのあり得る実行順序を、前記セクション間の分岐を
用いて表す実行経路を生成する生成処理と、前記生成処
理において生成される前記実行経路の前記分岐につい
て、前記セクションを選択するための選択処理と、前記
第1のプログラムを、前記選択処理における選択がなさ
れた前記実行経路に基づいて、前記選択に基づく順序で
一連の前記各セクションを実行する第2のプログラムに
変換する変換処理とを具備することを特徴としている。
【0027】請求項3、16記載の発明によれば、各プ
ロセスが実行制御可能なセクションに区分され、各プロ
セスの各セクションのあり得る実行順序が、セクション
の分岐を用いて表す実行経路(シナリオ)で表される。
このシナリオの分岐について、セクションが選択される
ことにより、意図する実行順序の組み合わせのみからな
るシナリオが生成される。このシナリオに基づいて生成
される第2のプログラムには、悪い非決定性が存在しな
い。このように、シナリオ上で実行順序を指定するのみ
で指定通りの挙動を示すプルグラムが得られるので、信
頼性の高い並行プログラムを容易に作成することができ
る。
【0028】請求項4記載の発明によるプログラミング
支援装置は、請求項3記載の発明において、前記生成手
段は、前記各プロセスの前記各セクションの実行順序
を、前記選択の結果が前記第2のプログラムによる実行
結果に影響を与えるセクション同士の分岐に限定して表
す実行経路を生成するように構成されたことを特徴とし
ている。
【0029】請求項4記載の発明によれば、選択の結果
が第2のプログラムによる実行結果に影響を与えない、
すなわち、悪い非決定性を生じないセクション同士の分
岐が実行経路(シナリオ)に含まれないため、シナリオ
が単純化され理解容易となり、プログラミングが効率化
される。
【0030】請求項5記載の発明によるプログラミング
支援装置は、請求項4記載の発明において、前記選択手
段による選択がなされた前記実行経路を、前記選択の結
果が前記第2のプログラムによる実行結果に影響を与え
ないセクション同士の分岐を付加することによって拡張
する拡張手段を具備することを特徴としている。
【0031】請求項5記載の発明によれば、選択の結果
が第2のプログラムによる実行結果に影響を与えない分
岐、すなわち、無害な非決定性を生じる分岐が付加され
るため、変換後の第2のプログラムの非決定性が増大
し、プログラムの並列性が高まり性能と柔軟性が向上す
る。
【0032】請求項6記載の発明によるプログラミング
支援装置は、複数のプロセスを含む第1のプログラムの
前記各プロセスを、実行制御可能なセクションに区分す
る区分手段と、前記各セクション間の依存関係を検出す
る検出手段と、前記各プロセスの前記各セクションのあ
りうる実行順序を、セクション間の分岐を用いて表す実
行経路を生成する生成手段と、前記実行経路の前記分岐
のうち、前記依存関係を有する分岐について前記セクシ
ョンを選択するための選択手段と、前記第1のプログラ
ムを、前記選択手段による選択がなされた前記実行経路
に基づいて、前記選択に基づく順序で一連の前記各セク
ションを実行する第2のプログラムに変換する変換手段
とを具備することを特徴としている。
【0033】請求項17記載の発明によるプログラミン
グ支援方法は、請求項6記載の発明を方法の観点から把
握したものであって、複数のプロセスを含む第1のプロ
グラムの前記各プロセスを、実行制御可能なセクション
に区分する区分処理と、前記各セクション間の依存関係
を検出する検出処理と、前記各プロセスの前記各セクシ
ョンのありうる実行順序を、セクション間の分岐を用い
て表す実行経路を生成する生成処理と、前記実行経路の
前記分岐のうち、前記依存関係を有する分岐について前
記セクションを選択するための選択処理と、前記第1の
プログラムを、前記選択処理における選択がなされた前
記実行経路に基づいて、前記選択に基づく順序で一連の
前記各セクションを実行する第2のプログラムに変換す
る変換処理とを具備することを特徴としている。
【0034】請求項6、17記載の発明によれば、プロ
セスが実行制御可能なセクションに区分され、各プロセ
スの各セクションのあり得る実行順序が実行経路(シナ
リオ)で表される。このシナリオの各分岐のうち、依存
関係を有する分岐においてセクションが選択されること
により、例えば先に実行すべきセクションが選択されて
いく。これにより、意図する実行順序の組み合わせのみ
からなるシナリオが生成され得る。このシナリオに基づ
いて、第1のプログラムに実行タイミング制御の命令等
を挿入して第2のプログラムとすることにより、悪い非
決定性が存在しない第2のプログラムが生成され得る。
このように、請求項6、17記載の発明では、シナリオ
上でセクションを選択することにより実行順序を指定す
るだけで、指定通りの挙動を示すプログラムが得られ
る。そのため、信頼性の高い並行プログラムを容易に作
成することができる。
【0035】請求項7記載の発明によるプログラミング
支援装置は、請求項6記載の発明において、前記生成手
段は、前記各プロセスの前記各セクションの実行順序
を、前記依存関係を有するセクション同士の分岐に限定
して表す実行経路を生成するように構成されたことを特
徴としている。
【0036】請求項7記載の発明によれば、依存関係を
有しないセクション同士の分岐が実行経路(シナリオ)
に含まれないため、シナリオが単純化され理解容易とな
り、プログラミングが効率化される。この場合、依存関
係を有しないセクション同士の実行順序は悪い非決定性
を生じないため、シナリオに含まれない場合でもプログ
ラムの信頼性は低下しない。
【0037】請求項8記載の発明によるプログラミング
支援装置は、請求項7記載の発明において、前記選択手
段による選択がなされた前記実行経路を、前記依存関係
を有しないセクション同士の分岐を付加することによっ
て拡張する拡張手段を有することを特徴としている。
【0038】請求項8記載の発明によれば、依存関係を
有しないセクション同士の分岐が実行経路(シナリオ)
に付加されるが、このような分岐は無害な非決定性を生
じる。このため、変換後の第2のプログラムの非決定性
が増大し、プログラムの並列性が高まり性能と柔軟性が
向上する。
【0039】請求項9記載の発明によるプログラミング
支援装置は、請求項1、2、3、又は6記載の発明にお
いて、前記第1のプログラムを、前記選択手段による選
択がなされた前記実行経路上のセクション間の実行順序
に基づいて模擬実行する実行手段を具備することを特徴
としている。
【0040】請求項9記載の発明によれば、実行経路
(シナリオ)上でセクションを選択する作業が行われる
度に、その時点でのシナリオ通りに第1のプログラムを
模擬実行することができる。このため、実行結果によっ
て選択内容の妥当性を確認したり、プログラム中のバグ
を発見することによって、プログラムの信頼性とプログ
ラミングの効率が向上する。
【0041】請求項10記載の発明によるプログラミン
グ支援装置は、請求項1、2、3、又は6記載の発明に
おいて、前記変換手段が、前記依存関係において実行が
先とされた前記セクションの後に、プロセス間の同期を
実現するための第1の命令を挿入し、当該依存関係にお
いて実行が後とされた前記セクションの前に、前記第1
の命令に対応する第2の命令を挿入することによって、
前記変換を行うように構成されたことを特徴としてい
る。
【0042】請求項10記載の発明によれば、セクショ
ン間の指定された先行制御が、プロセス間の同期信号に
よって容易かつ確実に実現される。
【0043】請求項11記載の発明によるプログラミン
グ支援装置は、請求項1、2、3、又は6記載の発明に
おいて、前記拡張手段が、前記実行経路を前記各プロセ
スに対応させて分解し前記プロセス毎の実行経路を生成
する分解手段と、前記プロセス毎の実行経路について、
冗長な部分を削除する削除手段とを有し、前記変換手段
が、前記冗長な部分が削除された各実行経路に基づい
て、前記第2のプログラムを生成するように構成された
ことを特徴としている。
【0044】請求項11記載の発明によれば、実行経路
(シナリオ)が各プロセスに対応して分解され、プロセ
ス毎のシナリオが生成される。このプロセス毎のシナリ
オについて、冗長な部分が削除されることにより最適化
され、最適化された各シナリオに基づいて第2のプログ
ラムが生成される。このように、プロセス毎にシナリオ
を最適化することにより無害な非決定性を導入すること
ができ、容易に並行プログラムである第2のプログラム
を生成することができる。
【0045】請求項12記載の発明によるプログラミン
グ支援装置は、請求項1、2、3、又は6記載の発明に
おいて、前記拡張手段が、前記実行経路を前記各プロセ
スに対応させて分解し前記プロセス毎の実行経路を生成
する分解手段と、前記プロセス毎の実行経路について、
冗長な部分を削除する削除手段とを有し、前記変換手段
が、前記冗長な部分が削除された各実行経路に基づい
て、前記第2のプログラムを生成するように構成され、
前記分解手段が、前記実行経路を分解する際に、前記各
実行経路に対し該実行経路間の同期をとるための同期制
約を付加するように構成され、前記削除手段が、前記同
期制約のうち冗長な同期制約を除去するように構成され
たことを特徴としている。
【0046】請求項12記載の発明によれば、実行経路
(シナリオ)が各プロセスに対応して分解され、プロセ
ス毎のシナリオが生成される。このとき、分解された個
々のシナリオの集合から最初のシナリオが再現できるよ
うに、各シナリオに対しシナリオ間の同期をとるための
同期制約が付加される。また、このプロセス毎のシナリ
オについて、冗長な部分、すなわち冗長な同期制約が除
去されることにより、最適化される。この最適化によ
り、無害な非決定性が導入される。このように、プロセ
ス毎にシナリオを最適化することにより無害な非決定性
を導入することができ、容易に並行プログラムである第
2のプログラムを生成することができる。
【0047】請求項13記載の発明によるプログラミン
グ支援装置は、複数のプロセスを含む第1のプログラム
の前記各プロセスを複数のセクションで表し、前記複数
のセクションのあり得る実行順序を前記セクション間の
分岐を用いて表す実行経路を生成する生成手段と、前記
第1のプログラムを、前記生成手段によって生成された
実行経路に基づいて、一連の前記セクションを実行する
第2のプログラムに変換する変換手段とを具備し、前記
拡張手段が、前記実行経路を前記各プロセスに対応させ
て分解し前記プロセス毎の実行経路を生成する分解手段
と、前記プロセス毎の実行経路について、冗長な部分を
削除する削除手段とを有し、前記変換手段が、前記冗長
な部分が削除された各実行経路に基づいて、前記第2の
プログラムを生成するように構成されたことを特徴とし
ている。
【0048】請求項18記載の発明によるプログラミン
グ支援方法は、請求項13記載の発明を方法の観点から
把握したものであって、複数のプロセスを含む第1のプ
ログラムの前記各プロセスを複数のセクションで表し、
前記複数のセクションのあり得る実行順序を前記セクシ
ョン間の分岐を用いて表す実行経路を生成する生成処理
と、前記第1のプログラムを、前記生成処理において生
成された実行経路に基づいて、一連の前記セクションを
実行する第2のプログラムに変換する変換処理とを具備
し、前記拡張処理は、前記実行経路を前記各プロセスに
対応させて分解し前記プロセス毎の実行経路を生成する
分解処理と、前記プロセス毎の実行経路について、冗長
な部分を削除する削除処理とを有し、前記変換処理は、
前記冗長な部分が削除された各実行経路に基づいて、前
記第2のプログラムを生成することを特徴としている。
【0049】請求項13、18記載の発明によれば、プ
ロセスが複数のセクションで表され、これら複数のセク
ションのあり得る実行順序がセクション間の分岐を用い
て表された実行経路(シナリオ)が生成される。そし
て、このシナリオが各プロセスに対応して分解され、プ
ロセス毎のシナリオが生成される。このプロセス毎のシ
ナリオについて、冗長な部分が削除されることにより最
適化され、最適化された各シナリオに基づいて第2のプ
ログラムが生成される。このように、プロセス毎にシナ
リオを最適化することにより無害な非決定性を導入する
ことができ、容易に並行プログラムである第2のプログ
ラムを生成することができる。
【0050】請求項14記載の発明によるプログラミン
グ支援装置は、請求項13記載の発明において、前記分
解手段が、前記実行経路を分解する際に、前記各実行経
路に対し該実行経路間の同期をとるための同期制約を付
加するように構成され、前記削除手段が、前記同期制約
のうち冗長な同期制約を除去するように構成されたこと
を特徴としている。
【0051】請求項14記載の発明によれば、実行経路
(シナリオ)が各プロセスに対応して分解され、プロセ
ス毎のシナリオが生成される。このとき、分解された個
々のシナリオの集合から最初のシナリオが再現できるよ
うに、各シナリオに対しシナリオ間の同期をとるための
同期制約が付加される。また、このプロセス毎のシナリ
オについて、冗長な部分、すなわち冗長な同期制約が除
去されることにより、最適化される。この最適化によ
り、無害な非決定性が導入される。このように、プロセ
ス毎にシナリオを最適化することにより無害な非決定性
を導入することができ、容易に並行プログラムである第
2のプログラムを生成することができる。
【0052】
【発明の実施の形態】次に、本発明の実施の形態の例に
ついて図面にしたがって具体的に説明する。なお、実施
の形態の各機能は、所定のソフトウェアがコンピュータ
及び周辺機器を制御することで実現される。すなわち、
本明細書では、発明及び実施の形態を、各機能や各処理
に対応する仮想的回路ブロック(「〜手段」や「〜部」
など)を想定して説明している。このため、各ブロック
に対して、各ハードウェア要素やソフトウェア要素は1
対1には対応しない。
【0053】ここで、本発明の実施の形態では、並行プ
ログラムの開発にあたり、並行プログラムを実行するた
めのいわゆるターゲットマシンを、並行プログラムを開
発するためのいわゆるホストマシンとして用いるものと
する。
【0054】また、本形態では、複数のCPUを用いる
いわゆるマルチCPUシステムを用い、各プロセスは共
有メモリにアクセスするものとする。図1は、本発明の
実施の形態に用いるコンピュータの概念図を示す。すな
わち、このコンピュータでは、各プロセッサC1,C2
はそれぞれ、プログラムを構成するプロセスP1とP2
を同時並行的に実行し、各プロセッサC1,C2は、プ
ロセスP1,P2の内容に応じて、バス及び入出力制御
回路Bを経由して、共有メモリMの他、入力装置I、出
力装置O、外部記憶装置Sなどの周辺装置にアクセスす
る。
【0055】このコンピュータにおいて、典型的には、
入力装置Iはキーボードやマウスなどであり、各種コマ
ンドやデータの入力を行う手段である。外部記憶装置S
は、ハードディスク装置、磁気ディスク又は光磁気ディ
スクなどからなり、ソースプログラムやデバッグ状況に
関する情報を書込み又は読み出すことができるようにな
っている。出力装置Oは、CRT表示装置やプリンタ印
字装置などであり、ソースプログラムやデバッグ状況に
関する情報等をテキスト又はグラフィック表示等するこ
とによりユーザに提供する。ユーザは、これら入力装置
I及び出力装置Oを用いて、対話的にコンピュータを操
作することができる。但し、コンピュータの規模・構成
やCPUの数・形式は自由で、例えば、コンピュータネ
ットワーク、分散処理など各種の構成を自由に用い得
る。
【0056】すなわち、本発明における並行プログラム
をターゲットマシンとして実行するコンピュータは、い
わゆる並列計算機でもよく、この場合共有メモリの有無
は問わない。また、分散ネットワーク計算機システムや
単一のCPUにおけるマルチタスクシステムでもよい。
なお、単一のCPUにおけるマルチタスクシステムの場
合は、1つのCPUに複数のプロセスが存在しうる。
【0057】また、本発明におけるホストマシンは、タ
ーゲットマシンと異なってもよく(クロス開発環境)、
プログラムのシミュレータを有すれば、単一のCPUの
みを有するコンピュータでもよい。
【0058】(1)構成 本実施の形態は、請求項1〜14に記載のプログラミン
グ支援装置、請求項15〜18に記載のプログラミング
支援方法、及び請求項19〜22に記載のプログラミン
グ支援プログラムを記録した媒体に対応するものであ
る。
【0059】本実施の形態は、図1に示したコンピュー
タ上で実現されるが、態様の一例は、プロセッサC1又
はC2上で、本実施の形態の各機能を実現するための単
一のプロセスからなるプログラムを実行することであ
る。
【0060】図2は、本形態の構成を概念的に示す機能
ブロック図である。この図に示すように、本装置は、エ
ディタ1、区分手段2、検出手段3、生成手段4、表示
手段5、選択手段6、実行手段7、拡張手段8、及び変
換手段9を有する。
【0061】エディタ1は、コンピュータ上で実行され
る複数のプロセスを含む第1のプログラムを作成・編集
するための手段である。区分手段2は、第1のプログラ
ムの各プロセスを実行制御可能なセクションに区分す
る。この区分は、例えば、第1のプログラムを構成する
各プロセスに、割り込み可能なポイント(以下、「シナ
リオポイント」という)を設定することによって行う。
【0062】検出手段3は、異なったプロセス間におい
て、各セクション間の依存関係(先行制約)を検出す
る。検出は、例えば以下のように行う。すなわち、ある
プロセスにある対象を変更する命令が検出された場合、
他の全てのプロセスにおいて、上記命令と同一の対象の
状態によって結果が影響される全ての命令を検出する。
そして、上記変更する命令について、影響される全ての
命令との間に、依存関係が存在するとみなす。
【0063】このような場合の依存関係の典型例は、共
有メモリの書き込み命令と読み出し命令である。依存関
係の他の例は、プロセス間で共有されるフラグを変更す
る命令と、このフラグに応じて条件判断を行う命令であ
る。逆に、メモリの読み出し命令相互間には依存関係は
存在しない場合が一般的と考えられる。また、プロセッ
サ固有のローカルなメモリのみを処理対象とするサブル
ーチンは、依存関係検出の対象から除外してよい。
【0064】生成手段4は、各プロセスの各セクション
のありうる実行順序を、セクション間の分岐を用いて表
す実行経路(シナリオ)を生成する。シナリオは、並行
プログラムについて無限に存在するテストケースの中
で、設計者が期待する挙動を表現した本質的なものであ
り、また、外部との入出力だけでなく、内部の挙動も表
現している点で従来技術のテストケースと異なる。すな
わち、並行プログラムにおいては、各命令の実行の先後
関係に基づいて極めて多数の経路が存在する。そして、
すべてのケースのテストは現実的に困難である一方、本
質的に意味のある経路は全経路のごく一部である。な
お、このシナリオの表現方法は、例えば文献“Structur
al Testing of Concurrent Programs ”(Richard N. Ta
ylor et al,IEEE TRANSACTIONS ON SOFTWARE ENGINEERI
NG, VOL. 18, NO.3, MARCH 1992) に示されているよう
な周知の方法が採用される。
【0065】このようなシナリオは、例えばネットワー
ク構造の状態遷移図で表すことができる。状態遷移図で
は、ある状態を表すノードからは、この状態に後続し得
るプロセスの各セクションが、分岐エッジとして次の状
態のノードに伸びる。
【0066】シナリオはツリー構造図で表すこともでき
るが、同じいくつかの命令が異なった順序で実行された
後の経路は合流させても、命令の組み合わせからなる経
路の数は減少しない。例えば、ツリー構造において、命
令a,b,cにつき、a→b→cという順序で実行する
枝とb→a→cという順序で実行する枝とに分れている
場合に、それらを実行した後の経路を合流させたとして
も、全体の経路の数は変わらない。このため、シナリオ
としては、ネットワーク構造の方が理解が容易である。
すなわち、これらシナリオ上には、各プロセスの各セク
ションのあり得る実行順序に対応して、順序と同数の経
路が存在するためである。
【0067】表示手段5は、第1のプログラム及びシナ
リオ等の各種データを表示する。すなわち、生成手段4
によって生成されたシナリオがこの表示手段5に表示さ
れる。なお、各種情報を、プリンタなど所望の出力装置
から必要に応じて出力するようにしてもよい。
【0068】選択手段6は、生成手段4によって生成さ
れたシナリオの各分岐のうち、上述した依存関係を有す
る分岐について上記セクションを選択するための手段で
ある。すなわち、シナリオが上記表示装置5に表示され
ると、設計者が選択手段6を通じて上記分岐についてセ
クションを選択するようになっている。
【0069】実行手段7は、選択手段6によって選択さ
れたセクション間の実行順序に基づいて、第1のプログ
ラムを模擬実行する。この模擬実行の結果は、上記表示
手段5に表示されるようになっている。
【0070】拡張手段8は、上記依存関係に基づいて、
上記シナリオと等価な挙動を導出し、それらの挙動が可
能となるようにシナリオを拡張する。具体的には、上記
シナリオについて、上記依存関係を有しないセクション
同士の分岐を付加することによって拡張を行う。これら
依存関係のない分岐の付加は、プログラムに、無害な非
決定性をもたらす。
【0071】変換手段9は、拡張手段8によって拡張さ
れた上記シナリオに基づき第1のプログラムを変換して
第2のプログラムを生成する。すなわち、拡張された上
記シナリオに基づいて、選択された順序で一連の各セク
ションを実行する第2のプログラムに変換する。この変
換では、上記シナリオ以外の挙動をしないように抑制す
る。具体的には、ソースコードに同期命令を埋め込むこ
とにより、挙動の抑制を行う。
【0072】ここで、拡張手段8と変換手段9の具体的
な構成例について示す。図3は、上記拡張手段8の具体
的な構成及び拡張手段8と変換手段9との関係を概念的
に示す機能ブロック図である。拡張手段8は、シナリオ
分解手段11と、シナリオ最適化手段12とを有してい
る。シナリオ分解手段11は、上記シナリオを第1のプ
ログラムに対応させて分解し、プロセス毎のシナリオを
生成する。また、シナリオ分解手段11は、単純にシナ
リオを分解するのではなく、分解した個々のシナリオの
集合から最初のシナリオが再現できるように、シナリオ
間の同期をとるための情報(同期命令)を付加する。
【0073】ここで、シナリオが有向グラフで表されて
いる場合のシナリオ分解手段11による分解について説
明する。まず、図4及び図5に、シナリオ分解手段11
による同期命令を挿入する手順を示す。これらの図にお
いて、各プロセスにおける命令の実行を矢印のエッジで
表し、命令前後の状態を円形のノードで表している。ま
た、図4は、プロセス間に共有して使用される変数であ
る共有変数がない場合を示し、図5は、プロセス間に共
有変数がある場合を示す。
【0074】まず、図4(a)において、すべてのプロ
セスが共有変数をアクセスしない動作であるものとする
と、同図(b)に示すように、有向グラフの全ての分岐
に同期命令を挿入する。すなわち、この図に示すシナリ
オでは、2つ目のノードで分岐しているため、その分岐
の後に同期命令s1,s2を挿入する。次に、図5
(a)において、共有変数をアクセスする命令r,wを
それぞれ含むものとする。この場合、同図(b)に示す
ように、上記各命令r,wの前(または後)に同期命令
s0,s3を、分岐の後に同期命令s1,s2を挿入す
る。
【0075】以上のようにして同期命令を挿入したもの
に対して、シナリオ分解手段11は、各プロセス毎にプ
ロセスがもとからもっていた命令と同期命令のみからな
るグラフとして、プロセス毎のシナリオを生成する。
【0076】シナリオ最適化手段12は、第1のプログ
ラムを解析し、プロセス毎のシナリオに冗長な部分があ
ればそれらを除去し、最適化されたシナリオ(最適化シ
ナリオ)を生成する。すなわち、例えば上記同期命令の
冗長なものを削除し、必要な同期命令のみを残す。この
同期命令の削除は、グラフ縮約ルールを適用することに
よって行われる。図6及び図7に、このグラフ縮約ルー
ルの一例を示す。図6は、プロセス間に共有変数がない
場合を示し、図7は、プロセス間に共有変数がある場合
を示す。なお、以下に示すルールを直接プログラムとし
て表すようにしてもよい。
【0077】まず、図6において、プロセス間に共有変
数がない場合について示す。同図(a)に示すように、
命令a1の後に分岐した同期命令s1,s2が挿入され
ており、その行き先が同じであり、同期命令s1,s2
以外に同期命令がない場合、同期命令s1,s2は削除
される(rule1)。また、同図(b)に示すよう
に、分岐がない状態で命令a1と命令a2の間に同期命
令s1が挿入されており、この同期命令s1以外に同期
命令がない場合、この同期命令は削除される(rule
2)。更に、同図(c)に示すように、命令a1の後に
分岐したループ状の同期命令s1が挿入されており、こ
の同期命令s1以外に同期命令がない場合、この同期命
令s1は削除される(rule3)。また、同期をとっ
ている他のプロセス側の同期命令がすべて削除された場
合は、対応する同期命令も削除される(rule4)。
【0078】次に、図7において、プロセス間に共有変
数がある場合について示す。同図(a)に示すように、
命令a1の後に分岐した同期命令s1,s2が挿入され
ており、その行き先が同じであり、同期命令s1,s2
以外に同期命令がなく、かつ、命令a2が共有変数をア
クセスする命令ではない場合、同期命令s1,s2は削
除される(rule1)。また、同図(b)に示すよう
に、分岐がない状態で、命令a1と命令a2の間に同期
命令s1,s2が挿入されており、これら同期命令s
1,s2以外に同期命令がない場合、同期命令s1のみ
が削除され同期命令s2のみが残される(rule
2)。更に、同図(c)に示すように、命令a1の後に
分岐したループ状の同期命令s1が挿入されており、こ
の同期命令s1以外に同期命令がない場合、この同期命
令s1は削除される(rule3)。また、同期をとっ
ている他のプロセス側の同期命令が削除された場合は、
対応する同期命令も削除される(rule4)。
【0079】上記変換手段9は、最適化シナリオから、
シナリオと、そのシナリオから拡張される挙動とのみを
再現する第2のプログラムを生成する。具体的には、例
えば上記のようにして残した同期命令を第2のプログラ
ムを示すソースプログラムに付加することによって行
う。
【0080】(2)作用及び効果 上記のような構成を有する本実施の形態におけるプログ
ラミングは、以下のような手順で行われる。ここで、図
8は、本実施の形態におけるプログラミングの手順を示
すフローチャートである。
【0081】[プログラムの作成処理]まず、設計者
は、エディタ1を用いて第1のプログラムを作成・入力
する(ステップ801)。プログラムの作成は、例え
ば、対象の並行システムに対し、並行性を用いた自然な
モデル化を行い、モデルを構成する各プロセスの構造と
挙動とをコーディングすることによって行うことができ
る。この時点では、この第1のプログラムには、エラー
が潜在的に存在する可能性がある。
【0082】次の表1は、本実施の形態において例とし
て用いる並行プログラムを構成するプロセスP1,P2
のソースコードの例である。
【0083】
【表1】P1: begin init1; /*メモリMを初期化する*/ read1; /*メモリMから読み込む*/ write1; /*メモリMに書き込む */ end P2: begin read2; /*メモリMから読み込む*/ write2; /*メモリMに書き込む */ end
【0084】この例では、プロセスP1とP2間に何ら
制御関係が存在しないので、各プロセスの各命令の実行
順序は予測不能な悪い非決定性を帯びている。また、図
9は、この時点でのプロセスP1,P2が各プロセッサ
C1,C2に対応する状態を示す概念図である。
【0085】[プロセスの区分処理]このようにプログ
ラムが作成されると、区分手段2が、第1のプログラム
の前記各プロセスP1,P2を、実行制御可能なセクシ
ョンに区分する(ステップ802)。すなわち、区分手
段2は、第1のプログラムの各プロセスP1,P2に上
述したシナリオポイントを設定することにより区分を行
う。
【0086】このような区分は、各プロセスP1,P2
に、割り込み可能なポイントを表すポイント(以下「シ
ナリオポイント」という)を設定することによって行う
ことができる。シナリオポイントは、例えば各命令の前
後に設定すればよく、また、プロセス内部のみでのロー
カルな一連の処理が存在するときは、その処理の途中で
はなく処理の前後にシナリオポイントを設定してもよ
い。
【0087】すなわち、シナリオポイントで区切られた
区間は割り込み禁止区間であるから、区間の途中で割り
込むことはできず、したがって同期信号などによって実
行制御を行うことができない。この結果、シナリオポイ
ントで区切られた区間がセクションとなる。ここでは、
各命令が1つのセクションを形成するようにシナリオポ
イントを指定するものとし、以下の説明では命令語その
ものをセクション名として用いる。なお、プロセス中の
同期命令は割り込みを明示的に発生させるので、自動的
にシナリオポイントとなる。
【0088】[依存関係の検出処理]次に、検出手段3
が、プロセスの各セクション間の依存関係を検出する
(ステップ803)。検出された依存関係は所定のメモ
リ領域に保存する。すなわち、検出手段3は、あるプロ
セスにある対象を変更する命令を検出すると、他の全て
のプロセスにおいて、その対象が変更されることによっ
て結果に影響を受ける全ての命令を検出する。そして、
その変更する命令と、上記影響を受ける全ての命令との
間に、依存関係が存在するとみなす。
【0089】例えば、共有メモリに対してあるデータを
書き込む書き込み命令を検出した場合、他の全てのプロ
セスにおいて、そのデータを読み出す読み出し命令を検
出する。そして、上記書き込み命令とその読み出し命令
との間に依存関係が存在するとみなす。
【0090】ここでは、共有メモリに関連して
【表2】init1とread2,write2 read1とwrite2 write1とread2,write2 の間に依存関係が検出されたものとする。
【0091】[シナリオの生成処理]続いて、生成手段
4が、上述したシナリオを生成する(ステップ80
4)。図10はシナリオの一例であり、表1に例示した
プログラムについてあり得る全ての経路を状態遷移図で
表現したシナリオの例である。シナリオを表すこのよう
な状態遷移図をシナリオグラフと呼ぶ。この図では、各
命令の実行を矢印のエッジで表し、命令前後の各状態を
円形のノードで表している。なお、図10に示すシナリ
オグラフは、遷移可能な経路を全て表した場合の図であ
り、そのような経路が10通り存在することを示してい
る。
【0092】また、本実施の形態におけるシナリオの生
成では、各プロセスの各セクションの挙動順序を、依存
関係を有するセクション同士の分岐に限定して表す。こ
のようなシナリオの生成では、依存関係を有しないセク
ション同士の分岐については、いずれかのセクションを
生成しない。例えば、図10のノードn12におけるr
ead1とread2の分岐は、read1とread
2に依存関係が無いため、いずれが先でも結果は同じで
ある。そのため、例えば、セクションread2のエッ
ジは生成せず、read1のエッジのみ生成する。
【0093】[分岐の選択処理]次に、上記のように生
成されたシナリオが、表示手段5によって表示される
(ステップ805)。このとき、依存関係を有しないセ
クションについては、上記のようにいずれかの分岐のみ
が表示されるが、依存関係を有するセクション同士の分
岐については、設計者が選択手段6を通じてセクション
を選択する(ステップ806)。
【0094】例えば、図10に示すノードn11におい
ては、init1とread2との間に依存関係があ
る。その場合、図11に示すように、選択に係るノード
n11とセクションinit1,read2のエッジが
太線で強調表示されると共に、画面に選択のためのウイ
ンドウが表示される。
【0095】ウインドウにはメッセージと共に選択肢を
表すアイコンが表示されており、設計者はマウスのポイ
ンタでいずれかのアイコンをポイントし、マウスのボタ
ンをクリックすることによって所望のセクションを選択
することができる。ここでは、init1を先に実行す
るセクションとして選択し、read2を後に実行する
セクションとして選択したものとする。すなわち、in
it1よりread2を先に実行すると初期化の前に読
み込むことになり、バグとなるので選択しない。そし
て、選択されなかったエッジは削除される。図12は、
ノードn11からのセクションread2が削除された
後のシナリオグラフの状態を示す図である。
【0096】また、エッジが削除される場合は、削除さ
れたエッジのみを入力とするノードも遷移の可能性がな
くなるため生成されない。すなわち、ノードn11にお
いてセクションread2が選択された場合に生成され
るはずであったノードn21,n31,n22,n32
は生成されない。n12においては、read1とre
ad2に依存関係がないので、そのような場合は、ノー
ドn12における分岐においてread2は省略されr
ead1のエッジのみが生成される。
【0097】更に、セクション間に実質的に依存関係が
存在しない場合や、セクションのいずれが先になる場合
もそれぞれ意味のある動作を行う場合は、双方を選択し
てもよい。図11のウインドウ中のアイコン「双方あ
り」は、このような選択を入力するためのものである。
ここで、図13は、ノードn13についてwrite1
とread2から分岐を選択する場合の画面の表示例を
示した図である。この状態で「双方あり」のアイコンを
選択した場合は、エッジは削除されず、図13に示すよ
うな状態のままとなる。
【0098】[模擬実行処理]次に、上記のようにして
選択を行った結果に基づき、設計者は、実行手段7を用
いて第1のプログラムを模擬実行する(ステップ80
7)。すなわち、設計者は、セクションの選択を行う
と、逐次第1のプログラムを模擬実行する。そして、そ
の実行結果は、表示手段7に表示される(ステップ80
8)。その表示された実行結果により、設計者は第1の
プログラム中にバグが存在するか否かを判断し(ステッ
プ809)、バグが存在せず、結果が意図した通りであ
って、かつ、シナリオの生成処理が終了していない場合
は(ステップ810)、設計者はシナリオの生成の処理
を続行する(ステップ804)。一方、バグが存在し、
結果が意図した通りでない場合は、設計者はエディタ1
によって第1のプログラムのバグを修正する(ステップ
801)。
【0099】例えば、図14に示すように、分岐の選択
処理(ステップ806)において、ノード13のセクシ
ョンwrite1,read2の双方が選択されている
場合、この時点でシナリオグラフに残っているシナリオ
は、次の2通りの経路のシナリオsn1,sn2を含
む。
【0100】
【表3】 sn1= init1 read1 write1
【0101】
【表4】 sn2= init1 read1 read2
【0102】従って、実行手段7は、これら2通りのシ
ナリオsn1,sn2に従って模擬実行を行う。この結
果、バグが存在せず、結果が意図した通りである場合、
シナリオの生成処理(ステップ804)において、図1
5に示すようなシナリオが生成される。ここでは、図1
0に示すノードn23において、セクションwrite
1とwrite2に依存関係があり、n11の場合と同
様に、セクションwrite1のエッジが選択された場
合を示す。
【0103】このようにして、図15の状態に到達した
とき、シナリオグラフに表現されているシナリオは、次
の2通りの経路のシナリオsn1,sn2を含む。
【0104】
【表5】 sn1= init1 read1 write1 read2 write2
【0105】
【表6】 sn2= init1 read1 read2 write1 write2
【0106】この状態のシナリオは、並行プログラムに
ついて無限に存在するテストケースの中で、設計者が期
待する挙動を表現した本質的なものである。
【0107】[シナリオの拡張処理]次に、拡張手段8
が、上記シナリオについて、依存関係を有しないセクシ
ョン同士の分岐を付加することによって拡張する(ステ
ップ811)。すなわち、拡張手段8は、検出手段3が
検出した依存関係に基づき、依存関係を有していないた
めに生成手段4によって生成されなかったエッジと、そ
のエッジの遷移先のノードをシナリオグラフ中に復元す
る。
【0108】例えば、図15に示すシナリオグラフを拡
張した後の状態を図16に示す。この図において、設計
者の選択に基づいて残された挙動のエッジを細い実践の
矢印で示し、拡張された挙動のエッジを太い実線の矢印
で示し、シナリオグラフから削除された結果抑制される
挙動のエッジを破線の矢印で示す。すなわち、ノードn
12から分岐しているセクションread2と、ノード
n22と、そのノードn22から分岐しているセクショ
ンread1とが復元される。
【0109】なお、生成手段4によって生成されなかっ
たエッジ及びノードは、上記のように検出手段3が検出
した依存関係に基づいて復元してもよいが、生成手段4
がシナリオの原形の生成時にそれらのエッジ及びノード
を記録しておき、この記録に基づいて復元するようにし
てもよい。すなわち、図17に示すように、生成手段4
が所定のメモリ領域に上記エッジを記憶させておき、拡
張手段8は、その情報のみを用いて拡張を行う。
【0110】また、その場合、図16において、削除さ
れたエッジ及び削除されたエッジのみが経由するノード
は参考に示したもので、実際にはこれらに関するデータ
はメモリ上から消去してかまわない。
【0111】以上のように、依存関係のない分岐の付加
により、プログラムに無害な非決定性がもたらされる。
このため、変換後の第2のプログラムの非決定性が増大
し、プログラムの並列性が向上する。
【0112】[プログラムの変換処理]次に、変換手段
9が、このように得られたシナリオに基づいて、第1の
プログラムを、前記選択に基づく順序で一連の前記各セ
クションを実行する第2のプログラムに変換する(ステ
ップ812)。
【0113】このような変換は、依存関係のあるセクシ
ョン間で、全てのシナリオで実行が先とされたセクショ
ンの後に、プロセス間の同期信号の発信命令(送信セマ
フォア)を挿入し、全てのシナリオで実行が後とされた
セクションの前に、上記同期信号の待ち受け命令(受信
セマフォア)を挿入することによって行うことができ
る。これによって、セクション間の指定された先後関係
が、プロセス間の同期信号によって容易かつ確実に実現
される。
【0114】図16のシナリオに基づいて得られる第2
のプログラムを次に示す。
【表7】P1: begin init1; /*メモリMを初期化する*/ send(1); /*同期信号1を送信 */ read1; /*メモリMから読み込む*/ write1; /*メモリMに書き込む */ send(2); /*同期信号2を送信 */ end P2: begin wait(1); /*同期信号1を待ち受け*/ read2; /*メモリMから読み込む*/ wait(2); /*同期信号2を待ち受け*/ write2; /*メモリMに書き込む */ end
【0115】また、図18は、表7に示した第2のプロ
グラムの各プロセスが、同期命令によるタイミングに基
づいて実行される状態を示す概念図である。この図にお
いて、プロセスP2のread2は必ずプロセスP1の
init1の後で実行されるが、これは、図16のノー
ドn11においてinit1が先、read2が後とし
て選択されたことに対応する。
【0116】また、図18において、プロセスP2のw
rite2は必ずプロセスP1のwrite1の後で実
行されるが、これは、図16のノードn23においてw
rite1が先、write2が後として選択されたこ
とに対応する。
【0117】また、図18において、プロセスP2のr
ead2について、プロセスP1の各セクションrea
d1,write1のいずれとの間においても、先後関
係が非決定的であるが、これは、図16において、re
ad1,write1の前後の各ノードn12,n1
3,n14のうち、いずれのノードからもread2の
エッジが存在することに対応する。これによって、並行
プログラムのよい非決定性を含む無害な非決定性が維持
される。
【0118】ここで、拡張手段8及び変換手段9の具体
的な処理について説明する。ここでは、図8におけるス
テップ801〜810において、図19に示すような第
1のプログラムが生成されたものとする。すなわち、図
19は、その第1のプログラムを構成するプロセスP
1,P2のソースコードを示したものである。
【0119】また、この第1のプログラムに基づいて、
図20に示すようなシナリオグラフが生成されたものと
する。ここで、命令w0,w1,rは、共有変数をアク
セスする命令であるものとする。更に、図21は、拡張
手段8及び変換手段9が第2のプログラムを生成する手
順を示すフローチャートである。
【0120】まず、シナリオ分解手段11が、生成され
たシナリオに同期命令を挿入する(ステップ210
1)。すなわち、図22に示すように、共有変数をアク
セスする命令w0,w1,rの前とすべての分岐の後と
に同期命令s0〜s3を挿入する。次に、シナリオ分解
手段11は、同期命令の挿入されたシナリオを、プロセ
スP1とP2とに分解する(ステップ2102)。この
とき、すべての状態で2つのプロセスP1,P2が同期
を取るという強い同期制約の基にシナリオの分解を行
う。図23に、分解したシナリオを示す。同図(a)は
プロセスP1のシナリオを示し、同図(b)はプロセス
P2のシナリオを示す。これら2つのプロセスP1,P
2は、同じ名前の同期命令s0〜s3が与えられること
により、同期をとるようになる。
【0121】次に、シナリオ最適化手段12が、上記シ
ナリオを最適化する(ステップ2103)。すなわち、
第1のプログラムを解析し、冗長な同期命令を削除す
る。具体的には、図23に示す同期命令s0〜s3には
冗長性があるため、必要な同期命令のみ残して冗長な同
期命令を除去する。このとき、上述した図6及び図7に
示すグラフ縮約ルールを適用する。すなわち、図23
(b)に示すプロセスP2のシナリオにおいて、図7
(c)に示すrule2と図7(c)に示すrule3
とに基づいて同期命令s2,s3が削除される。また、
図7(b)に示すrule2に基づいて、同期命令s0
が削除される。これに対応して、rule4に基づい
て、プロセスP1のシナリオにおいて同期命令s0,s
2,s3が削除される。
【0122】以上のようにして最適化されたシナリオグ
ラフの例を、図24に示す。同図において、(a)はプ
ロセスP1の最適化されたシナリオグラフであり、
(b)はプロセスP2の最適化されたシナリオグラフで
ある。この場合、同期命令s1のみ残して他の同期命令
はすべて削除されている。このような最適化は、すなわ
ち、無害な非決定性の導入を行っていることに対応す
る。
【0123】次に、変換手段9が、最終的な並行プログ
ラムである第2のプログラムを生成する(ステップ21
04)。このとき、上記シナリオの最適化において残さ
れた同期命令を、ソースコードに同期命令sync(<
ID>)として埋め込む。すなわち、図24に示す上記
同期命令s1を、同期命令sync(s1)として挿入
する。図25は、第2のプログラムを示すソースコード
である。
【0124】このように、本実施の形態では、模擬実行
によって妥当性を確認したシナリオおよびそれと等価な
挙動しか示さないように、並行プログラムが抑制される
ので、シナリオで与えた以外の非決定性は排除される。
【0125】[効果]以上説明したように、本形態では
プロセスが実行制御可能なセクションに区分され、各プ
ロセスの各セクションのありうる挙動順序がシナリオで
表される。このシナリオの各分岐について、先に実行す
べきセクションのエッジを残し、他方のセクションの可
能性を削除してゆくと、意図する実行順序の組み合わせ
のみがシナリオ上に残る。このようなシナリオに基づい
て、第1のプログラムは、実行タイミング制御の命令の
挿入によって第2のプログラムに変換され、第2のプロ
グラムには悪い非決定性が存在しない。
【0126】このように、本形態では、シナリオ上で実
行順序を指定するだけで指定通りのプログラムが得られ
るので、信頼性の高い並行プログラムを容易に作成する
ことができる。
【0127】また、本実施の形態では、依存関係が存在
しないために選択が不要な分岐については最初からシナ
リオに含まれないので、シナリオが単純化され理解容易
となり、設計者が行う選択の回数も減少するので、プロ
グラミングが効率化される。この場合、依存関係を有し
ないセクション同士の実行順序は悪い非決定性を生じな
いので、シナリオに含まれない場合でもプログラムの信
頼性は低下しない。
【0128】更に、本実施の形態では、シナリオを生成
しつつシナリオ通りに第1のプログラムを模擬実行する
ことができる。このため、実行結果によって選択内容の
妥当性を確認したり、プログラム中のバグを発見するこ
とによって、プログラムの信頼性とプログラミングの効
率が向上する。
【0129】(3)他の実施の形態 なお、本発明は上記実施のの形態に限定されるものでは
なく、実施態様の変更は自由であるから、次に例示する
ような他の実施の形態をも包含するものである。例え
ば、プロセス(タスク)やCPUの数は2つには限定さ
れず、自由に定めることができる。
【0130】また、上述した実施の形態では、依存関係
を有しないセクションについては自動的に一方のみが選
択されるようにし、依存関係を有するセクションについ
てのみ設計者が逐次選択するようにしたが、これに限ら
ない。例えば、依存関係を有しないセクションについて
も、同様に設計者が選択するようにしてもよい。すなわ
ち、ノード毎に設計者が選択を行うようにしてもよい。
この場合、分岐の選択の後の拡張処理を不要とすること
もできる。
【0131】または、一旦仮に図10に示すようなシナ
リオを生成してから、依存関係を有しないセクション同
士の分岐について、いずれかのセクションを自動的に削
除するようにしてもよい。例えば、上述したように、図
10に示すノードn12におけるセクションread1
とread2の分岐のように各セクションに依存関係が
ない場合、図26に示すように、生成手段4は一方のセ
クション(例えばread2)を削除する。
【0132】また、依存関係を有する分岐については、
例えば図27に示すように、表示手段5が表示画面にシ
ナリオグラフを表示し、設計者がセクションの選択を行
う。この場合、選択は、依存関係に係る各セクションに
対応するエッジが分岐しているノードを指摘し、いずれ
かのセクションに係るエッジを設計者が選択することに
よって行うことができる。図27では、選択に係るノー
ドn11とエッジinit1,read2が太線で強調
表示されると共に、画面に選択のためのウインドウが現
れている。図28は、ノードn11からのセクションr
ead2が削除された後のシナリオグラフの状態を示す
図である。この後、削除されたセクションread2の
エッジのみを入力とするノードn21,n31,n2
2,n32が順次削除される。図29は、これらが順次
削除された後のシナリオグラフの状態を示す図である。
【0133】また、上述したように、設計者がウインド
ウ中のアイコン「双方あり」を選択した場合は、エッジ
は削除されない。図30は、ノードn13についてwr
ite1とread2からの分岐を選択する場合の画面
の表示例を示した図である。この状態で「双方あり」の
アイコンを選択した場合は、エッジは削除されず、図3
0の状態のままとなる。更に、設計者がノード23につ
いてwrite2を後として選択し、図31のように削
除すると、ノード33もこれにともなって削除される。
このようにして、図15に示すようなシナリオグラフの
状態となる。
【0134】更に、このような場合、模擬実行は、設計
者がその時点でシナリオグラフに残っている各経路につ
いて、エッジの登場順に、エッジに対応するプログラム
のセクションの命令をインタプリタ形式で実行すること
によって実現できる。また、シナリオ上にいくつかの経
路が存在するときは、マウスクリックによって模擬実行
すべき経路上のエッジを選択するようにしてもよい。
【0135】また、セクションの単位は命令単位には限
定されず、ルーチンや関数など他の単位をセクションと
してもよい。また、シナリオにおいて一つのノードから
発する分岐の数は2つには限定されず3つ以上でもよ
い。また、情報の表示や入力のための画面の表示形式も
実施の形態に示したものには限定されず自由に定めるこ
とができる。
【0136】図32は、シナリオの表示や分岐の選択な
どを行うための画面の他の表示例を示す図である。同図
に示す表示画面において、「タスク1」及び「タスク
2」のウインドウでは、プログラム中に「snp
(1)」等のシナリオポイントが設定されている。ま
た、「グローバル状態グラフ」では、生成されたシナリ
オのシナリオグラフが表示されている。ここでは、sn
p4においてsnp5とsnp6との分岐の選択が必要
となっており、「分岐選択」のウインドウが表示されて
いる。更に、複数のプロセス間における共通のデータは
「共有データ」として表示されている。
【0137】更に、第2のプログラムにおいて、プロセ
ス間の実行順序を定める手法は、同期信号の発信命令や
待ち受け命令には限定されず、特定の処理を実行するた
めのトークンの授受など、他の手法によって実現しても
よい。
【0138】
【発明の効果】以上説明したように本発明によれば、高
信頼な並行プログラムを容易に開発することができる。
【図面の簡単な説明】
【図1】本発明の実施の形態を実現するコンピュータの
構成を示す機能ブロック図。
【図2】同実施の形態の構成を概念的に示す機能ブロッ
ク図。
【図3】同実施の形態における変換手段9の具体的な構
成を示す機能ブロック図。
【図4】同実施の形態におけるシナリオ分解手段11に
よる同期命令の挿入を説明する図。
【図5】同実施の形態におけるシナリオ分解手段11に
よる同期命令の挿入を説明する図。
【図6】同実施の形態におけるグラフ縮約ルールを説明
する図。
【図7】同実施の形態におけるグラフ縮約ルールを説明
する図。
【図8】同実施の形態におけるプログラミングの手順を
示すフローチャート。
【図9】同実施の形態において、当初のプロセスP1,
P2が各プロセッサC1,C2に対応する状態を示す概
念図。
【図10】同実施の形態において、表1に例示したプロ
グラムについてあり得る全ての経路を状態遷移図で表現
したシナリオの例。
【図11】同実施の形態において、ノードn11につい
てinit1とread2から分岐を選択する場合の画
面の表示例を示す図。
【図12】同実施の形態において、ノードn11につい
てinit1を先として選択したシナリオグラフの状態
を示す図。
【図13】同実施の形態において、ノードn13につい
てwrite1とread2から分岐を選択する場合の
画面の表示例を示す図。
【図14】同実施の形態において、ノードn13につい
てwrite1とread2の双方を選択した場合のシ
ナリオグラフの状態を示す図。
【図15】同実施の形態において、設計者の期待する挙
動を表現したシナリオを示す図。
【図16】同実施の形態において、図15のシナリオグ
ラフを拡張した後の状態を示す図。
【図17】同実施の形態において、生成手段4がエッジ
を記憶させておく例を示す図。
【図18】同実施の形態において、表7に示した第2の
プログラムの各プロセスが、同期命令によるタイミング
に基づいて実行される状態を示す概念図。
【図19】同実施の形態において、第1のプログラムの
例を示すソースコード。
【図20】同実施の形態において、図19に示す第1の
プログラムに基づいて生成されたシナリオグラフの例を
示す図。
【図21】同実施の形態における拡張手段8及び変換手
段9の動作を説明するフローチャート。
【図22】同実施の形態において、同期命令の挿入され
たシナリオグラフの例。
【図23】同実施の形態において、分解されたシナリオ
グラフの例。
【図24】同実施の形態において、最適化されたシナリ
オグラフの例。
【図25】同実施の形態における第2のプログラムの例
を示すソースコード。
【図26】同実施の形態において、ノードn12からの
依存関係がない分岐のうち、一方のread2を削除し
た状態のシナリオグラフを示す図。
【図27】同実施の形態において、表示画面にシナリオ
グラフを表示し、セクションの選択を行う場合の画面の
表示例を示す図。
【図28】同実施の形態において、ノードn11からの
セクションread2が削除された後のシナリオグラフ
の状態を示す図。
【図29】同実施の形態において、ノードn21,n3
1,n22,n32が順次削除された後のシナリオグラ
フの状態を示す図。
【図30】同実施の形態において、ノードn13につい
てwrite1とread2から分岐を選択する場合の
画面の表示例を示した図。
【図31】同実施の形態において、ノードn23につい
てwrite2を後として選択し削除したシナリオグラ
フの状態を示す図。
【図32】同実施の形態において、シナリオの表示や分
岐の選択などを行うための画面の他の表示例を示す図。
【図33】従来技術の問題点を説明するための図
【符号の説明】
C…プロセッサ P…プロセス B…バス及び入出力制御回路 I…入力装置 O…出力装置 M…共有メモリ S…外部記憶装置 1…エディタ 2…区分手段 3…検出手段 4…生成手段 5…表示手段 6…選択手段 7…実行手段 8…拡張手段 9…変換手段 11…シナリオ分解手段 12…シナリオ最適化手段

Claims (22)

    【特許請求の範囲】
  1. 【請求項1】 第1のプログラムのプロセスを複数のセ
    クションで表し、前記複数のセクションのあり得る実行
    順序を前記セクション間の分岐を用いて表す実行経路に
    対し、前記実行経路の前記分岐について前記セクション
    を選択するための選択手段と、 前記第1のプログラムを、前記選択手段による選択がな
    された前記実行経路に基づいて、前記選択に基づく順序
    で一連の前記各セクションを実行する第2のプログラム
    に変換する変換手段とを具備することを特徴とするプロ
    グラミング支援装置。
  2. 【請求項2】 複数のプロセスを含む第1のプログラム
    の前記各プロセスを複数のセクションで表し、前記複数
    のセクションのあり得る実行順序を前記セクション間の
    分岐を用いて表す実行経路に対し、前記実行経路の前記
    分岐について前記セクションを選択するための選択手段
    と、 前記第1のプログラムを、前記選択手段による選択がな
    された前記実行経路に基づいて、前記選択に基づく順序
    で一連の前記各セクションを実行する第2のプログラム
    に変換する変換手段とを具備することを特徴とするプロ
    グラミング支援装置。
  3. 【請求項3】 複数のプロセスを含む第1のプログラム
    の前記各プロセスを、実行制御可能なセクションに区分
    する区分手段と、 前記各プロセスの前記各セクションのあり得る実行順序
    を、前記セクション間の分岐を用いて表す実行経路を生
    成する生成手段と、 前記生成手段によって生成される前記実行経路の前記分
    岐について、前記セクションを選択するための選択手段
    と、 前記第1のプログラムを、前記選択手段による選択がな
    された前記実行経路に基づいて、前記選択に基づく順序
    で一連の前記各セクションを実行する第2のプログラム
    に変換する変換手段とを具備することを特徴とするプロ
    グラミング支援装置。
  4. 【請求項4】 前記生成手段は、前記各プロセスの前記
    各セクションの実行順序を、前記選択の結果が前記第2
    のプログラムによる実行結果に影響を与えるセクション
    同士の分岐に限定して表す実行経路を生成するように構
    成されたことを特徴とする請求項3記載のプログラミン
    グ支援装置。
  5. 【請求項5】 前記選択手段による選択がなされた前記
    実行経路を、前記選択の結果が前記第2のプログラムに
    よる実行結果に影響を与えないセクション同士の分岐を
    付加することによって拡張する拡張手段を具備すること
    を特徴とする請求項4記載のプログラミング支援装置。
  6. 【請求項6】 複数のプロセスを含む第1のプログラム
    の前記各プロセスを、実行制御可能なセクションに区分
    する区分手段と、 前記各セクション間の依存関係を検出する検出手段と、 前記各プロセスの前記各セクションのありうる実行順序
    を、セクション間の分岐を用いて表す実行経路を生成す
    る生成手段と、 前記実行経路の前記分岐のうち、前記依存関係を有する
    分岐について前記セクションを選択するための選択手段
    と、 前記第1のプログラムを、前記選択手段による選択がな
    された前記実行経路に基づいて、前記選択に基づく順序
    で一連の前記各セクションを実行する第2のプログラム
    に変換する変換手段とを具備することを特徴とするプロ
    グラミング支援装置。
  7. 【請求項7】 前記生成手段は、前記各プロセスの前記
    各セクションの実行順序を、前記依存関係を有するセク
    ション同士の分岐に限定して表す実行経路を生成するよ
    うに構成されたことを特徴とする請求項6記載のプログ
    ラミング支援装置。
  8. 【請求項8】 前記選択手段による選択がなされた前記
    実行経路を、前記依存関係を有しないセクション同士の
    分岐を付加することによって拡張する拡張手段を有する
    ことを特徴とする請求項7記載のプログラミング支援装
    置。
  9. 【請求項9】 前記第1のプログラムを、前記選択手段
    による選択がなされた前記実行経路上のセクション間の
    実行順序に基づいて模擬実行する実行手段を具備するこ
    とを特徴とする請求項1、2、3、又は6記載のプログ
    ラミング支援装置。
  10. 【請求項10】 前記変換手段は、 前記依存関係において実行が先とされた前記セクション
    の後に、プロセス間の同期を実現するための第1の命令
    を挿入し、当該依存関係において実行が後とされた前記
    セクションの前に、前記第1の命令に対応する第2の命
    令を挿入することによって、前記変換を行うように構成
    されたことを特徴とする請求項1、2、3、又は6記載
    のプログラミング支援装置。
  11. 【請求項11】 前記拡張手段は、 前記実行経路を前記各プロセスに対応させて分解し前記
    プロセス毎の実行経路を生成する分解手段と、 前記プロセス毎の実行経路について、冗長な部分を削除
    する削除手段とを有し、 前記変換手段は、 前記冗長な部分が削除された各実行経路に基づいて、前
    記第2のプログラムを生成するように構成されたことを
    特徴とする請求項1、2、3、及び6記載のプログラミ
    ング支援装置。
  12. 【請求項12】 前記拡張手段は、 前記実行経路を前記各プロセスに対応させて分解し前記
    プロセス毎の実行経路を生成する分解手段と、 前記プロセス毎の実行経路について、冗長な部分を削除
    する削除手段とを有し、 前記変換手段は、 前記冗長な部分が削除された各実行経路に基づいて、前
    記第2のプログラムを生成するように構成され、 前記分解手段は、前記実行経路を分解する際に、前記各
    実行経路に対し該実行経路間の同期をとるための同期制
    約を付加するように構成され、 前記削除手段は、前記同期制約のうち冗長な同期制約を
    除去するように構成されたことを特徴とする請求項1、
    2、3、及び6記載のプログラミング支援装置。
  13. 【請求項13】 複数のプロセスを含む第1のプログラ
    ムの前記各プロセスを複数のセクションで表し、前記複
    数のセクションのあり得る実行順序を前記セクション間
    の分岐を用いて表す実行経路を生成する生成手段と、 前記第1のプログラムを、前記生成手段によって生成さ
    れた実行経路に基づいて、一連の前記セクションを実行
    する第2のプログラムに変換する変換手段とを具備し、 前記拡張手段は、 前記実行経路を前記各プロセスに対応させて分解し前記
    プロセス毎の実行経路を生成する分解手段と、 前記プロセス毎の実行経路について、冗長な部分を削除
    する削除手段とを有し、 前記変換手段は、 前記冗長な部分が削除された各実行経路に基づいて、前
    記第2のプログラムを生成するように構成されたことを
    特徴とするプログラミング支援装置。
  14. 【請求項14】 前記分解手段は、前記実行経路を分解
    する際に、前記各実行経路に対し該実行経路間の同期を
    とるための同期制約を付加するように構成され、 前記削除手段は、前記同期制約のうち冗長な同期制約を
    除去するように構成されたことを特徴とする請求項13
    記載のプログラミング支援装置。
  15. 【請求項15】 複数のプロセスを含む第1のプログラ
    ムの前記各プロセスを複数のセクションで表し、前記複
    数のセクションのあり得る実行順序を前記セクション間
    の分岐を用いて表す実行経路に対し、前記実行経路の前
    記分岐について前記セクションを選択するための選択処
    理と、 前記第1のプログラムを、前記選択処理における選択が
    なされた前記実行経路に基づいて、前記選択に基づく順
    序で一連の前記各セクションを実行する第2のプログラ
    ムに変換する変換処理とを具備することを特徴とするプ
    ログラミング支援方法。
  16. 【請求項16】 複数のプロセスを含む第1のプログラ
    ムの前記各プロセスを、実行制御可能なセクションに区
    分する区分処理と、 前記各プロセスの前記各セクションのあり得る実行順序
    を、前記セクション間の分岐を用いて表す実行経路を生
    成する生成処理と、 前記生成処理において生成される前記実行経路の前記分
    岐について、前記セクションを選択するための選択処理
    と、 前記第1のプログラムを、前記選択処理における選択が
    なされた前記実行経路に基づいて、前記選択に基づく順
    序で一連の前記各セクションを実行する第2のプログラ
    ムに変換する変換処理とを具備することを特徴とするプ
    ログラミング支援方法。
  17. 【請求項17】 複数のプロセスを含む第1のプログラ
    ムの前記各プロセスを、実行制御可能なセクションに区
    分する区分処理と、 前記各セクション間の依存関係を検出する検出処理と、 前記各プロセスの前記各セクションのあり得る実行順序
    を、セクション間の分岐を用いて表す実行経路を生成す
    る生成処理と、 前記実行経路の前記分岐のうち、前記依存関係を有する
    分岐について前記セクションを選択するための選択処理
    と、 前記第1のプログラムを、前記選択処理における選択が
    なされた前記実行経路に基づいて、前記選択に基づく順
    序で一連の前記各セクションを実行する第2のプログラ
    ムに変換する変換処理とを具備することを特徴とするプ
    ログラミング支援方法。
  18. 【請求項18】 複数のプロセスを含む第1のプログラ
    ムの前記各プロセスを複数のセクションで表し、前記複
    数のセクションのあり得る実行順序を前記セクション間
    の分岐を用いて表す実行経路を生成する生成処理と、 前記第1のプログラムを、前記生成処理において生成さ
    れた実行経路に基づいて、一連の前記セクションを実行
    する第2のプログラムに変換する変換処理とを具備し、 前記拡張処理は、 前記実行経路を前記各プロセスに対応させて分解し前記
    プロセス毎の実行経路を生成する分解処理と、 前記プロセス毎の実行経路について、冗長な部分を削除
    する削除処理とを有し、 前記変換処理は、 前記冗長な部分が削除された各実行経路に基づいて、前
    記第2のプログラムを生成することを特徴とするプログ
    ラミング支援方法。
  19. 【請求項19】 複数のプロセスを含む第1のプログラ
    ムの前記各プロセスを複数のセクションで表し、前記複
    数のセクションのあり得る実行順序を前記セクション間
    の分岐を用いて表す実行経路に対し、前記実行経路の前
    記分岐について前記セクションを選択するための選択処
    理と、 前記第1のプログラムを、前記選択処理における選択が
    なされた前記実行経路に基づいて、前記選択に基づく順
    序で一連の前記各セクションを実行する第2のプログラ
    ムに変換する変換処理とを具備することを特徴とするプ
    ログラミング支援方法を実行させるためのプログラム支
    援プログラムを記録した媒体。
  20. 【請求項20】 複数のプロセスを含む第1のプログラ
    ムの前記各プロセスを、実行制御可能なセクションに区
    分する区分処理と、 前記各プロセスの前記各セクションのあり得る実行順序
    を、前記セクション間の分岐を用いて表す実行経路を生
    成する生成処理と、 前記生成処理において生成される前記実行経路の前記分
    岐について、前記セクションを選択するための選択処理
    と、 前記第1のプログラムを、前記選択処理における選択が
    なされた前記実行経路に基づいて、前記選択に基づく順
    序で一連の前記各セクションを実行する第2のプログラ
    ムに変換する変換処理とを具備することを特徴とするプ
    ログラミング支援方法を実行させるためのプログラム支
    援プログラムを記録した媒体。
  21. 【請求項21】 複数のプロセスを含む第1のプログラ
    ムの前記各プロセスを、実行制御可能なセクションに区
    分する区分処理と、 前記各セクション間の依存関係を検出する検出処理と、 前記各プロセスの前記各セクションのありうる実行順序
    を、セクション間の分岐を用いて表す実行経路を生成す
    る生成処理と、 前記実行経路の前記分岐のうち、前記依存関係を有する
    分岐について前記セクションを選択するための選択処理
    と、 前記第1のプログラムを、前記選択処理における選択が
    なされた前記実行経路に基づいて、前記選択に基づく順
    序で一連の前記各セクションを実行する第2のプログラ
    ムに変換する変換処理とを具備することを特徴とするプ
    ログラミング支援方法を実行させるためのプログラム支
    援プログラムを記録した媒体。
  22. 【請求項22】 複数のプロセスを含む第1のプログラ
    ムの前記各プロセスを複数のセクションで表し、前記複
    数のセクションのあり得る実行順序を前記セクション間
    の分岐を用いて表す実行経路を生成する生成処理と、 前記第1のプログラムを、前記生成処理において生成さ
    れた実行経路に基づいて、一連の前記セクションを実行
    する第2のプログラムに変換する変換処理とを具備し、 前記拡張処理は、 前記実行経路を前記各プロセスに対応させて分解し前記
    プロセス毎の実行経路を生成する分解処理と、 前記プロセス毎の実行経路について、冗長な部分を削除
    する削除処理とを有し、 前記変換処理は、 前記冗長な部分が削除された各実行経路に基づいて、前
    記第2のプログラムを生成することを特徴とするプログ
    ラミング支援方法を実行させるためのプログラム支援プ
    ログラムを記録した媒体。
JP34705396A 1995-12-26 1996-12-26 プログラミング支援装置とその方法 Expired - Fee Related JP3641090B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP34705396A JP3641090B2 (ja) 1995-12-26 1996-12-26 プログラミング支援装置とその方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP33878395 1995-12-26
JP7-338783 1995-12-26
JP34705396A JP3641090B2 (ja) 1995-12-26 1996-12-26 プログラミング支援装置とその方法

Publications (2)

Publication Number Publication Date
JPH09237191A true JPH09237191A (ja) 1997-09-09
JP3641090B2 JP3641090B2 (ja) 2005-04-20

Family

ID=26576208

Family Applications (1)

Application Number Title Priority Date Filing Date
JP34705396A Expired - Fee Related JP3641090B2 (ja) 1995-12-26 1996-12-26 プログラミング支援装置とその方法

Country Status (1)

Country Link
JP (1) JP3641090B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11134307A (ja) * 1997-10-31 1999-05-21 Toshiba Corp プログラム開発支援装置及び方法並びにプログラム開発支援用ソフトウェアを記録した記録媒体
JPH11175369A (ja) * 1997-12-10 1999-07-02 Toshiba Corp プログラム開発支援装置、プログラム開発支援方法及びプログラム開発支援プログラムを記録した媒体
US6675207B1 (en) 1999-02-15 2004-01-06 International Business Machines Corporation Possibility of execution evaluating apparatus and method therefor
JP2009087356A (ja) * 2007-10-02 2009-04-23 Nec Lab America Inc 保護された独立関係を用いた部分的命令低減
US7844953B2 (en) 2005-06-30 2010-11-30 Fujitsu Limited Program, apparatus and method for verifying program

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11134307A (ja) * 1997-10-31 1999-05-21 Toshiba Corp プログラム開発支援装置及び方法並びにプログラム開発支援用ソフトウェアを記録した記録媒体
JPH11175369A (ja) * 1997-12-10 1999-07-02 Toshiba Corp プログラム開発支援装置、プログラム開発支援方法及びプログラム開発支援プログラムを記録した媒体
US6675207B1 (en) 1999-02-15 2004-01-06 International Business Machines Corporation Possibility of execution evaluating apparatus and method therefor
US7844953B2 (en) 2005-06-30 2010-11-30 Fujitsu Limited Program, apparatus and method for verifying program
JP2009087356A (ja) * 2007-10-02 2009-04-23 Nec Lab America Inc 保護された独立関係を用いた部分的命令低減

Also Published As

Publication number Publication date
JP3641090B2 (ja) 2005-04-20

Similar Documents

Publication Publication Date Title
US6067415A (en) System for assisting a programmer find errors in concurrent programs
JP2795244B2 (ja) プログラムデバッグシステム
Ben-Ari Principles of concurrent and distributed programming
JP4629768B2 (ja) 並列化処理方法、システム、及びプログラム
US7055065B2 (en) Method, system, and computer program product for automated test generation for non-deterministic software using state transition rules
US5809283A (en) Simulator for simulating systems including mixed triggers
US6598222B2 (en) Programming method for concurrent programs and program supporting apparatus thereof
US20050204344A1 (en) Program analysis device, analysis method and program of same
US5960182A (en) Hardware-software co-simulation system, hardware-software co-simulation method, and computer-readable memory containing a hardware-software co-simulation program
EP0453394A2 (en) Dynamic process for the generation of biased pseudo-random test patterns for the functional verification of hardware designs
US5784593A (en) Simulator including process levelization
JP4806529B2 (ja) 複製されたロジックを使用するデバッグの方法とシステム
US8701084B1 (en) Preview of auto-fix changes to software code
JP2008544337A (ja) 複製ロジック及びトリガロジックを用いたデバッグのための方法及びシステム
JP4050339B2 (ja) 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置
US7266791B2 (en) High level synthesis device, method for generating a model for verifying hardware, method for verifying hardware, control program, and readable recording medium
JP3641090B2 (ja) プログラミング支援装置とその方法
US7228513B2 (en) Circuit operation verification device and method
JP3675623B2 (ja) プログラム開発支援装置及び方法並びにプログラム開発支援用ソフトウェアを記録した記録媒体
US6581029B1 (en) Method and system for optimizing execution of a collection of related module sequences by eliminating redundant modules
US5956511A (en) Program development support apparatus, program development support method, and storage medium therefor
Melikov et al. System of designing test programs and modeling of the memory microcircuits
JP3278588B2 (ja) プログラム開発支援装置及びプログラム開発支援方法
US6789234B2 (en) Method and system for a timing based logic entry
JP5067705B2 (ja) 異常系テスト支援装置、異常系テスト支援方法、及びプログラム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040921

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20041122

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050120

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

Free format text: PAYMENT UNTIL: 20080128

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20090128

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20100128

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20110128

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees