JP7111967B2 - プログラム検証プログラム、プログラム検証方法およびプログラム検証装置 - Google Patents
プログラム検証プログラム、プログラム検証方法およびプログラム検証装置 Download PDFInfo
- Publication number
- JP7111967B2 JP7111967B2 JP2018165145A JP2018165145A JP7111967B2 JP 7111967 B2 JP7111967 B2 JP 7111967B2 JP 2018165145 A JP2018165145 A JP 2018165145A JP 2018165145 A JP2018165145 A JP 2018165145A JP 7111967 B2 JP7111967 B2 JP 7111967B2
- Authority
- JP
- Japan
- Prior art keywords
- variable
- source code
- value
- instruction
- assignment
- 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.)
- Active
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Description
[第1の実施の形態]
第1の実施の形態を説明する。
第1の実施の形態のプログラム検証装置10は、開発したプログラムを検証する。検証するプログラムは、同一内容のデータを記憶する複数のデータベースを並列に更新する分散データベースシステムに用いられるプログラムであってもよい。例えば、検証するプログラムは、ブロックチェーンを管理する複数のサーバ装置で並列に実行されるものである。プログラム検証装置10は、情報処理装置やコンピュータと呼ばれることもある。プログラム検証装置10は、クライアント装置でもよいしサーバ装置でもよい。
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理システムの例を示す図である。
開発装置100は、バスに接続されたCPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。開発装置100は、第1の実施の形態のプログラム検証装置10に対応する。CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。サーバ装置200,200-1,200-2,200-3,200-4も同様のハードウェアを有する。
サーバ装置200,200-1,200-2,200-3,200-4は、図4に示すようなデータ構造のブロックチェーンを保持する。ブロックチェーンは、ブロック40,40-1,40-2などの複数のブロックを含む。1つのブロックは1つのトランザクション(取引)を示す。ブロック40-1はブロック40の前段のブロックである。ブロック40-2はブロック40の後段のブロックである。各ブロックは、例えば、データをキーとバリューの組であるキーバリュー形式で保持することができる。ブロック40は、ハッシュ値41、取引データ42、公開鍵43および署名44を含む。ブロック40-1,40-2などの他のブロックも、ブロック40と同様のデータ構造をもつ。
図5は、スマートコントラクトの非決定的動作の例を示す図である。
サーバ装置200,200-1,200-2,200-3,200-4は、同一の入力情報を受信して同一のスマートコントラクトを実行し、並列にブロックチェーン210,210-1,210-2,210-3,210-4を更新する。更新後のブロックチェーン210,210-1,210-2,210-3,210-4の内容は同一であることが求められる。よって、スマートコントラクトは、ブロックチェーンに書き込む値が、入力情報および更新前のブロックチェーンの内容から一意に決定されるようにし、それ以外の外部状態に依存して決定されることがないようにすることが求められる。
開発装置100は、開発したスマートコントラクトを記憶する。スマートコントラクト52,53は、検証対象のスマートコントラクトの例である。
抽象構文木61は、スマートコントラクト52から生成される抽象構文木である。抽象構文木61は、ソースコードであるスマートコントラクト52の構文を表す木構造データである。抽象構文木61は、変数の宣言(変数宣言)を示すノードや、変数への値の代入(代入演算)を示すノードを含む。また、抽象構文木61は、代入演算を示すノードの子ノードとして、代入先の変数(左辺の変数)を示すノード、演算子を示すノード、代入値を格納している変数(右辺の変数)を示すノード、代入値を算出する関数の呼び出し(関数呼び出し)を示すノードなどを含む。また、抽象構文木61は、関数呼び出しを示すノードの子ノードとして、関数の引数としての変数を示すノードを含む。
抽象構文木62は、スマートコントラクト53から生成される抽象構文木である。ブロックチェーンへの書き込みが非決定的であるか否かを抽象構文木62を用いて検証する場合、上記の抽象構文木61と同様の検証方法が行われる。
シンボリック実行は、ソースコードを解析して異なる複数の実行パスを検出する静的解析方法である。シンボリック実行では、変数に具体的な値ではなく抽象的なシンボルを代入し、ソースコードを仮想的に実行して演算結果をシンボルを用いた式で表現する。シンボルを用いた式で表された変数の値の変化を追跡することで、実行パスを検出する。
開発装置100は、スマートコントラクト52をSSAソースコード71に変換して記憶し、スマートコントラクト53をSSAソースコード72に変換して記憶する。SSAソースコード71,72は、スマートコントラクト52,53と意味的に等価である。ただし、SSAソースコード71,72は、スマートコントラクト52,53と異なり、1つの変数に対する代入演算は1回だけ行うという制約をもつ。スマートコントラクト52,53からSSAソースコード71,72への変換は次のように行うことができる。
図11は、開発装置の機能例を示すブロック図である。
開発装置100は、ソースコード記憶部121、SSAソースコード記憶部122、制御情報記憶部123、SSA変換部124、非決定性検出部125および結果表示部126を有する。ソースコード記憶部121、SSAソースコード記憶部122および制御情報記憶部123は、RAM102またはHDD103の記憶領域を用いて実装することができる。SSA変換部124、非決定性検出部125および結果表示部126は、CPU101が実行するプログラムを用いて実装することができる。
書き込み操作テーブル131は、予め作成されて制御情報記憶部123に記憶されている。書き込み操作テーブル131は、プログラミング言語および操作の項目を含む。プログラミング言語は、ソースコードであるスマートコントラクトの記述に用いられている高水準言語である。書き込み操作テーブル131の操作は、特定のプログラミング言語においてブロックチェーンへの書き込みに用いられるプログラム記述である。例えば、書き込み操作に用いる関数の名称とその関数の引数の個数が定義される。
(S10)SSA変換部124は、ソースコードであるスマートコントラクトを、SSA形式のソースコード(SSAソースコード)に変換する。SSAソースコードへの変換では、SSA変換部124は、同一の変数に対する2回目以降の代入操作を検出し、代入先の変数を新たな変数に置換し、それ以降の変数の参照を新たな変数の参照に置換する。
(S16)非決定性検出部125は、ステップS15で読んだ行が、検索対象として登録された何れかの変数に値を代入する代入文であるか判断する。登録された変数の代入文である場合はステップS17に進み、それ以外の場合はステップS20に進む。
(S20)非決定性検出部125は、ステップS15でSSAソースコードの先頭行まで読んだか判断する。SSAソースコードの先頭行まで読んだ場合、非決定性検出部125は、ブロックチェーンの書き込み操作が非決定的動作ではないと判定する。そして、プログラム検証が終了する。このとき、結果表示部126は、非決定的動作が検出されなかった旨のメッセージをディスプレイ111に表示してもよい。一方、SSAソースコードの先頭行に到達していない場合、ステップS15に進む。
スマートコントラクト54は、関数mainを含む。関数mainは、浮動小数点実数の乱数を変数Aに代入する。関数mainは、変数Aの値と実数「0.5」とを比較する。変数Aの値が0.5より大きい場合、関数mainは、文字列「Success」と真偽値「True」を引数として関数PutStateを呼び出す。一方、変数Aの値が0.5以下である場合、関数mainは、文字列「Success」と真偽値「False」を引数として関数PutStateを呼び出す。ブロックチェーンに書き込まれる真偽値が「True」になるか「False」になるかは乱数に依存する。
11 記憶部
12 処理部
13,14 ソースコード
15,16 命令
Claims (6)
- コンピュータに、
同一の変数への複数回の値の代入を許容する第1のソースコードを、各変数への値の代入を1回に制限する静的単一代入形式の第2のソースコードに変換し、
前記第2のソースコードから、データベースへの書き込みを示す第1の命令を検索し、前記第1の命令において書き込む値が格納されている変数を検出し、前記第2のソースコードから、前記検出した変数への値の代入を示す第2の命令を検索し、
前記第2の命令における前記検出した変数に代入される値の取得方法に基づいて、前記データベースへの書き込みが、前記第1のソースコードの引数および前記データベースのデータ以外の実行状況に依存する非決定的動作であるか否か判定する、
処理を実行させるプログラム検証プログラム。 - 前記第2の命令の検索では、前記第1の命令から前記第2のソースコードの先頭に向かって、前記第2のソースコードに含まれる命令を走査する、
請求項1記載のプログラム検証プログラム。 - 前記コンピュータに更に、
前記第2の命令において前記検出した変数への値の代入の際に参照される他の変数を検出し、前記第2の命令から前記第2のソースコードの先頭に向かって命令を走査して、前記検出した他の変数への値の代入を示す第3の命令を検索し、
前記第3の命令に基づいて、前記検出した変数に代入される値の取得方法を追跡する、
処理を実行させる請求項1記載のプログラム検証プログラム。 - 前記非決定的動作の判定では、前記検出した変数に代入される値の取得方法が、乱数の取得、タイムスタンプの取得およびグローバル変数の参照の少なくとも1つを含む場合、前記データベースへの書き込みが前記非決定的動作であると判定する、
請求項1記載のプログラム検証プログラム。 - コンピュータが、
同一の変数への複数回の値の代入を許容する第1のソースコードを、各変数への値の代入を1回に制限する静的単一代入形式の第2のソースコードに変換し、
前記第2のソースコードから、データベースへの書き込みを示す第1の命令を検索し、前記第1の命令において書き込む値が格納されている変数を検出し、前記第2のソースコードから、前記検出した変数への値の代入を示す第2の命令を検索し、
前記第2の命令における前記検出した変数に代入される値の取得方法に基づいて、前記データベースへの書き込みが、前記第1のソースコードの引数および前記データベースのデータ以外の実行状況に依存する非決定的動作であるか否か判定する、
プログラム検証方法。 - 同一の変数への複数回の値の代入を許容する第1のソースコードを記憶する記憶部と、
前記第1のソースコードを、各変数への値の代入を1回に制限する静的単一代入形式の第2のソースコードに変換し、前記第2のソースコードから、データベースへの書き込みを示す第1の命令を検索し、前記第1の命令において書き込む値が格納されている変数を検出し、前記第2のソースコードから、前記検出した変数への値の代入を示す第2の命令を検索し、前記第2の命令における前記検出した変数に代入される値の取得方法に基づいて、前記データベースへの書き込みが、前記第1のソースコードの引数および前記データベースのデータ以外の実行状況に依存する非決定的動作であるか否か判定する処理部と、
を有するプログラム検証装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018165145A JP7111967B2 (ja) | 2018-09-04 | 2018-09-04 | プログラム検証プログラム、プログラム検証方法およびプログラム検証装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018165145A JP7111967B2 (ja) | 2018-09-04 | 2018-09-04 | プログラム検証プログラム、プログラム検証方法およびプログラム検証装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2020038482A JP2020038482A (ja) | 2020-03-12 |
JP7111967B2 true JP7111967B2 (ja) | 2022-08-03 |
Family
ID=69738032
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018165145A Active JP7111967B2 (ja) | 2018-09-04 | 2018-09-04 | プログラム検証プログラム、プログラム検証方法およびプログラム検証装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP7111967B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111562906B (zh) * | 2020-04-15 | 2023-06-06 | 杭州云象网络技术有限公司 | 一种基于Noesis逻辑的智能合约开发与验证方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014089700A (ja) | 2012-09-27 | 2014-05-15 | Tata Consultancy Services Ltd | ランタイム実行障害のソースを識別するシステム及び方法 |
WO2016121074A1 (ja) | 2015-01-30 | 2016-08-04 | 株式会社日立製作所 | ソフトウェア検査装置 |
-
2018
- 2018-09-04 JP JP2018165145A patent/JP7111967B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014089700A (ja) | 2012-09-27 | 2014-05-15 | Tata Consultancy Services Ltd | ランタイム実行障害のソースを識別するシステム及び方法 |
WO2016121074A1 (ja) | 2015-01-30 | 2016-08-04 | 株式会社日立製作所 | ソフトウェア検査装置 |
Non-Patent Citations (2)
Title |
---|
樽井 翔 ほか,脆弱性検出のための値範囲解析,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,2007年,Vol.107, No.175,pp.95-100 |
立石 孝彰 ほか,ブロックチェーンアプリケーション開発の実践と今後の課題,ソフトウェアエンジニアリングシンポジウム2017論文集,2017年08月23日,pp.204-211 |
Also Published As
Publication number | Publication date |
---|---|
JP2020038482A (ja) | 2020-03-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10318595B2 (en) | Analytics based on pipes programming model | |
US9645799B2 (en) | Method and system for model driven development | |
US8954928B2 (en) | Version labeling in a version control system | |
JP2006185211A (ja) | プログラム解析装置、テスト実行装置、その解析方法及びプログラム | |
US20160171104A1 (en) | Detecting multistep operations when interacting with web applications | |
JP7148802B2 (ja) | 解析プログラム、解析方法および解析装置 | |
US8959479B2 (en) | Presenting a custom view in an integrated development environment based on a variable selection | |
US10839124B1 (en) | Interactive compilation of software to a hardware language to satisfy formal verification constraints | |
JP7111967B2 (ja) | プログラム検証プログラム、プログラム検証方法およびプログラム検証装置 | |
US11978067B2 (en) | Determining patterns within a string sequence of user actions | |
Dincturk | Model-based crawling-an approach to design efficient crawling strategies for rich internet applications | |
CN116166547A (zh) | 代码变更范围分析方法、装置、设备、存储介质 | |
US11334475B1 (en) | Graph based event-driven computing | |
JP6955162B2 (ja) | 解析装置、解析方法および解析プログラム | |
US11119761B2 (en) | Identifying implicit dependencies between code artifacts | |
US9354870B2 (en) | Maintaining integrity of output of code generators | |
JP6644188B2 (ja) | 影響抽出装置、影響抽出プログラム及び影響抽出方法 | |
Gabrijelčič | Delphi High Performance: Build fast Delphi applications using concurrency, parallel programming and memory management | |
US20240045658A1 (en) | Reducing code path permutations | |
CN110750569A (zh) | 数据提取方法、装置、设备及存储介质 | |
US20220414101A1 (en) | Shifting left database degradation detection | |
JP2020024533A (ja) | 分析支援方法および分析支援プログラム | |
Azimi et al. | Adaptv: A model-based test adaptation approach for end-to-end user interface testing of smart tvs | |
Sparsha et al. | Visualization of Data Structures with Animation of Code | |
CN116431194A (zh) | 持续集成任务的构建方法、装置、设备以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20210610 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20210614 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20210614 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20220531 |
|
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: 20220621 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20220704 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7111967 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |