JP4919825B2 - プログラム開発装置、プログラム開発方法およびプログラム - Google Patents

プログラム開発装置、プログラム開発方法およびプログラム Download PDF

Info

Publication number
JP4919825B2
JP4919825B2 JP2007019251A JP2007019251A JP4919825B2 JP 4919825 B2 JP4919825 B2 JP 4919825B2 JP 2007019251 A JP2007019251 A JP 2007019251A JP 2007019251 A JP2007019251 A JP 2007019251A JP 4919825 B2 JP4919825 B2 JP 4919825B2
Authority
JP
Japan
Prior art keywords
group
code
source code
editing
storage unit
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
JP2007019251A
Other languages
English (en)
Other versions
JP2008186244A (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.)
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 JP2007019251A priority Critical patent/JP4919825B2/ja
Priority to US12/017,734 priority patent/US8117590B2/en
Priority to CNA200810009052XA priority patent/CN101236493A/zh
Publication of JP2008186244A publication Critical patent/JP2008186244A/ja
Application granted granted Critical
Publication of JP4919825B2 publication Critical patent/JP4919825B2/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/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Landscapes

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

Description

本発明は、メモリやプロセッサといった計算機資源の限られた組込み機器に用いるファームウェアのようなソフトウェアを、実行時の性能を維持したまま効率よく保守するためのプログラム開発装置、プログラム開発方法およびプログラムに関する。
少資源の組込み機器に用いるファームウェアの開発においては、性能要求が優先される余り、低レベル言語での開発を行ったり、ソフトウェアの保守性を高めるための非機能品質を犠牲にした実装を行ったりするなど、実行効率優先の開発が行われることが多い。
ここでいう「資源」とはメモリやプロセッサ性能のことであり、例えばこれらが極端に限られている組込み機器のファームウェア開発においては、性能重視の実装が行われることが多い。即ち機械語で直接コーディングが行われることもあるし、C などの高級言語を用いる場合でも、移植性、保守性、及び可読性と言った非機能要求を犠牲にして、凝集度が低く、結合度が高いモジュール群で実装されることもしばしば見受けられる。このような実装に対して機能追加や修正を行おうとすると、どの部分を修正することが適切なのかというような見通しが立てにくく、多くの工数を必要としたり不具合を多発させてしまうことが頻繁に見られた。
ちなみに結合度、凝集度というのはソフトウェアの品質を評価する尺度の例である。結合度とは、プログラムの構成要素間の繋がり・相互依存性の強さを測る尺度である。ソフトウェアの保守性の観点からは、構成要素の結合度は低い、即ち相互依存性が少ない方が望ましいとされている。なぜならば他との結合度が高い構成要素の保守作業を行う際には、他の構成要素への影響を考慮する必要があるからである。結合度尺度の例としては、CK メトリクスのCBO という尺度が挙げられる。
一方凝集度とは、プログラムの構成要素の機能のまとまり具合を測る尺度である。やはりソフトウェア保守性の観点からは、凝集度が高い、即ち機能のまとまり具合が大きいことが望ましいとされている。凝集度が低い構成要素とは、即ち複数の役割や機能が重畳している状態であり、構成要素内のある機能を修正しようとしたときに含まれる他の機能や役割に影響を及ぼす可能性が高いということになる。凝集度尺度の例としては、CK メトリクスのLCOM という尺度が挙げられる。
上述のように非機能要求を犠牲にした実装では機能追加や修正にあたり種々の問題があったが、反対にソフトウェア工学的に理想とされている冗長性の高い実装では、ファームウェアに求められる微妙な性能要求に対応できるような性能制御の自由度が限られてしまい、性能未達に陥るという問題もあった。
この様な問題に対する本質的な解決策は、これまで提案されたことは無かった。例えば複雑なソースコードを読み解くためのソースコード解析技術は数多く提案されている。スライシング技術などはソースコードの機能分解を行うための技術として定着しており、これを用いてソースコードを可読性の高い状態に変換するという研究も行われてはいる。ただしこれは一方向の変換であり、あくまでソースコードを読み解くだけの機能しか提供し得ない。
逆に可読性の高いコードから実行効率の高いコードを生成するという技術も、コンパイラの最適化技術を始め数多く提案されている。しかしながら機械的な最適化はやはり限界があり、人がソースコードレベルで細かな調整を行った結果には及ばない。逆にソースコードレベルで極端に最適化してしまって、コンパイラの最適化オプションを使わない方が、デバッグや機能検証の際に紛れの無い開発が出来るといったケースもあるため、コンパイラの最適化技術はあまり適さない技術である。
その他予めモジュール性の高い、即ち凝集度が高く結合度の低いコード片を組み合わせることで保守性を高めるといったアプローチは存在するが(例:米国特許明細書第6694505号)、そもそもモジュール性が低い場合には利用できないような技術であり、ここで示したような課題には適さない。また対象ソフトウェアのアーキテクチャを視覚化して提示することで生産性を向上させるような技術も存在するが(例:米国公開公報2004-0031015号)、これも今回対象としているように明示的に整頓されたアーキテクチャが存在しないケースには適用できない。
M.Weiser, Program Slicing, IEEE Trans. on Software Engineering, SE-10(4), p.p. 352.357, 1984.
基本的に少資源ソフトウェアの開発においては、人手によるソースコードレベルでの最適化の出来に依存する部分がかなり大きい。問題はこの様に最適化されたソースコードの保守性が極端に低いことであり、第三者はおろか、場合によってはオリジナルの作者でさえ保守をすることは非常に困難になっている。
本発明は、少資源ソフトウェアとして高効率な実装を行われたソースコードに対する保守作業を容易に行うことができるプログラム開発装置、プログラム開発方法およびプログラムを提供するものである。
本発明の一態様としてのプログラム開発装置は、
第1のソースコードに含まれる各コードを所定のアルゴリズムにより複数のグループに分割する分割部と、
各グループに含まれるコード群を前記第1のソースコード内での実行順序に従って並べ、各並べられたコード群を、各々に連続して実行されるべき1つ以上のコードが含まれる1つ以上のセクションに区分する区分部と、
各区分されたコード群を格納する記憶部と、
前記第1のソースコードをもとに前記各区分されたコード群間において各セクションに対する実行順序の制約を設定する設定部と、
前記記憶部の内容をユーザに提示する第1の提示部と、
前記実行順序の制約を表す制約情報をユーザに提示する第2の提示部と、
ユーザからの第1の編集指令に基づき前記記憶部を編集する第1の編集部と、
ユーザからの第2の編集指令に基づき前記制約情報を編集する第2の編集部と、
編集された記憶部と編集された制約情報とを用いて第2のソースコードを生成するソースコード生成部と、
を備える。
本発明の一態様としてのプログラム開発方法は、
第1のソースコードに含まれる各コードを所定のアルゴリズムにより複数のグループに分割し、
各グループに含まれるコード群を前記第1のソースコード内での実行順序に従って並べ、各並べられたコード群を、各々に連続して実行されるべき1つ以上のコードが含まれる1つ以上のセクションに区分し、
各区分されたコード群を記憶部に格納し、
前記第1のソースコードをもとに前記各区分されたコード群間において各セクションに対する実行順序の制約を設定し、
前記記憶部の内容をユーザに提示し、
前記実行順序の制約を表す制約情報をユーザに提示し、
ユーザからの第1の編集指令に基づき前記記憶部を編集し、
ユーザからの第2の編集指令に基づき前記制約情報を編集し、
編集された記憶部と編集された制約情報とを用いて第2のソースコードを生成する、
ことを特徴とする。
本発明の一態様としてのプログラムは、
第1のソースコードに含まれる各コードを所定のアルゴリズムにより複数のグループに分割するステップと、
各グループに含まれるコード群を前記第1のソースコード内での実行順序に従って並べ、各並べられたコード群を、各々に連続して実行されるべき1つ以上のコードが含まれる1つ以上のセクションに区分するステップと、
各区分されたコード群を記憶部に格納するステップと、
前記第1のソースコードをもとに前記各区分されたコード群間において各セクションに対する実行順序の制約を設定するステップと、
前記記憶部の内容をユーザに提示するステップと、
前記実行順序の制約を表す制約情報をユーザに提示するステップと、
ユーザからの第1の編集指令に基づき前記記憶部を編集するステップと、
ユーザからの第2の編集指令に基づき前記制約情報を編集するステップと、
編集された記憶部と編集された制約情報とを用いて第2のソースコードを生成するステップと、
をコンピュータに実行させる。
本発明により、少資源ソフトウェアとして高効率な実装を行われたソースコードに対する保守作業を容易に行うことができる。
本発明に関わるソフトウェア高生産性開発環境の実施形態について、図面を参照して説明する。
図1 は本発明の実施形態に係わるソフトウェア高生産性開発環境の働きを示す概念図である。今編集の対象となるソースコード104 が与えられているとする。ソースコード104 に適切な機能追加や修正を施して、改良されたソースコード105 を得ることが目的であるとする。ソースコード104 や改良されたソースコード105 は実際にコンパイルの対象となる最終プロダクトであり、実コード空間101 に存在すると定義される。
従来のソフトウェア開発では、実コード空間101 上でソースコード104 を直接編集することで機能追加や修正が行われていたが、ソースコード104 の保守性が低いことが問題であった。
理想的にはソースコード104 に含まれる各機能が独立して実装されている状態、例えばソースコード104 には機能単位(グループ)109 〜 113 が含まれていると考えたとき、ユーザビュー103 にあるような環境で、例えば機能単位108 の追加を行ったり、機能単位112 に対する修正を行ったりといった各種保守作業が行われれば生産性が上がると考えられる。
このユーザビュー103 のような表現を仮想的に与え、機能追加や修正の結果を実コード空間101 上に反映するために、仮想コード空間102 を準備し、実コードと、機能追加や修正とを結合することが必要である。仮想コード空間102 上の分割ソースコード106、および107 は、それぞれソースコード104、および105 を機能単位に切り出して仮想的に分割された状態を保持するものである。
本実施形態は即ち、ソースコード104 を分割して分割ソースコード106 を仮想的に準備し、これに基づいて機能単位109 〜 113 をユーザビュー103 として提供することを可能とするものである。ユーザビュー103 上では機能単位108 を追加したり、機能単位112 に対する修正作業を行ったりということが出来るような機能が提供されており、元のソースコード104 に対する直接の編集作業よりも格段に生産性が向上されている。ユーザビュー103 上で行われた編集結果は、仮想コード空間102 上で分割ソースコード106 に対して直列化されることにより、新たな分割ソースコード107 が生成される。この分割ソースコード107 の情報に基づいて実コード空間上のソースコード104 に自動的に変更を反映し(合成)、最終的に改良されたソースコード105 を得ることが可能になる。
次に上記で述べたような概念を具体化するための、本発明の実施形態のひとつを図2 に示す。オリジナルソースコード201 は図1 のソースコード104 に対応し、修正後ソースコード209 は図1 の改良されたソースコード105 に対応する。
本発明の実施形態としてのプログラム開発装置210は、五つの独立な機能部202,204,205,207,208と二つの独立なデータベース(DB)203,206とを備えている。データベースはたとえば記憶部に相当する。各機能部による処理はたとえばそれぞれに対応するプログラムモジュールの実行として実現されてもよい。
機能抽出部(分割部、区分部)202 は、本発明の中核をなす機能の一つである。この機能の実装例については後ほど詳述するが、基本的にはオリジナルソースコード201 から独立な機能単位を切り出すことにある。機能単位を切り出すときには、各機能単位の機能がそれぞれ独立であるように切り出し、各機能単位がどのような内部状態(後述)を取り得るかということも認識する。具体的にはプログラムスライシングやdef-use解析などの技術を応用することで可能になる。例えば模式的ではあるが、図1 中の機能単位109 を例にとると、この機能単位は四つの内部状態を持っている(四つのセクションに区分されている。たとえば1つのセクション内では内部変数の値は一定である)ことを示している。この各機能単位の内部状態の認識は、具体的にはdef-use 解析と呼ばれる技術を応用することで可能になる。機能抽出部202 によって切り出された各機能単位は、機能DB203 に登録され、管理される。機能DB 203 に登録された各機能単位間、および1つの機能単位内では、オリジナルのソースコードの行単位の実行順序関係が保持されている。
機能編集部(第1の編集部、第1の提示部)204 は、ユーザとのインターフェイスを取りながら、図1 のユーザビュー103 を提供する。機能編集部204 は機能DB203 から機能単位を取り出してユーザが自由に編集できるようになっている。機能編集部204はユーザからの編集指令(第1の編集指令)にしたがって編集を行う。編集としては、機能単位の変更および削除のほかに、新たな機能単位の追加も出来るようになっており、ここで作成された機能単位は機能DB203 に登録され、管理されるようになっている。
機能状態依存関係分析部(設定部)205 は、機能DB に登録された各機能単位間における内部状態の依存関係を分析する(各内部状態を規定するコード群(各セクション)の実行順序の制約を設定する)。ここで依存関係として認識されるのは、内部状態間の半順序関係(各内部状態の順序関係を示すが、一部の内部状態間には順序関係がなくてもよい)や時間制約などもある。時間制約としては、例えば特定のレジスタに値が書き込まれたあとで無いとあるポートの操作が出来ないとか、場合によってはハードウェアの動作完了を待つために特定の時間動作を遅らせる、などが考えられる。半順序関係および時間制約は内部状態間の有向グラフとして表現すること(前記機能単位間において各セクション同士を方向付きアークにより結ぶこと)が可能である。すなわち機能状態依存関係分析部205は、各セクションの実行順序の制約を設定する。ここでのポイントは主としてオリジナルソースコード201 に含まれる情報を元に依存関係を分析しているということである。ここでは依存関係編集部207 が内部状態の依存関係の編集手段を提供していることを考慮して、冗長と思われるような依存関係も省略せずに抽出することが適当と考えられるが、必要に応じて最適な依存関係セットのみを検出できるようなアルゴリズムを実装することも可能である。この様にして分析された内部状態の依存関係は、機能状態依存関係DB206 に登録され、管理される。
依存関係編集部(第2の編集部、第2の提示部)207 は、ユーザに対して内部状態依存関係(機能単位間においてセクションに対する実行順序の制約)の編集のインターフェイスを提供する。依存関係編集部207はユーザからの編集指令(第2の編集指令)にしたがって編集を行う。編集には、たとえば変更、追加、削除がある。この依存関係編集部207が必要な理由は大きく分けて二つある。一つは機能状態依存関係分析部205 の検出した依存関係の中で冗長と思われるような関係を除去したり付け替えたりするためである。もう一つは機能編集部204 により新たな機能が付け加えられたり機能の修正があった場合に、適切に依存関係を付け加えたり変更・削除したりするためである。
以上のようにして、機能DB203 に登録された機能単位と、機能状態依存関係DB206 に登録された内部状態依存関係のセットとに対して必要な保守作業(編集作業)が行われた後、機能直列化合成部(ソースコード生成部)208 によって修正後ソースコード209 を生成する。編集前の機能DB203と、編集前の機能状態依存関係DB206と、ユーザにより入力された編集指令とから、修正後ソースコード209を生成してもよいし、オリジナルソースコード201 に対して必要な修正差分情報を編集後の機能DB203 や編集後の機能状態依存関係DB206 から取得し、取得した修正差分情報をオリジナルソースコード201に適用することにより修正後ソースコード209を生成してもよい。後者の場合、オリジナルソースコード201 に対する変更を必要最小限にとどめることが可能である。すなわち、各機能単位間の内部状態は半順序関係を有するため(一部の内部状態間には順序関係の制約がないため)、前者のように編集前の機能DB203と、編集前の機能状態依存関係DB206と、ユーザにより入力された編集指令とから修正後ソースコードを生成すると、オリジナルソースコードと実行順序が変わることがある。したがって実行順序の変更を最小限にとどめたいときはオリジナルソースコード201に対して差分情報を加えるのがよい。
次に本発明の実施形態を利用したソースコードの修正作業の様子を、例を用いて示す。図3 中のソースコード301 がオリジナルソースコード201 に対応し、図4 中のソースコード401 が修正後ソースコード209 に対応する。
図3 中の302 〜 304 は、機能抽出部202 によってソースコード301 から切り出された機能単位の例である。互いに依存関係のない出力変数を扱う機能単位でソースコード301が分割されている。M1、M2が出力変数であり、これらがユーザにより指定され、スライシング技術(所定のアルゴリズム)を適用することで、機能単位302〜304が得られる。図中で横破線により各機能単位は複数のセクションに区分されている。1つのセクションが1つの内部状態に相当し、1つの機能単位内において各セクションはソースコード301の実行順序に従って上から下方向に並べられている。1つのセクションには連続して実行されなければならないコード群が含まれる。たとえば機能単位302におけるtmp1=*S1と、*M1=M1_CTRL[2][tmp2]とは必ず連続して実行されるべきであり、これらの間に他のコードが挿入されることは認めるべきでない。tmp1,tmp2,は内部変数であり、内部変数が一定である間は関数controlの状態が一定であるとみなす。そして1つのcontrolの状態を1つの内部状態(セクション)として扱う。機能単位間でセクション間を結ぶ矢印は、機能状態依存関係分析部205 で分析された依存関係であり、依存関係編集部207 により編集可能である。矢印は、その出先のセクションのコード群が、その出元のセクションのコード群よりも時間的に後に実行されることを示す。図3 でソースコード301 が実コード空間上で管理されているソースコードであり、機能単位302 〜 304 がユーザビューとして与えられるものの例である。
このうち機能単位304 は出力変数に寄与しない特殊な機能単位である。本例では単なる時間稼ぎのループ(所定時間の待機を行う処理)が切り出されている。この様に出力に寄与しない変数は一括りにして切り出されている。機能単位304 については、単純にもとのソースコード上の、出力変数に寄与しないコードが切り出され、もとのソースコードの実行順序に従って並べられ、1つのコードが1つのセクション(内部状態)を規定している。また機能単位304内の各内部状態の依存関係(実行順序の制約)については、これも単純に元のソースコードにおいて隣接する機能単位の内部状態に依存することが示されている。
図4 中の402 〜 404 は、ユーザビューで編集作業が行われた結果を示している。ここでは新たに機能単位404 が追加されており、それに伴って依存関係(実行順序の制約)が削除されたり(破線矢印)、また新たに追加されたり(太線矢印)している。また機能単位402 は一部修正されている(下線L1参照)。
これらユーザビュー上で行われたソースコード修正作業から、オリジナルソースコードに対する修正差分情報を生成し、この情報を用いてオリジナルソースコード301 を修正した結果(追加された機能の各コードを、オリジナルソースコードの適切な位置に挿入した結果)がソースコード401 である。修正された内容は図中では下線L2で示されている。
次に機能抽出部202 の処理の詳細について、図5 および図6 に示すフローチャートに沿って説明する。
ステップ1:出力変数リスト(注目出力リスト)を生成する(S11)。出力変数リストとは、ソースコード中で外部に対して何らかの値を出力している出力変数(注目出力)の集合である。これは機能単位を切り出す元になる情報となる。図3の場合、M1、M2が出力変数に相当する。
ステップ2:出力変数のそれぞれに対して、スライスを計算し、計算したスライスをスライスリストに登録する(S12〜S15)。スライスの計算とは、プログラムに含まれる関数や、変数の参照・代入関係などを解析し、プログラム内の注目すべき部分だけを抽出する技術である(非特許文献1参照)。1つの出力変数に対してプログラムから抽出されたコード群が1つのスライス(グループ)になり、1つのスライスは、図3の例では、1つの機能単位(302、303あるいは304)から内部状態を規定する横破線を除去したものに相当する。なお上述したように302〜304間の内部状態の依存関係(セクションの実行順序の制約)を表す矢印は機能状態依存関係分析部205により付されるもので現時点では当然ながら存在しない。以上の操作を、全ての出力変数について実施する。出力変数に影響しないコード群は1つのグループにまとめている(図3の例では304)。
ステップ3:抽出された全スライスを入力として、一次独立なスライス群を求める(S16)。スライスが一次独立であるとは、スライス間で共有されるコードが無いことを示す。一次独立なスライス群を求めるとき、スライスの数が最大になるようにスライスの依存性を解決するようにする(S17)。
ステップ4:全てのスライスが互いに一次独立となったら、スライスに含まれる変数(内部変数)に対してdef-use 解析を行って、内部状態を検出する(S18〜S20)。def-use 解析とは、変数に値が代入されてから参照されるまでをその変数の特定の値の寿命とみなし、各変数の値の寿命を算出する解析手法である。スライスに含まれる特定の変数群が一定の値をとっている間は、スライスの内部状態が変化していないと定義できるため、この解析によって内部状態を解析することが可能になる。
例えば図3 の機能単位302 を例に取ると、二行目のtmp1= *S1; と三行目の*M1= M1 CT RL[1][tmp1]; は、tmp1 という内部変数に関してdef-use の関係がある。即ち二行目ではtmp1 に対して代入が行われており(def(ine))、ここで代入された値が三行目で参照されている(use)。この二行の関係は緊密であり、基本的に連続して行われる必要がある。なぜならばこの二行の間にtmp1 の値を変更する別の操作が割り込むと、三行目での結果の正しさが保証されなくなるからである。以上のように各内部変数についてdef-use 関係をトレースし、これが保存されるように状態の切り分けを行っていくのがステップ4のポイントである。
ステップ5:機能DB203 に、各スライス/グループと、各スライス/グループを複数の内部状態に区分する情報(図3の横破線参照)との組を機能単位として登録する(S21)。
以上のように、本実施形態によれば、少資源ソフトウェアとして高効率な実装を行われたソースコードを対象としながらも、編集作業を行う者に対して保守作業を容易にすることができ、開発効率の向上が期待される。
すなわち、保守作業として考慮しなくてはならないのは、デバッグ、機能変更(含む削除)、機能追加等であり、本実施形態では、機能単位を認識して適切な修正が出来るとともに、保守性の低いソースコードに適切なビューを与えることができる。またシビアなタイミング制約などを適切に扱うことも可能である。また、オリジナルのソースコードの変更を最低限必要な範囲にとどめることができるため、プログラムの実行効率が犠牲にされることもほとんどない。
このように、本実施形態では、ソースコードの保守を行う際には機能単位に分割された低結合度・高凝集度のビューを提供して編集作業を容易にしつつ、実際はオリジナルのソースコードに対して最低限の変更によって機能の追加や修正などを行うことが可能となる。
本発明の実施形態の概念を示した図である。 本発明の実施形態の基本構成を示したブロック図である。 図2の基本構成への入力となるプログラムコードの例を示す図である。 図2の基本構成の出力となるプログラムコードの例を示す図である。 図2の基本構成に含まれる機能抽出部のアルゴリズムを説明したフローチャートの前半部分を示す図である。 上記フローチャートの後半部分を示す図である。
符号の説明
201:オリジナルソースコード
202:機能抽出部(機能分割部)
203:機能データベース(DB)
204:機能編集部(第1の編集部)
205:機能状態依存関係分析部(分析部)
206:機能状態依存関係データベース(DB)
207:依存関係編集部(第2の編集部)
208:機能直列化合成部(ソースコード生成部)
209:修正後ソースコード

Claims (21)

  1. 第1のソースコードに含まれる各コードを所定のアルゴリズムにより複数のグループに分割する分割部と、
    各グループに含まれるコード群を前記第1のソースコード内での実行順序に従って並べ、前記グループ毎に並べられた前記コード群を、各々に連続して実行されるべき1つ以上のコードが含まれる1つ以上のセクションに区分する区分部と、
    前記グループごとに、前記セクションに区分されたコード群を格納する記憶部と、
    前記第1のソースコードをもとに前記グループ間での前記セクションに対する実行順序の制約を設定する設定部と、
    前記記憶部に基づき、前記グループごとに前記セクションに区分されたコード群をユーザに提示する第1の提示部と、
    前記設定部により設定された前記グループ間での各前記セクションの実行順序の制約を表す制約情報をユーザに提示する第2の提示部と、
    ユーザからの第1の編集指令に基づき前記記憶部の内容を編集する第1の編集部と、
    ユーザからの第2の編集指令に基づき前記制約情報を編集する第2の編集部と、
    前記第1の編集部により編集された前記記憶部の内容、前記第2の編集部得により編集された制約情報とを用いて第2のソースコードを生成するソースコード生成部と、
    を備えたプログラム開発装置。
  2. 前記第2の提示部は、前記グループ間において各セクション同士を方向付きアークにより結ぶことにより前記制約情報をユーザに提示することを特徴とする請求項1に記載のプログラム開発装置。
  3. 前記第1の編集部は、セクションに区分された新たなコード群を前記記憶部に追加、または、前記記憶部に記憶された前記グループ毎に前記セクションに区分されたコード群を変更または削除することを特徴とする請求項1に記載のプログラム開発装置。
  4. 前記第2の編集部は、前記実行順序の制約を追加、削除、変更することを特徴とする請求項3に記載のプログラム開発装置。
  5. 第1〜第n(nは1以上の整数)の前記グループはそれぞれ、同一の出力変数に影響を与えるコードの集合であり、前記第1〜第nのグループに対応する出力変数は互いに独立していることを特徴とする請求項1記載のプログラム開発装置。
  6. 第n+1の前記グループは、前記第1〜第nのグループに対応する出力変数と無関係コードの集合であることを特徴とする請求項5記載のプログラム開発装置。
  7. 前記第n+1のグループは、要求される時間制約を満足するための処理を行うコード群であることを特徴とする請求項6記載のプログラム開発装置
  8. 前記区分部は、内部変数に対する代入および参照の関係に基づいて、前記グループ毎に並べられた前記コード群を区分することを特徴とする請求項1に記載のプログラム開発装置。
  9. 前記ソースコード生成部は、前記編集された記憶部の内容および前記編集された制約情報と、編集前の記憶部の内容および編集前の制約情報との差分をもとに前記第1のソースコードを修正することにより前記第2のソースコードを生成することを特徴とする請求項1に記載のプログラム開発装置。
  10. 前記ソースコード生成部は、前記編集された記憶部の内容および前記編集された制約情報とから前記第1のソースコードを用いることなく前記第2のソースコードを生成することを特徴とする請求項1に記載のプログラム開発装置。
  11. コンピュータが、
    第1のソースコードに含まれる各コードを所定のアルゴリズムにより複数のグループに分割し、
    各グループに含まれるコード群を前記第1のソースコード内での実行順序に従って並べ、前記グループ毎に並べられた前記コード群を、各々に連続して実行されるべき1つ以上のコードが含まれる1つ以上のセクションに区分し、
    前記グループごとに、前記セクションに区分されたコード群を記憶部に格納し、
    前記第1のソースコードをもとに前記グループ間での前記セクションに対する実行順序の制約を設定し、
    前記記憶部に基づき、前記グループごとに前記セクションに区分されたコード群をユーザに提示し、
    設定された前記グループ間での各前記セクションの実行順序の制約を表す制約情報をユーザに提示し、
    ユーザからの第1の編集指令に基づき前記記憶部の内容を編集し、
    ユーザからの第2の編集指令に基づき前記制約情報を編集し、
    編集された前記記憶部の内容と編集された制約情報とを用いて第2のソースコードを生成する、
    プログラム開発方法。
  12. 前記制約情報の提示は、前記グループ間において各セクション同士を方向付きアークにより結ぶことにより前記制約情報をユーザに提示することを含むことを特徴とする請求項11に記載のプログラム開発方法。
  13. 前記記憶部の内容の編集は、セクションに区分された新たなコード群を前記記憶部に追加、または、前記記憶部に記憶された前記グループ毎に前記セクションに区分されたコード群を変更または削除することを含むことを特徴とする請求項11に記載のプログラム開発方法。
  14. 前記制約情報の編集は、前記実行順序の制約を追加、削除、変更することを含むことを特徴とする請求項13に記載のプログラム開発方法。
  15. 第1〜第nの前記グループはそれぞれ、同一の出力変数に影響を与えるコードの集合であり、前記第1〜第nのグループに対応する出力変数は互いに独立していることを特徴とする請求項11記載のプログラム開発方法。
  16. 第n+1の前記グループは、前記第1〜第nのグループに対応する出力変数と無関係コードの集合であることを特徴とする請求項11記載のプログラム開発方法。
  17. 前記第n+1のグループは、要求される時間制約を満足するための処理を行うコード群であることを特徴とする請求項16記載のプログラム開発方法。
  18. 前記グループ毎に並べられた前記コード群を前記セクションへ区分することは、内部変数に対する代入および参照の関係に基づいて前記グループ毎に並べられた前記コード群を区分することを含むことを特徴とする請求項11に記載のプログラム開発方法。
  19. 前記第2のソースコードの生成は、前記編集された記憶部の内容および前記編集された制約情報と、編集前の記憶部の内容および編集前の制約情報との差分をもとに前記第1のソースコードを修正することにより前記第2のソースコードを生成することを含むことを特徴とする請求項11に記載のプログラム開発方法。
  20. 前記第2のソースコードの生成は、前記編集された記憶部の内容および前記編集された制約情報とから前記第1のソースコードを用いることなく前記第2のソースコードを生成することを含むことを特徴とする請求項11に記載のプログラム開発方法。
  21. 第1のソースコードに含まれる各コードを所定のアルゴリズムにより複数のグループに分割するステップと、
    各グループに含まれるコード群を前記第1のソースコード内での実行順序に従って並べ、前記グループ毎に並べられた前記コード群を、各々に連続して実行されるべき1つ以上のコードが含まれる1つ以上のセクションに区分するステップと、
    前記グループごとに、前記セクションに区分されたコード群を記憶部に格納するステップと、
    前記第1のソースコードをもとに前記グループ間での前記セクションに対する実行順序の制約を設定するステップと、
    前記記憶部に基づき、前記グループごとに前記セクションに区分されたコード群をユーザに提示するステップと、
    設定された前記グループ間での各前記セクションの実行順序の制約を表す制約情報をユーザに提示するステップと、
    ユーザからの第1の編集指令に基づき前記記憶部の内容を編集するステップと、
    ユーザからの第2の編集指令に基づき前記制約情報を編集するステップと、
    編集された前記記憶部の内容と編集された制約情報とを用いて第2のソースコードを生成するステップと、
    をコンピュータに実行させるためのプログラム。
JP2007019251A 2007-01-30 2007-01-30 プログラム開発装置、プログラム開発方法およびプログラム Expired - Fee Related JP4919825B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2007019251A JP4919825B2 (ja) 2007-01-30 2007-01-30 プログラム開発装置、プログラム開発方法およびプログラム
US12/017,734 US8117590B2 (en) 2007-01-30 2008-01-22 Program developing apparatus, program developing method and computer readable medium
CNA200810009052XA CN101236493A (zh) 2007-01-30 2008-01-30 程序开发装置和程序开发方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007019251A JP4919825B2 (ja) 2007-01-30 2007-01-30 プログラム開発装置、プログラム開発方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2008186244A JP2008186244A (ja) 2008-08-14
JP4919825B2 true JP4919825B2 (ja) 2012-04-18

Family

ID=39669406

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007019251A Expired - Fee Related JP4919825B2 (ja) 2007-01-30 2007-01-30 プログラム開発装置、プログラム開発方法およびプログラム

Country Status (3)

Country Link
US (1) US8117590B2 (ja)
JP (1) JP4919825B2 (ja)
CN (1) CN101236493A (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8612954B2 (en) * 2009-08-17 2013-12-17 International Business Machines Corporation Fine slicing: generating an executable bounded slice for program
US8448139B2 (en) * 2009-10-05 2013-05-21 International Business Machines Corporation Automatic correction of application based on runtime behavior
US9081646B2 (en) * 2010-01-22 2015-07-14 Red Hat, Inc. Building packages of functionally different programs from source code of a single program
US8949773B2 (en) * 2010-03-25 2015-02-03 International Business Machines Corporation Deriving process models from natural language use case models
US9170805B2 (en) * 2010-07-20 2015-10-27 Hitachi, Ltd. Software maintenance supporting device for analyzing relationships between variables
US8918544B2 (en) 2011-03-31 2014-12-23 Logitech Europe S.A. Apparatus and method for configuration and operation of a remote-control system
US9239837B2 (en) 2011-04-29 2016-01-19 Logitech Europe S.A. Remote control system for connected devices
US11194624B2 (en) 2017-05-30 2021-12-07 Nec Corporation Partial order procedure planning device, partial order procedure planning method and partial order procedure planning program
JP6805096B2 (ja) * 2017-08-08 2020-12-23 日本電信電話株式会社 ファイル生成装置、ファイル生成方法、および、ファイル生成プログラム
US10877870B2 (en) * 2018-06-11 2020-12-29 Tata Consultancy Services Limited Method and system for verifying properties of source code

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5793369A (en) * 1991-12-06 1998-08-11 Lucent Technologies Inc. Apparatus for visualizing program slices
US5652899A (en) * 1995-03-03 1997-07-29 International Business Machines Corporation Software understanding aid for generating and displaying simiplified code flow paths with respect to target code statements
US7174536B1 (en) * 2001-02-12 2007-02-06 Iowa State University Research Foundation, Inc. Integrated interactive software visualization environment
JP3842592B2 (ja) * 2001-07-26 2006-11-08 株式会社東芝 変更危険度測定システム、変更危険度測定方法及び変更危険度測定プログラム
US7620946B2 (en) * 2003-05-05 2009-11-17 Jeffry Thomas Russell Program slicing for codesign of embedded systems
JP4461771B2 (ja) * 2003-11-06 2010-05-12 日本電気株式会社 異常挙動検出装置および異常挙動検出方法ならびにプログラム、希少挙動部分系列計算装置
US20070016894A1 (en) * 2005-07-15 2007-01-18 Sreedhar Vugranam C System and method for static analysis using fault paths

Also Published As

Publication number Publication date
CN101236493A (zh) 2008-08-06
JP2008186244A (ja) 2008-08-14
US8117590B2 (en) 2012-02-14
US20080184196A1 (en) 2008-07-31

Similar Documents

Publication Publication Date Title
JP4919825B2 (ja) プログラム開発装置、プログラム開発方法およびプログラム
EP3631618B1 (en) Automated dependency analyzer for heterogeneously programmed data processing system
Pleuss et al. Model-driven support for product line evolution on feature level
US20080066046A1 (en) Hardware definition language generation for frame-based processing
JPH08202545A (ja) ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法
JP2007141173A (ja) コンパイルシステム、デバッグシステムおよびプログラム開発システム
JP6479184B2 (ja) コンピュータ実行可能なモデルリバースエンジニアリング方法及び装置
US12032941B2 (en) Method and system for updating legacy software
JP4001286B2 (ja) プログラム保守支援装置、プログラム保守支援方法、およびプログラム
JP2007122135A (ja) 開発支援装置、開発支援方法、および、開発支援プログラム
Bianchini et al. TreeViewer: Flexible, modular software to visualise and manipulate phylogenetic trees
CN103744684A (zh) 一种异构软硬件协同开发的方法及***
JP2005242569A (ja) データ処理装置設計方法、データ処理装置設計装置及びプログラム
Liu et al. Accelerating API-based program synthesis via API usage pattern mining
JP2008198103A (ja) 状態遷移図作成装置および状態遷移図作成方法
US8954307B1 (en) Chained programming language preprocessors for circuit simulation
Engelen From napkin sketches to reliable software
JP5275087B2 (ja) プログラム生成装置およびブロック線図生成装置
KR102046622B1 (ko) 워크플로우 기반 소프트웨어 서비스 시스템 및 이 시스템의 각 기능을 실행시키기 위해 매체에 저장된 컴퓨터 프로그램
CN104239064B (zh) 一种提取和组织arm程序重定位信息的方法
KR100846203B1 (ko) 모바일 어플리케이션의 생성 방법 및 이를 구현하기 위한프로그램을 기록한 기록매체
JP2009211143A (ja) 情報処理装置および情報処理プログラム
JP2006244383A (ja) データベースシステム
WO2012137390A1 (ja) 並列化設計支援システム、プログラム、および方法
US20120192011A1 (en) Data processing apparatus that performs test validation and computer-readable storage medium

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090327

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110928

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111007

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111205

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

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

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

Free format text: PAYMENT UNTIL: 20150210

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees