JP2016181228A - ソースコード演算装置およびソースコード演算方法 - Google Patents
ソースコード演算装置およびソースコード演算方法 Download PDFInfo
- Publication number
- JP2016181228A JP2016181228A JP2015062541A JP2015062541A JP2016181228A JP 2016181228 A JP2016181228 A JP 2016181228A JP 2015062541 A JP2015062541 A JP 2015062541A JP 2015062541 A JP2015062541 A JP 2015062541A JP 2016181228 A JP2016181228 A JP 2016181228A
- Authority
- JP
- Japan
- Prior art keywords
- source code
- control flow
- flow graph
- analysis
- cfg
- 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.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】ソフトウェアプログラムをより適切に解析する技術を提供する。【解決手段】ソフトウェアプログラムのソースコードを解析するためのソースコード演算装置であって、前記ソースコードの構文を解析し、前記ソフトウェアプログラムを、内部に分岐および合流を有しない命令の集合である基本ブロックと前記基本ブロック間の制御構造を示す有向グラフとで表わした制御フローグラフを生成する制御フローグラフ生成部と、前記ソフトウェアプログラムの構文の解析で値が定まらない部分を未定とした前記制御フローグラフに基づいて前記ソフトウェアプログラム内の所定の解決対象を探索し、前記制御フローグラフを用いて前記解決対象の到達定義を計算し、前記到達定義から得られる値を前記制御フローグラフに反映することにより前記制御フローグラフを再構成する解決部と、を有している。【選択図】図1
Description
本発明は、マイクロコントローラ向けソフトウェアプログラムのソースコードを解析する技術に関する。
近年ではマイクロコントローラ(以下「マイコン」と称す)の一部で生産終了するものが出ている。マイコンの生産終了に伴い、マイコンを内蔵する産業機器などで、生産終了となったマイコンから他のマイコンへの置き換えが進められている。そのために、あるマイコン用に設計された組み込みソフトウェアを他のマイコン用に再設計することが求められている。
生産終了となるマイコンを内蔵する製品の中にはソフトウェアプログラムの全部あるいは一部がアセンブリ言語で記述されたものがある。アセンブリ言語の仕様はマイコン製品によって異なるため、アセンブリ言語で記述されたソースコードは、C言語のような高水準言語のソースコードと異なり、マイコン間の移植性が低い。また、マイコン製品によってアーキテクチャが異なるため、ソフトウェアプログラムの再設計において、アセンブリ言語のソースコードは命令単位の単純な変換では対応できないことが殆どである。例えば、命令単位で変換の手順を一意に定めることは困難であり、フラグなどのマイコン内部処理、メモリマップ、周辺回路の互換などを含めてソースコードを一旦解析した上で、命令の集合が意味する処理内容を考慮しながら変換していくことになる。
以上のような背景から、アセンブリ言語で記述されたソースコードの静的な解析、とりわけデータの流れ(データフロー)の解析が重要となる。データフローレベルでソースコードを解析することができれば、命令の集合が意味する処理内容を把握できる。しかし、特にデータフローを考慮してソースコードを修正するにはソースコードの熟読が必須であり、人手で作業する場合、高いスキルと多大な工数が必要とされる。そのためソフトウェアプログラムのデータフローレベルでの解析を自動化することができれば、大きな工数の削減が期待できる。
特許文献1には、ソースコードからマシンコードへ変換する過程において、処理の並列化が可能であるかどうか判定し、可能であれば並列化されたマシンコードを生成するプログラム並列化支援装置が記載されている。特許文献1では、プログラムを並列化することが可能かどうかソースコードをデータフローレベルで解析し、並列化を阻害する要因を抽出している。
上述のように、あるマイコン向けに記述されたソースコードを他のマイコン向けに修正するためには、データフローレベルでソースコードを解析する必要がある。ソフトウェアプログラムのデータフローレベルでの解析にはCFG(制御フローグラフ)が用いられる。CFGは、ソフトウェアプログラムを、内部に分岐および合流を有しない基本ブロックと、基本ブロック間の分岐あるいは合流などの制御構造を示す有向グラフとによって表現したものである。CFGはソースコードを構文解析することにより得ることができる。
ソフトウェアプログラムのデータフローレベルでの解析はCFGを用いて到達定義を計算することで実現される。到達定義とは、各基本ブロックの入り口に到達するデータ定義命令の集合である。到達定義から命令間の依存関係やレジスタなどの変数が取り得る値の候補を知ることができる。それらの情報をソースコードの解析に活用することによりプログラムをデータフローレベルで解析することが可能となる。また、そのようなソフトウェアプログラムのデータフローレベルでの解析を可能にするためにCFGが完全なものでなければならない。
上述したようにCFGはソースコードの構文解析により得られる。しかし、ソースコードの構文を解析しただけで完全なCFGを得られない場合もある。例えば、ソースコードの中に間接アドレッシングモードの分岐命令が含まれている場合、ソースコードの構文解析だけで完全なCFGを得ることはできない。間接アドレッシングモードではソースコードを構文解析しても実際のアドレス番地が直接得られないからである。実際のアドレス番地が分からなければ、分岐命令の分岐先を判定することは難しい。分岐命令の分岐先が判明しなければCFGを完成させることができない。
特許文献1にはプログラムの並列化の可能性を判断する方法が説明されている。その方法というのは、CFGを解析してC言語のポインタ情報を取得し、得られたポインタ情報を並列化が可能か否かを判定するための指標として利用するというものである。このポインタが、間接アドレッシングモードによる命令と類似する処理を実現するものである。つまり、ポインタが示す変数の内容をアドレス値とし、そのアドレス値が示すメモリ上の番地にあるデータを参照したり、更新したりするという処理が実現される。その際、特許文献1に記載された技術では、ソースコードから直接得たCFGのみを利用してポインタを解析し、ポインタに依存関係があるかどうか判定する。しかし、特許文献1の技術は並列化の可能性を判定することを目的としているため、特定の命令を実行したときにポインタが示すアドレス値まで考慮する必要はない。
一方、あるマイコンの組み込みソフトウェアを他のマイコン用に修正する場合、データフローレベルでソースコードを解析し、参照あるいは更新するデータのアドレス値を取得し、新たなマイコンにおいてもそのアドレスのデータを参照あるいは更新するようにソフトウェアプログラムを修正する必要がある。また、アドレス値はマイコン毎に固有であるため必然的に置き換えの対象となることがある。そのためソフトウェアプログラムの再設計で命令を新しく置き換えるためにはアドレス値の算出が不可欠である。
しかし、特許文献1に開示された処理では具体的なアドレス値を導出しないため、ポインタが示すアドレス値がCFGに影響するような場合には完全なCFGを得ることができない。
このように、あるマイコンのソフトウェアプログラムをアーキテクチャが異なる他のマイコン用に書き換えるには、特許文献1の技術では不十分であり、間接アドレッシングモードなどを含め、ソフトウェアプログラムをより適切に解析する技術が必要である。
本発明の目的は、ソフトウェアプログラムをより適切に解析する技術を提供することである。
本発明の一態様によるソースコード演算装置は、ソフトウェアプログラムのソースコードを解析するためのソースコード演算装置であって、前記ソースコードの構文を解析し、前記ソフトウェアプログラムを、内部に分岐および合流を有しない命令の集合である基本ブロックと前記基本ブロック間の制御構造を示す有向グラフとで表わした制御フローグラフを生成する制御フローグラフ生成部と、前記ソフトウェアプログラムの構文の解析で値が定まらない部分を未定とした前記制御フローグラフに基づいて前記ソフトウェアプログラム内の所定の解決対象を探索し、前記制御フローグラフを用いて前記解決対象の到達定義を計算し、前記到達定義から得られる値を前記制御フローグラフに反映することにより前記制御フローグラフを再構成する解決部と、を有している。
本発明によれば、ソフトウェアプログラムを構文解析して得た制御フローグラフで未定値を生じさせている解決対象を探索し、その解決対象を制御フローグラフを用いて解決し、その解析で得た値を制御フローグラフに反映させることにより、未定値となっている部分を決定していく。構文解析では明らかとならない部分を制御フローグラフを用いて解決していくので、ソフトウェアプログラムをより適切に解析することが可能となる。
以下、図面を用いて本実施形態によるソースコード解析装置について説明する。なお、本ソースコード解析装置は所定のソースコード解析方法を実現する装置であり、例えば、あるマイコン用のソフトウェアプログラムを他のマイコン用に再設計するのに利用可能である。
図1は、本実施形態によるソースコード解析装置100の基本的構成を示すブロック図である。図1を参照すると、ソースコード解析装置100は、CFG生成部BL101と、アドレス値解決部BL102と、CFG管理テーブルOB103と、プログラム解析処理部BL103と、プログラム最適化処理部BL104を有している。
CFG生成部BL101は、アセンブリ言語等で記述されたソースコードOB101を入力とし、そのソースコードOB101の構文を解析して制御フローグラフ(CFG)を生成する。生成されたCFGがCFGオブジェクトOB102となる。CFGは、ソースコードOB101のの構文を解析して生成されるグラフデータであり、そのデータ構造は、内部に分岐および合流を有しない基本ブロックと、基本ブロック間のデータの流れを示す有向グラフと、により表現される。
アドレス値解決部BL102は、CFGオブジェクトOB102を元にソースコードOB101のデータフロー解析を実行する。その際、アドレス値解決部BL102は、CFGオブジェクトOB102内にある間接アドレッシングモードの命令を探索し、その命令にて参照される実効アドレスを示すアドレス情報を取得する。
更に、アドレス値解決部BL102は、取得したアドレス情報を、データフロー解析に利用したCFGオブジェクトOB102に反映し、再構成したCFGオブジェクトOB102に所定の管理情報を付加し、解析結果としてCFG管理テーブルOB103に記録する。その管理情報には、CFGオブジェクトOB102の識別情報と、開始位置からアドレス解決の対象となった間接アドレッシングモードの命令までのプログラムパスを示すパストレース情報とが含まれる。
CFG管理テーブルOB103は、アドレス値解決部BL102が取得した間接アドレッシングモードの命令で参照する実効アドレスを示すアドレス情報と管理情報とを含む解析結果をデータベースにて保持する。
プログラム解析処理部BL103は、CFG生成部BL101がソースコードOB101から生成し、アドレス値解決部BL102が間接アドレッシングモードの命令のアドレス解決を行った結果を反映したCFGオブジェクトに対して、そのCFGオブジェクトにおける所定の解析対象命令を解析する所定の解析処理を実行し、その解析結果をプログラム解析結果OB105として出力する。所定の解析処理は、一例を挙げれば、データフロー解析により解析対象命令の到達定義を算出する処理である。その場合、算出した到達定義が解析結果となる。プログラム解析結果OB105は、CFG管理テーブルOB103に登録されたCFGオブジェクトOB102を元に、置き換え前のマイコン用のソースコードOB101を置き換え後の新たなマイコンが処理できる形式のソースコードOB106へ変換するとき、変換を行うマシンまたは人間が参照する情報である。
プログラム最適化処理部BL104は、プログラム解析結果OB105を元に、入力されたソースコードOB101を最適化する。ここでいう最適化は、ソースコードOB101を、置き換え後の新たなマイコンで処理しやすい形式にしたり、新たなマイコンで効率よく処理できるようにしたり、または人間の作業を容易化あるいは低減できるようにすることである。具体的には、プログラム解析結果OB105を、置き換え後の新たなマイコンが効率よく自動処理できる形式、あるいは人間にとって可読性の高い形式に変換することが好ましい。
図2A〜図2Bは、ソースコードとそれを基に生成したCFGの一例を示す図である。図2Aはソースコードの一例を示し、図2Bは、図2Aのソースコードから生成したCFGオブジェクトを示している。
図2BのCFGオブジェクトOB102を見ると、図2Aに示したソースコード200が、内部に分岐および合流を含まない基本ブロックB202、B203、B204に分割されている。更に開始(START)ブロックB201と終了(END)ブロックB205を加えた5つのブロックB201〜205が、連結状態を矢印で示した有向グラフで連結されている。
図3は、アドレス値解決部BL102のブロック図である。図3を参照すると、アドレス値解決部BL102は、プログラムパス探索部BL301、データフロ―解析部BL302、CFG再構成部BL303、およびCFG検証部BL304を有している。
プログラムパス探索部BL301は、入力されたCFGオブジェクトOB102からSTARTブロックB201を探し出し、STARTブロック201から各基本ブロックの命令を辿り、解析対象命令を探索する。解析対象命令は具体例として間接アドレッシングモードの命令である。プログラムパス探索部BL301は、解析対象命令を発見すると、開始位置からその命令までのプログラムパスを示すプログラムパス情報を出力する。
データフロー解析部BL302は、プログラムパス探索部BL301からのプログラムパス情報に基づき、CFGオブジェクトOB102を元にデータフロー解析処理を実行することにより、解析対象命令の実効アドレスの候補となる値(アドレス候補値)を生成する。
CFG再構成部BL303は、データフロー解析部BL302が生成したアドレス候補値を元にCFGオブジェクトOB102を再構成する。
CFG検証部BL304は、再構成されたCFGオブジェクト(再構成CFGオブジェクトOB301)を検証し、管理情報と共にCFG管理テーブルOB103へ保存する。また、CFG検証部BL304は、他の構成のCFGが得られる可能性がある場合、再構成CFGオブジェクトOB301を再びプログラムパス探索部BL301へ戻す。CFGオブジェクトOB301の検証として、例えば、開始位置から解析対象命令までのプログラムパスを正常に辿れること等を検証すればよい。
図1に戻り、CFG管理テーブルOB103は、CFG生成部BL101が生成したCFGオブジェクトあるいはそれを再構成した再構成CFGオブジェクト(以下それらをまとめて「CFGオブジェクトOB102」とも称す)と、その管理情報とを、それらを互いに紐付けた状態で保存するテーブルである。管理情報には、当該CFGオブジェクトOB102の識別情報と、当該CFGオブジェクトOB102が生成に寄与した、解析対象命令である間接アドレッシングモードの命令までのプログラムパス情報が含まれる。
プログラム解析処理部BL103は、CFG管理テーブルOB103に登録されたCFGオブジェクトOB102を解析することにより、ソースコードの移植に必要な情報を生成し、生成したプログラム解析結果OB105を出力する。
また、プログラム最適化処理部BL104は、プログラム解析処理部BL103が生成したプログラム解析結果OB105を元に、ソースコードOB101に対してプログラム最適化処理を行い、処理結果を出力する。ここでいう最適化処理は、ソースコードOB101を移植先のマイコンが処理可能な形式へ変換する処理、あるいはその変換に有用な情報を生成する処理である。プログラム最適化処理部BL104は、例えば、最適化したソースコードOB106を出力する。
図4は、本実施形態によるソースコード解析装置の処理を示すフローチャートである。
まず、ソースコード解析装置100は、入力されたソースコードOB101の字句解析および構文解析を実行し、ソースコードOB101にプログラミング言語上のエラーがあるかどうかチェックする(ステップS400)。
ソースコードOB101に文法上のエラーがあったら、ソースコード解析装置100は、エラーを通知して処理を終了する(ステップS401)。ソースコードOB101に文法上のエラーが見当たらない場合、ソースコード解析装置100は、図2Bに示したようなCFGオブジェクトOB102を生成する(ステップS401)。ステップS401の処理において、プログラム中に間接アドレッシングモード(IDA:Indirect Addressing Mode)の命令を含む場合がある。しかし、この時点でアドレスの具体的な値を見積もることはできないため、未定値としておく。
次に、ソースコード解析装置100は、ソースコードOB101のプログラムパスを辿り、間接アドレッシングモードの命令があるか否か判定する(ステップS402)。ソースコードOB101中に間接アドレッシングモードの命令が見つからない場合、ソースコード解析装置100は、ステップS401の処理で得られたCFGオブジェクトOB102を出力し、処理を終了する。すなわち、間接アドレッシングモードの命令が見つからずにプログラムの終点に到達した場合は処理を終了する。
ソースコードOB101に間接アドレッシングモードの命令が含まれていた場合、ソースコード解析装置100は、ステップS401の処理で得られた、その命令を含むCFGオブジェクトOB102を探索対象CFGとして登録し(ステップS403)、プログラムパス探索処理を開始する(ステップS404)。
プログラムパスの探索過程において間接アドレッシングモードの命令を発見した場合、ソースコード解析装置100は、現在探索中のCFGオブジェクトOB102を用いてデータフロー解析を実行し、到達定義を計算することで、間接アドレッシングモードの命令のアドレスの候補値を計算する(ステップS405)。なお、到達定義は、式(1)のデータフロー方程式を計算することで得られる。
式(1)において、IN(B)はCFGオブジェクトOB102の基本ブロックBに到達する定義命令の集合を示す。OUT(B)は基本ブロックBの出口で有効な定義命令の集合である。Pred(B)は基本ブロックBの先行ブロックの集合である。PはPred(B)の要素である。
DEF(B)は基本ブロックBにおいて定義される定義命令の集合である。KILL(B)は基本ブロックBにおいて再定義等によって消滅する定義命令の集合である。このデータフロー方程式をステップS404の処理にて発見した間接アドレッシングモードの命令が属する基本ブロックにおいて計算し、当該命令においてアドレス情報を保持するレジスタまたはメモリの有効な定義集合(到達定義)を計算する。この到達定義を命令セットシミュレータ等により解釈することでアドレス値を得ることができる。
次に、ソースコード解析装置100は、アドレス値が有効であるか確認する(ステップS406)。得られたアドレス値が有効なアドレス値でなければ、エラーを出力して処理を終了する(ステップS411)。
得られたアドレス値が有効であれば、ソースコード解析装置100は、探索対象CFGとなっているCFGオブジェクトOB102を複製し、そのアドレス候補値を元にCFGオブジェクトOBが示すCFGを再構成する(ステップS407)。CFGの再構成の際、間接アドレッシングモードの命令であることを示す情報を残しておく。ソースコードOB101によっては複数のアドレス値を得る場合があるが、アドレス値毎に、CFGオブジェクトOB102のコピーを複製し、そのアドレス値を用いて再構成する。
次に、ソースコード解析装置100は、解析終了条件が満たされているか否か検証する(ステップS408)。ステップS408における解析終了条件は、再構成CFGオブジェクトOB301の構造が循環するという条件である。例えば、再構成されたCFGである再構成CFGオブジェクトOB301の構造が、既にCFG管理テーブルOB103に登録されている場合、同じ構造のCFGが繰り返し発言する可能性が高い。同じ構造のCFGが繰り返される場合、すなわちCFG構造が循環する場合、新たに得られるCFGはこれ以上存在しないこととなる。その場合、それ以上の探索は不要といえるので、解析終了条件が満たされる。解析終了条件が満たされていれば、ソースコード解析装置100は処理を終了する(ステップS408のYes)。
一方、解析終了条件が満たされていなければ、ソースコード解析装置100は、再構成CFGオブジェクトOB301を管理情報と共にCFG管理テーブルOB103に登録する(ステップS409)。
図5は、CFG管理テーブルOB103のイメージを示す図である。図5中の「CFG」が再構成CFGオブジェクトOB301である。「NO.X」は再構成CFGオブジェクトOB301の識別番号であり、「PATH」はプログラムパス情報である。この「NO.X」と「PATH」は管理情報に該当する。
その後、ソースコード解析装置100は、再構成CFGオブジェクトOB301を探索対象CFGとして登録し、アドレス解決処理を実行した間接アドレッシングモードの命令を始点としてステップS404の探索処理を実行する(ステップS410)。
なお、ステップS400においてソースコードOB101に文法上のエラーが発見された場合、ステップS406においてアドレスが有効な値でなかった場合は、ステップS411にてエラー情報を生成して処理を終了する。このエラー情報が生成された場合、ソースコードOB101を移植する過程において必ず人手によりプログラムを解析して手直しする作業が発生する。そのため、エラー情報は人間が容易に理解できるように詳細な情報を出力することが好ましい。たとえば、エラー情報として、具体的なアドレス値、そのアドレス値の決定に寄与する到達定義、関連する命令群の情報が該当する。
図6は、図4のステップS404からS410までの一連の処理を詳細化したフローチャートである。
ソースコード解析装置100は、STARTブロックB201からプログラム先頭命令を検索する(ステップS700)。プログラムの先頭の命令(以下「プログラム先頭命令」という)は、ソースコードOB101から生成したCFGオブジェクトOB102におけるSTARTブロックに続く後続ブロックを参照することで見つけることができる。
次に、ソースコード解析装置100は、それまでのパスのトレースを記録したパストレース情報を初期化し、プログラム先頭命令を探索点として設定する(ステップS701)。探索点とは、プログラムパスを辿る命令の探索における現在の位置(命令)をいう。次に、ソースコード解析装置100は、探索点の命令をパストレース情報に追記し(ステップS702)、その次の命令を探索点として設定する(ステップS703)。
なお、プログラムには分岐が存在する場合がある。ソースコード解析装置100は、プログラムにおける分岐を発見した場合、その分岐毎に非決定的に探索を行う。図7は、分岐にける探索のイメージを示す図である。
図7を参照すると、基本ブロックB800が命令(分岐命令)104により基本ブロックB801またはB802に分岐する例が示されている。その場合、命令104の次の探索点は命令105または命令115のいずれかとなる。この際、パストレース情報P803を複製し、基本ブロックB801を探索する場合のパストレース情報P804と、基本ブロックB802を探索する場合のパストレース情報P805とを生成する。それらはプログラムパスを辿るときに利用される。
探索点がプログラム終点である場合、ソースコード解析装置100は、探索中のプログラムパスにおける解析処理を終了する(ステップS704)。すべてのプログラムパスの探索を行い、解析処理を終了した場合に限り、ソースコード解析装置100は、完全な終了条件が満たされたと判断する。
しかし、プログラム中にループが存在する場合、プログラムパスが無限通りとなり解析処理を終了することができない場合がある。この場合、ループとなるパスを探索する場合のプログラムパス探索条件に制限をつけることで、プログラムパスを辿る命令の探索を終了させることが可能となる。例えば、同じループを通過する回数をカウントし、そのカウント値(ループ回数)が、閾値である所定値に達したら、ループ終了条件が満たされたと判定してプログラムパスの探索を終了することにしてもよい。その場合、閾値をユーザが手動で設定できてもよい。また、データフロー解析によりループ終了条件を定めることにしてもよい。
通常、間接アドレッシングモードの命令によって指定されるアドレス値はアドレス空間上で制限された領域内のアドレスのみとなることが多いので、ループ回数が有限となることが大半である。特に、生産終了の対象となるような古い設計のマイコンのプログラム場合、メモリ空間のサイズが乏しく、間接アドレッシングモードの命令で指定されるアドレスが取りうるメモリ領域も極めて限定的である場合が多い。したがって、生産終了のマイコンのソフトウェアプログラムを移植するためにソースコードを解析するという目的においては、ループ回数によってループ終了条件を定めるのは有用かつ現実的な手法である。
ソースコード解析装置100は、次に探索点が間接アドレッシングモードの命令であるか否か判定する(ステップS705)。そうでなければ、ソースコード解析装置100は、パストレース情報に追記した上で探索点を次命令に進めて探索処理を継続する(ステップS705、S702、S703)。一方、ステップS705の判定において探索点が間接アドレッシングモードの命令である場合、ソースコード解析装置100は、探索処理で利用しているCFGオブジェクトOB102を利用してデータフロー解析を実施し、当該命令における到達定義を計算し、当該命令のアドレス値を取得する(ステップS706、S707)。
式(1)にて上述したデータフロー方程式の計算は、データフローが全体として不動点に到達するまで計算を繰り返す方法がよく利用される。その場合、パストレース情報に含まれない命令も到達定義に含まれる可能性がある。そこで、式(1)を用いたデータフロー解析により得られた到達定義のうち、パストレース情報に含まれない命令を除去することが好ましい。そのようにパストレース情報に含まれない命令を除去した到達定義を元にアドレスの候補値を計算することで、ソフトウェアプログラムが確実にアクセスし得るアドレス値を得ることができるようになる。
次に、ソースコード解析装置100は、以上の過程で得られたアドレス値が有効であるか否か判定する(ステップS708)。アドレス値が有効である場合、ソースコード解析装置100は、探索処理で用いているCFGオブジェクトOB102を複製し、アドレス値を元に再構成し、再構成されたCFGオブジェクトOB102を生成する(ステップS709)。
間接アドレッシングモードの命令にはジャンプ命令と非ジャンプ命令とがある。間接アドレッシングモードの命令がジャンプ命令である場合、ソースコード解析装置100は、基本ブロック間の連結関係を含めてCFGオブジェクトOB102を再構成する。一方、間接アドレッシングモードの命令が非ジャンプ命令である場合、ソースコード解析装置100は、当該命令を絶対値表記に変換するのみでよい。
間接アドレッシングモードの命令のアドレス解決に基づきCFGオブジェクトOB102を再構成するときにおいても、当該命令が元々間接アドレッシングモードの命令であったことを識別できる情報(フラグ等)を付与する。この情報は、再探索時に当該命令のアドレス値の解決を再実行する際の指標として利用する。その際、アドレス値を保持するレジスタあるいはメモリの情報も併せて保持してもよい。
図8は、CFGオブジェクトが変換される様子を例示する図である。
ここでCFG900はプログラムパス探索で利用中のCFGオブジェクトである。CFG901およびCFG902は、再構成された後のCFGオブジェクトである。例えば、命令103における間接アドレッシングモードのジャンプ命令において、破線矢印によって図示されているように、アドレス値を格納するレジスタR0が0xXXXXまたは0xYYYYという値をなる場合について考える。その場合、CFG900を2つコピーし、一方はレジスタのアドレスR0=0xXXXXを元にCFG900再構成することでCFG901を取得する。他方はレジスタのアドレスR0=0xYYYYを元にCFG900を再構成することでCFG902を取得する。
ステップS709にて再構成されたCFGオブジェクトは、管理情報と共にCFG管理テーブルOB103に登録される(ステップS710)。CFGオブジェクトが格納された様子のイメージは図5に示した通りであり、管理情報として、CFGオブジェクトOB102の識別情報と、開始位置からアドレス解決対象の命令までのパストレース情報が含まれる。
次に、ソースコード解析装置100は、再構成CFGオブジェクトOB301をプログラムパスの探索対象となるCFGオブジェクトとして設定し、解析終了条件が満たされるまで探索処理を繰り返す(ステップS711)。
ステップS709において、アドレス値の候補が複数となる場合、ソースコード解析装置100は、それぞれのアドレス値を元に再構成された再構成CFGオブジェクトOB301のそれぞれに対してプログラムパスに沿った探索処理を実行する。この際、ソースコード解析装置100は、パストレース情報も併せて複製し、プログラムパスの探索において分岐命令を発見した場合と同様、非決定的に処理を実行する。ステップS708において有効なアドレスの候補値を得られない場合、ソースコード解析装置100は、前述の通りエラーを生成して処理を終了する(ステップS712)。
以上の処理により、CFG管理テーブルOB103は、プログラムが取り得る全てのCFGオブジェクトOB102のパターンを保持することができ、更に、それらCFGオブジェクトOB102は間接アドレッシングモードの命令による影響を考慮済みのものとなる。
図9は、プログラム解析処理部BL103による解析処理のフローチャートである。解析処理は、CFG管理テーブルOB103に登録されたCFGオブジェクトOB102を利用して実行される。
最初に、プログラム解析処理部BL103は、解析の対象となる命令を識別する(ステップS1000)。解析対象命令は、ユーザが手動で指定する方法、所定の条件により機械的に自動指定する方法などがある。
解析対象命令が指定されると、プログラム解析処理部BL103は、CFG管理テーブルOB103へアクセスし、最初のCFGオブジェクトOB102を取得する(ステップS1001)。CFG管理テーブルOB103においてはCFGオブジェクトOB102のデータは様々な管理方法で管理され得る。最も単純な方法はリスト型で記録し、管理する方法である。CFGオブジェクトOB102をリストとして管理する場合、リストの先頭にあるCFGオブジェクトOB102が、上述した最初のCFGオブジェクトOB102に該当する。
次に、プログラム解析処理部BL103は、CFG管理テーブルOB103から取得した最初のCFGオブジェクトOB102に紐付けられた管理情報に含まれるパストレース情報を参照し、そのパストレース情報で示されたプログラムパスに解析対象命令が含まれているか否か検証する(ステップS1002)。
パストレース情報に解析対象命令が含まれていない場合、それは、そのCFGオブジェクトOB102は解析対象命令が実行されたときに通らないCFGオブジェクトOB102であることを意味するので、プログラム解析処理部BL103は、次に、全てのCFGオブジェクトOB102を検証したか否か判定する(ステップS1003)。全てのCFGオブジェクトOB102が検証済であれば、プログラム解析処理部BL103は処理を終了する。また、未だ検証を行っていないCFGオブジェクトOB102があれば、プログラム解析処理部BL103は次のCFGオブジェクトOB102を取得し(ステップS1004)、ステップS1002に戻る。
ステップS1002にてパストレース情報で示されたプログラムパスに解析対象命令が含まれていたら、プログラム解析処理部BL103は、CFGオブジェクトOB102を利用してソフトウェアプログラムを解析する所定の処理を実行する(ステップS1005)。この解析処理として様々な処理が適用可能であるが、一例として、データフロー解析により解析対象命令の到達定義を計算する処理がある。
次に、プログラム解析処理部BL103は、ステップS1005の解析処理において、パストレース情報に含まれない命令を含むような解析結果が生じたら。それを除去する(ステップS1006)。そのような解析結果は無効なものだからである。例えば、前方解析あるいは後方解析などのCFGオブジェクトOB102を用いてデータフロー方程式に基づいてソフトウェアプログラムを解析する場合、到達定義が不動点に達するまでデータフロー方程式を繰り返し解くという処理が存在する場合がある。そのような場合、解析対象命令が実行された後に実行される命令が解析対象命令の解析結果に含まれてくることが起こりうる。そして、後から実行される命令が実行されていない状態の情報に基づく解析結果は無効である。その場合には、CFGオブジェクトOB102に紐付けられたパストレース情報を元に命令の解析結果を得る必要があるため、ステップS1006で、プログラム解析処理部BL103は、無効な解析結果を除去しておく。
次に、プログラム解析処理部BL103は、得られた解析結果を出力する(ステップS1007)。解析対象命令の解析結果に、その命令の解析に利用されたCFGオブジェクトOB102に関する情報を付加する。このとき付加するCFGオブジェクトOB102に付加する情報は、CFGオブジェクトOB102に紐付けられた管理情報に含まれている識別情報であってもよいし、パストレース情報を含むCFGオブジェクトOB102そのものであってもよい。
プログラム解析処理部BL103は、解析結果を、人間が容易に解読可能な形式、あるいはコンピュータによるバッチ処理が可能な形式などで出力すればよい。
図10は、人間が容易に解読可能な形式となった解析結果が画面に表示されている様子を示す図である。図10の例では、データフローを示す画像の画像データを含めてWebブラウザで閲覧可能な形式となっている。図11は、コンピュータがバッチ処理することができる形式の解析結果を示す図である。図11の例では、XMLベースの言語で記述された解析結果(OB1200)と、CSV(OB1201)、バイナリデータなど機械処理可能な形式で出力する。これらの処理結果を元に、プログラム最適化処理部BL104は、ソフトウェアプログラムのソースコードOB101を最適化する処理を行う。
上述したように最適化処理は様々考えられるが、例を挙げると、複数の命令の意味を解析してそれら複数の命令を含んだ処理を効率よく実現するようにコードを変換する処理、内部レジスタを自動更新する処理を含めた不要な命令の削除、制御構造を最適にする処理、異なるメモリ空間の変換、IOに依存する命令の抽出、高可読性のコードの生成処理などである。
以上説明したように、本実施形態によると、間接アドレッシングモードの命令による影響を考慮しながらCFGオブジェクトOB102を生成でき、そのCFGオブジェクトOB102を元に制的解析によりソースコードOB101の解析を実行することができる。その解析結果を、ブラウザなどでの可読性が高い方法で閲覧できるようにする手段や、コンピュータが認識可能な形式へ変換することで、ソースコード移行に係る工数削減や、最適化された変換済コードを生成できる。
また、本実施形態では、形式検証などに代表される不具合検証を目的とせず、動作が保証されたプログラムを元に解析するため、有限時間内で解析できることが多く、異なるマイコン間でソースコードOB101を移植する場合に有用である。
また、本実施形態では、制御フローグラフ生成部(CFG生成部BL101)が、ソースコードOB101の構文を解析し、ソフトウェアプログラムを、内部に分岐および合流を有しない命令の集合である基本ブロックとその基本ブロック間の制御構造を示す有向グラフとで表わした制御フローグラフ(CFG)を生成する。解決部(アドレス値解決部BL102)は、ソフトウェアプログラムの構文の解析で値が定まらない部分を未定とした制御フローグラフに基づいてソフトウェアプログラム内の所定の解決対象を探索し、制御フローグラフを用いて解決対象の到達定義を計算し、その到達定義から得られる値を制御フローグラフに反映することにより、制御フローグラフを再構成する。
これによれば、ソフトウェアプログラムを構文解析して得た制御フローグラフで未定値を生じさせている解決対象を探索し、その解決対象を制御フローグラフを用いて解決し、その解析で得た値を制御フローグラフに反映させることにより、未定値となっている部分を決定していく。構文解析では明らかとならない部分を制御フローグラフを用いて解決していくので、ソフトウェアプログラムをより適切に解析することが可能となる。
また、本実施形態では、解決部(アドレス値解決部BL102)は、制御フローグラフを再構成すると、解決した解決対象を始点としてプログラムパスを辿って次の解決対象を探索し、その解決対象を解決して制御フローグラフを再構成するという処理を、ソフトウェアプログラム内の全ての解決対象を解決するまで繰り返す。
これによれば、解決対象を探索して解決するという処理を全ての解決対象を解決するまで繰り返すので、ソフトウェアプログラムをより適切に解析することが可能となる。
また、本実施形態では、プログラム解析処理部BL103は、再構成された制御フローグラフに基づいてソースコードを解析する。再構成された制御フローグラフを用いてソースコードを解析することができるので、より適切にソフトウェアプログラムを解析することができる。
また、本実施形態によれば、プログラム解析処理部BL103は、制御フローグラフに基づくデータフロー解析によりソースコードを解析する。これによれば、データフロー解析でソースコードを解析するので、構文解析では未定値となってしまう部分を確定させることができる。
また、本実施形態では、プログラム解析処理部BL103は、ソースコードの解析により得た情報と、データフロー解析に用いた制御フローグラフと、を解析結果として出力する。これによれば、ソースコードの解析結果とともに制御フローグラフを出力するので、ソースコード解析の課程で行われたデータフロー解析の状況を知ることができる。
また、本実施形態によれば、解決部(アドレス値解決部BL102)は、制御フローグラフを再構成するとき、ソフトウェアプログラムの開始位置から制御フローグラフまでのプログラムパスを示すパストレース情報を制御フローグラフと共に記録し、パストレース情報を参照してソースコードの静的解析を実行する。これによれば、パストレース情報を記録しそれを参照してソフトウェアプログラムの静的解析を実行するので、パストレース情報が示すプログラムパスに沿ってソフトウェアの静的解析を進めることができる。
(他の実施形態)
(他の実施形態)
上述の実施形態では、間接アドレッシングモードの命令を含むソースコードOB101の解析を例示したが、ここでは他の実施形態として自己書き換えコードを含むソースコードの解析について例示する。
自己書き換えコードとは、MOV命令などのデータコピー命令を利用し、プログラムを実行中に実行しているプログラムのプログラムコード記憶域のデータを書き換えることにより、プログラムの処理内容を更新する命令である。自己書き換えコードは、アセンブリ言語により簡単に記述可能であり、様々な用途で利用される。上述した実施形態で間接アドレッシングモードの命令に対応したのに対して、他の実施形態では、自己書き換えコードの命令に対応する。
図12は、他の実施形態によるソースコード解析装置の一部を示すブロック図である。図12には、本実施形態のソースコード解析装置は、図1に示したソースコード解析装置100とは、アドレス値解決部BL102が自己書き換えコード解決部BL1300へ置き換えられている点で異なることが示されている。
自己書き換えコード解決部BL1300は、自己書き換えコード判定部BL1301と、自己書き換えコード識別部BL1302とを有している。
自己書き換えコード判定部BL1301は、入力されたCFGオブジェクトOB102内の命令に対して、その命令がメモリ領域にデータを書き込む命令である場合、そのメモリ領域がプログラム領域であるか判定する。データを書き込む命令でプログラム領域を書き換える命令であれば、その命令は自己書き換えコードである。
自己書き換えコード識別部BL1302は、当該命令が自己書き換えコードであれば、その命令で書き込まれる値を取得し、その値から具体的なメモリの内容を識別する。自己書き換えコードによって書き換えられたメモリの内容が分かれば、ソースコードOB101の解析が可能となる。
自己書き換えコード判定部BL1301は、命令が自己書き換えコードであるか否かを判定するための指標として、メモリにおけるプログラム領域のアドレス情報を定義したプログラム域定義リストOB1301を保持している。
メモリのプログラム領域を知る方法として、例えば、以下に示す3つの方法がある。ひとつ目は、ソースコードから判定する方法である。二つ目は、マイコンのマニュアルから判定する方法である。三つ目は、ソースコードOB101のデータフローを解析し、プログラムカウンタの情報を頼りに実行コードとして参照されるメモリ領域から判定する方法である。
また、自己書き換えコード識別部BL1302は、メモリのプログラム領域に書き込まれる値(バイナリ値)と、その値が示す命令についての情報(命令情報)との対応関係を示す情報を保持する命令コードテーブルOB1302を有している。命令コードテーブルOB1302に格納する情報は、主にマイコンの仕様書から取得できる。
図13は、他の実施形態によるソースコード解析装置の解析処理のフローチャートである。
まず、ソースコード解析装置100は、図4の間接アドレッシングモードの命令を解析するときと同様に、ソースコードOB101からCFGを生成した後、ソースコードOB101に自己書き換えコードが存在するか否か確認する(ステップS1400)。ある命令が自己書き換えコードであるかどうかは、プログラム域定義リストOB1301を元に、命令によりデータが書き込まれるメモリアドレスがプログラム領域であるか否か判定し、データが書き込まれるメモリアドレスがプログラム領域であれば、その命令は自己書き換えコードであると判定する。
ソースコードOB101中に自己書き換えコードの存在を確認した場合、ソースコード解析装置100は、入力によって指定されたCFGオブジェクトOB102を探索対象として設定する(ステップS1401)。
次に、ソースコード解析装置100は、探索対象のCFGオブジェクトOB102のプログラムパスを先頭から辿り、自己書き換えコードがあるか否か探索する(ステップS1402)。
プログラムパスを辿ってソフトウェアプログラムの終了位置に到達した場合にはソースコード解析装置100はソースコードOB101の解析ができない旨のエラーを出力し(ステップS1409)、処理を終了する。
プログラムパスを辿っていく中で分岐を発見したら、ソースコード解析装置100は、間接アドレッシングモードの命令を発見したときと同様、分岐先ごとに非決定的に探索を行う。ソースコード解析装置100は、自己書き換えコードについて、探索で利用したCFGオブジェクトOB102を基に到達定義を計算し、書き込まれる値を同定する(ステップS1403)。この書き込まれる値は、命令の内容を識別するのに利用される。
次に、ソースコード解析装置100は、ステップS1403の処理で得られた値から、命令コードテーブルOB1302を参照して新たに書き換わる命令の内容を取得し、その命令を表わすコードが有効なものであるか否か検証する(ステップS1404)。その命令が有効なものでなければ、ソースコード解析装置100は、ソースコード20を解析できない旨を示すエラーを出力して処理を終了する(ステップS1409)。
その命令が有効なものであれば、ソースコード解析装置100は、探索対象のCFGオブジェクトOB102を複製し、書き換わる命令の情報を基にCFGオブジェクトOB102を再構成する(ステップS1305)。
更に、ソースコード解析装置100は、間接アドレッシングモードの命令の場合と同様、解析終了条件が満たされているか否か確認する(ステップS1406)。解析終了条件が満たされて入れば、ソースコード解析装置100は処理を終了する。解析終了条件が満たされていなければ、ソースコード解析装置100は、再構成されたCFGオブジェクトOB102(再構成CFGオブジェクトOB301)をCFG管理テーブルOB103へ登録する(ステップS1407)。更に、ソースコード解析装置100は、再構成CFGオブジェクトOB301を探索対象に設定し(ステップS1408)、ステップS1402に戻り、解析終了条件が満たされるまで処理を繰り返す。
以上の処理により、ソースコード解析装置100は、自己書き換えコードを含むソースコードOB101のCFGオブジェクトOB102を取得することができる。また、ソースコード解析装置100は、そのCFGオブジェクトOB102を利用してソースコードOB101の静的解析を実現できる。間接アドレッシングモードの場合と同様、得られたCFGから得られた解析結果を、様々な形式へ変換することで、ソースコードOB101の移植に係る工数を削減したり、あるいは最適化された変換済のソースコードを自動生成したりすることも可能となる。
上述した本発明の各実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
100…ソースコード解析装置、BL101…CFG生成部、BL102…アドレス値解決部、BL103…プログラム解析処理部、BL104…プログラム最適化処理部、BL1300…コード解決部、BL1301…コード判定部、BL1302…コード識別部、BL301…プログラムパス探索部、BL302…データフロー解析部、BL303…CFG再構成部、BL304…CFG検証部、OB101…ソースコード、OB102…CFGオブジェクト、OB103…CFG管理テーブル、OB105…プログラム解析結果、OB106…ソースコード、OB1301…プログラム域定義リスト、OB1302…命令コードテーブル、OB301…再構成CFGオブジェクト
Claims (10)
- ソフトウェアプログラムのソースコードを解析するためのソースコード演算装置であって、
前記ソースコードの構文を解析し、前記ソフトウェアプログラムを、内部に分岐および合流を有しない命令の集合である基本ブロックと前記基本ブロック間の制御構造を示す有向グラフとで表わした制御フローグラフを生成する制御フローグラフ生成部と、
前記ソフトウェアプログラムの構文の解析で値が定まらない部分を未定とした前記制御フローグラフに基づいて前記ソフトウェアプログラム内の所定の解決対象を探索し、前記制御フローグラフを用いて前記解決対象の到達定義を計算し、前記到達定義から得られる値を前記制御フローグラフに反映することにより前記制御フローグラフを再構成する解決部と、
を有するソースコード演算装置。 - 前記解決部は、前記制御フローグラフを再構成すると、解決した前記解決対象を始点としてプログラムパスを辿って次の解決対象を探索し、当該解決対象を解決して前記制御フローグラフを再構成するという処理を、前記ソフトウェアプログラム内の全ての解決対象を解決するまで繰り返す、
請求項1に記載のソースコード演算装置。 - 再構成された前記制御フローグラフに基づいて前記ソースコードを解析するプログラム解析処理部を更に有する、請求項1または2に記載のソースコード演算装置。
- 前記プログラム解析処理部は、前記制御フローグラフに基づくデータフロー解析により前記ソースコードを解析する、請求項3に記載のソースコード演算装置。
- 前記プログラム解析処理部は、前記ソースコードの解析により得た情報と、前記データフロー解析に用いた前記制御フローグラフと、を解析結果として出力する、請求項4に記載のソースコード演算装置。
- 前記解決部は、前記制御フローグラフを再構成するとき、前記ソフトウェアプログラムの開始位置から前記制御フローグラフまでのプログラムパスを示すパストレース情報を前記制御フローグラフと共に記録し、前記パストレース情報を参照して前記ソースコードの静的解析を実行する、請求項1に記載のソースコード演算装置。
- 前記解決対象は間接アドレッシングモードの命令である、請求項1に記載のソースコード演算装置。
- 前記解決対象は、実行中にプログラム領域を書き換える命令である、請求項1に記載のソースコード演算装置。
- ソフトウェアプログラムのソースコードを解析するためのソースコード演算方法であって、
制御フローグラフ生成手段が、前記ソースコードの構文を解析し、前記ソフトウェアプログラムを、内部に分岐および合流を有しない命令の集合である基本ブロックと前記基本ブロック間の制御構造を示す有向グラフとで表わした制御フローグラフを生成し、
解決手段が、前記ソフトウェアプログラムの構文の解析で値が定まらない部分を未定とした前記制御フローグラフに基づいて前記ソフトウェアプログラム内の所定の解決対象を探索し、前記制御フローグラフを用いて前記解決対象の到達定義を計算し、前記到達定義から得られる値を前記制御フローグラフに反映することにより前記制御フローグラフを再構成する、
ソースコード演算方法。 - 前記解決手段は、前記制御フローグラフを再構成すると、解決した前記解決対象を始点としてプログラムパスを辿って次の解決対象を探索し、当該解決対象を解決して前記制御フローグラフを再構成するという処理を、前記ソフトウェアプログラム内の全ての解決対象を解決するまで繰り返す、
請求項9に記載のソースコード演算方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2015062541A JP2016181228A (ja) | 2015-03-25 | 2015-03-25 | ソースコード演算装置およびソースコード演算方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2015062541A JP2016181228A (ja) | 2015-03-25 | 2015-03-25 | ソースコード演算装置およびソースコード演算方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2016181228A true JP2016181228A (ja) | 2016-10-13 |
Family
ID=57132579
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2015062541A Pending JP2016181228A (ja) | 2015-03-25 | 2015-03-25 | ソースコード演算装置およびソースコード演算方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2016181228A (ja) |
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR20180068243A (ko) * | 2016-12-13 | 2018-06-21 | 경북대학교 산학협력단 | 자동차 제어 소프트웨어의 정형검증을 위한 장치 및 방법, 이를 수행하기 위한 기록 매체 |
| CN113157597A (zh) * | 2020-07-08 | 2021-07-23 | 北京嘀嘀无限科技发展有限公司 | 结构解析方法、装置、电子设备和存储介质 |
| JP2022044446A (ja) * | 2020-09-07 | 2022-03-17 | 株式会社野村総合研究所 | 情報処理装置及びプログラム |
| US12117922B1 (en) | 2022-01-07 | 2024-10-15 | EAGLE6 Software, Inc. | Computing technologies for tracing source code to determine compliance or lack thereof with operational requirements therefor |
| WO2025191823A1 (ja) * | 2024-03-15 | 2025-09-18 | 日本電気株式会社 | プログラム、処理装置及び方法 |
-
2015
- 2015-03-25 JP JP2015062541A patent/JP2016181228A/ja active Pending
Cited By (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR20180068243A (ko) * | 2016-12-13 | 2018-06-21 | 경북대학교 산학협력단 | 자동차 제어 소프트웨어의 정형검증을 위한 장치 및 방법, 이를 수행하기 위한 기록 매체 |
| KR102004592B1 (ko) | 2016-12-13 | 2019-07-26 | 경북대학교 산학협력단 | 자동차 제어 소프트웨어의 정형검증을 위한 장치 및 방법, 이를 수행하기 위한 기록 매체 |
| CN113157597A (zh) * | 2020-07-08 | 2021-07-23 | 北京嘀嘀无限科技发展有限公司 | 结构解析方法、装置、电子设备和存储介质 |
| JP2022044446A (ja) * | 2020-09-07 | 2022-03-17 | 株式会社野村総合研究所 | 情報処理装置及びプログラム |
| JP7514149B2 (ja) | 2020-09-07 | 2024-07-10 | 株式会社野村総合研究所 | 情報処理装置及びプログラム |
| US12117922B1 (en) | 2022-01-07 | 2024-10-15 | EAGLE6 Software, Inc. | Computing technologies for tracing source code to determine compliance or lack thereof with operational requirements therefor |
| WO2025191823A1 (ja) * | 2024-03-15 | 2025-09-18 | 日本電気株式会社 | プログラム、処理装置及び方法 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US10782936B1 (en) | Programming migration system and methods | |
| US11579856B2 (en) | Multi-chip compatible compiling method and device | |
| CN110008113B (zh) | 一种测试方法、装置、电子设备 | |
| CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
| CN104461578B (zh) | 代码自动合并方法和系统 | |
| CN113204571B (zh) | 涉及写入操作的sql执行方法、装置及存储介质 | |
| CN111158656B (zh) | 基于因果树法的测试代码生成方法及装置 | |
| CN111143228B (zh) | 基于决策表法的测试代码生成方法及装置 | |
| US9619212B2 (en) | Providing code, code generator and software development environment | |
| GB2508643A (en) | Method for Performing a Regression Test after Modifying Source Code File | |
| CN110058861B (zh) | 源码处理方法及装置、存储介质、电子设备 | |
| CN111026433A (zh) | 基于代码变更历史的软件代码质量问题自动修复方法、系统及介质 | |
| JP2014241021A (ja) | ソフトウェア評価装置および方法 | |
| JP2016181228A (ja) | ソースコード演算装置およびソースコード演算方法 | |
| JP2022091685A (ja) | プログラミング言語コーパスの生成 | |
| CN118779247B (zh) | 应用程序测试方法、设备、存储介质和程序产品 | |
| TW201818237A (zh) | 仿真裝置、仿真方法及儲存仿真程式的儲存媒體 | |
| CN110990051A (zh) | 软件包依赖关系的维护方法、装置、介质和设备 | |
| CN112825033A (zh) | 界面代码的生成方法、装置、设备及存储介质 | |
| CN108694049B (zh) | 一种更新软件的方法和设备 | |
| JP2016133946A (ja) | ソースコードレビュー方法及びそのシステム | |
| CN110737438A (zh) | 一种数据处理方法和装置 | |
| CN115994085A (zh) | 代码覆盖率的测试处理方法、装置、设备及存储介质 | |
| CN109019217B (zh) | 一种电梯控制软件现场调试系统 | |
| US11256602B2 (en) | Source code file retrieval |