JP2014089700A - ランタイム実行障害のソースを識別するシステム及び方法 - Google Patents

ランタイム実行障害のソースを識別するシステム及び方法 Download PDF

Info

Publication number
JP2014089700A
JP2014089700A JP2013200157A JP2013200157A JP2014089700A JP 2014089700 A JP2014089700 A JP 2014089700A JP 2013200157 A JP2013200157 A JP 2013200157A JP 2013200157 A JP2013200157 A JP 2013200157A JP 2014089700 A JP2014089700 A JP 2014089700A
Authority
JP
Japan
Prior art keywords
computer program
value
variable
expression
analysis
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
JP2013200157A
Other languages
English (en)
Other versions
JP5706940B2 (ja
Inventor
Mahamuni Ravi
ラヴィ、マハムニ
Sharma Shivani
シヴァニ、シャルマ
Pravin Kalyani Kejul
カルヤニ ケジュル、プラヴィン
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.)
Tata Consultancy Services Ltd
Original Assignee
Tata Consultancy Services Ltd
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 Tata Consultancy Services Ltd filed Critical Tata Consultancy Services Ltd
Publication of JP2014089700A publication Critical patent/JP2014089700A/ja
Application granted granted Critical
Publication of JP5706940B2 publication Critical patent/JP5706940B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】コンピュータプログラムのランタイム実行障害について静的解析を実施するシステム及び方法を提供する。
【解決手段】システムは、識別モジュール212と、解析モジュール214と、修正モジュール216と、静的解析モジュール218とを備える。識別モジュール212は、コンピュータプログラムにおいて関心点を識別する。解析モジュール214は、変数または式への前の代入を特定するため、その変数に関連付けられた値に応じて、静的解析を実行する。修正モジュール216は、その変数の値を新しい値に変更することを許可するか、または、その式を新しい式に変更することを許可する。静的解析モジュール218は、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行する。
【選択図】図2

Description

本発明は、広くは、コンピュータプログラム解析の分野に関する。具体的には、本発明は、ランタイム実行障害のソースを識別すること、及び実際のコンピュータプログラムコードを変更することなくコンピュータプログラムの静的解析を実行することに関するものである。
ソフトウェアの正当性を得ることは、数十年にも及ぶ研究と実践にもかかわらず、困難な作業であることが判明している。利用可能なソフトウェアの多くは、欠陥を含んでいる。コンピュータプログラムの欠陥またはエラーまたはランタイム実行障害を発見することは、決して発見されないものが一部あってもよいのであれば、簡単である。すべての欠陥を発見することができない理由は、テスト中に現れたり現われなかったりする欠陥があり得ることである可能性がある。いくつかの例では、比較的頻繁に現れる欠陥が見過ごされることがある。そのような欠陥が見過ごされたままとなる理由は、それらが欠陥もしくはエラーとして明白ではないか、または、それらが深刻なものではないか、いずれかである。コンピュータプログラムの欠陥には、いくつかの可能性のあるタイプがあり、それには、論理エラー、機能エラー、ランタイムエラーなどが含まれる。ソフトウェア展開フェーズの後の段階で欠陥を修正することは、通常、経済的ではなく、より大きな経済的支援が費やされる。
様々なタイプのソフトウェア欠陥は、静的型付け言語用の現在利用可能なコンパイラを用いて検出することができる。欠陥は、SDLCの様々なフェーズで検出され得る。欠陥は、コードレビュープロセスの早い段階で発見されることがあり、あるいは作成フェーズで発見されることがある。また、欠陥は、静的解析ツールによって発見されることがあり、あるいは手動コードレビューの際に発見されることがある。欠陥を発見するための最もよくあるアプローチは、ソフトウェアテストである。ソフトウェアテストによって、ほとんどの欠陥は識別されるものの、すべての欠陥を発見するためには、テストは現実的ではない。テストは、開発プロセスの終わり頃に実行可能コードに適用されるのみであるので、無用な労力を要し、さらには多くの時間がかかる。
ソフトウェアの欠陥を検出するための別のアプローチは、静的解析ツールを用いることである。静的解析ツールは、コードを実行することなく、ランタイムエラー、リソース・リーク、及びセキュリティの脆弱性を、静的に発見するために用いられる。静的プログラム解析は、実際にプログラムを実行することなく実施されるコンピュータソフトウェア解析である。現在の静的解析ツールは、コードにおける欠陥とレビューポイントをレポートする。そのようなツールによってレポートされた欠陥及びレビューポイントをレビューするには、かなりの時間を費やす必要がある。
これらのアプローチのいずれかによって、いずれかの時点で欠陥がレポートされると、存在する欠陥の根本原因、及び欠陥を除去することができる方法を分析することは、手動で行われるため、かなりの時間が費やされる。欠陥を修正して、その効果を検証するためには、ユーザは、実際のソースコードで必要な変更を行って、ソースコード全体について再度テストまたは静的解析の同じプロセスを辿ることが必要となり得る。さらに、ユーザは、欠陥の存在を発見したり、あるいは実際のコードの変更によって別の欠陥が取り込まれたかどうかを分析したりしなければならない場合がある。ソースコードで行われた変更の効果を迅速にチェックするために利用できるソリューションは限られている。
本概要は、コンピュータプログラムのランタイム実行障害について静的解析を実施するためのシステム及び方法に関するコンセプトを紹介するために提示されるものであり、それらのコンセプトは以下の詳細な説明において更に記載される。本概要は、特許請求の対象である本質的な特徴を特定するものではなく、また、特許請求の対象範囲を決定もしくは限定するものでもない。
一実施態様において、コンピュータプログラムのランタイム実行障害について静的解析を実施するための方法を開示する。その方法は、コンピュータプログラムを静的に解析することにより、コンピュータプログラムにおいて関心点を識別することを含む。関心点は、ランタイム実行障害の原因となる変数または式を含む。その方法は、さらに、その変数に関連付けられた値に応じて、静的解析を実行することにより、その変数または式への前の代入を特定することを含む。その方法は、さらに、その変数の値を新しい値に変更することを許可すること、または、その式を新しい式に変更することを許可することを含む。その方法は、さらに、修正されたコンピュータプログラムを生成するため、新しい値または新しい式に基づいてコンピュータプログラムを修正することを含む。その方法は、さらに、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行することを含む。その方法の識別するステップ、特定するステップ、許可するステップ、コンピュータプログラムを修正するステップ、静的増分解析を実行するステップは、メモリに記憶されたプログラム命令を用いてプロセッサにより実行される。
一実施態様において、コンピュータプログラムのランタイム実行障害について静的解析を実施するためのシステムを開示する。そのシステムは、プロセッサと、プロセッサに接続されたメモリと、を備える。プロセッサは、メモリに記憶された複数のモジュールを実行することができる。これら複数のモジュールには、コンピュータプログラムにおいて関心点を識別するように構成された識別モジュールが含まれる。関心点は、ランタイム実行障害の原因となる変数または式を含む。複数のモジュールには、その変数または式への前の代入を特定するため、その変数に関連付けられた値に応じて、静的解析を実行するように構成された解析モジュールが含まれる。複数のモジュールには、さらに、その変数の値を新しい値に変更することを許可するか、または、その式を新しい式に変更することを許可するように構成された修正モジュールが含まれ、これにより、修正されたコンピュータプログラムを生成するように、新しい値または新しい式に基づいてコンピュータプログラムを修正する。複数のモジュールには、さらに、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行するように構成された静的解析モジュールが含まれる。
一実施態様において、コンピュータプログラムのランタイム実行障害について静的解析を実施するためのコンピュータプログラム・プロダクトを開示する。そのコンピュータプログラム・プロダクトは、コンピュータプログラムを静的に解析することにより、コンピュータプログラムにおいて関心点を識別するためのプログラムコードを含む。関心点は、ランタイム実行障害の原因となる変数または式を含む。そのコンピュータプログラム・プロダクトは、さらに、その変数に関連付けられた値に応じて、静的解析を実行することにより、その変数または式への前の代入を特定するためのプログラムコードを含む。そのコンピュータプログラム・プロダクトは、さらに、その変数の値を新しい値に変更することを許可するため、または、その式を新しい式に変更することを許可するためのプログラムコードを含む。そのコンピュータプログラム・プロダクトは、さらに、修正されたコンピュータプログラムを生成するため、新しい値または新しい式に基づいてコンピュータプログラムを修正するためのプログラムコードを含む。そのコンピュータプログラム・プロダクトは、さらに、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行するためのプログラムコードを含む。
本発明の一実施形態により、コンピュータプログラムのランタイム実行障害について静的解析を実施するためのシステムのネットワークの実現形態を示す説明図 本発明の一実施形態によるシステムの種々のモジュールを示す説明図 本発明の一実施形態により、コンピュータプログラムのランタイム実行障害について静的解析を実施する方法を示すフローチャート 本発明の例示的な一実施形態により、ランタイム実行障害について静的解析を実施する方法を示すフローチャート 本発明の別の例示的な一実施形態により、ランタイム実行障害について静的解析を実施する方法を示すフローチャート 本発明の別の例示的な一実施形態により、ランタイム実行障害について静的解析を実施する方法を示すフローチャート 本発明の例示的な一実施形態により、ランタイム実行障害について静的解析を実施する方法を示すフローチャート
添付の図面を参照して、詳細な説明を記載する。図面において、参照番号の左端の桁は、その参照番号が最初に表示される図面を示している。図面全体を通して、同様の機能及び構成要素を参照するのに同一の番号を用いている。
コンピュータプログラムのランタイム実行障害について静的解析を実施するためのシステム及び方法について説明する。コンピュータプログラムを静的に解析することにより、コンピュータプログラムにおいて関心点を識別する。関心点は、コンピュータプログラムのランタイム実行障害の原因となる変数または式または組み合わせを含み得る。バックワードパスを実行することにより、すなわち前の代入及び他の関与する式(複数の場合もある)を辿ることにより、ランタイム実行障害のソースを特定する。
その変数の値または式は、変数の定義位置または任意のプログラム位置において変更することができ、これによって、コンピュータプログラムを修正する。修正されたコンピュータプログラムにおいて静的増分解析を実行することで、コンピュータプログラムの実行におけるその変更の効果を確認する。新しい値または新しい式によりなされたコンピュータプログラムへの変更は、コンピュータプログラムの実行における変更の効果に応じて、承認または拒否することができる。
コンピュータプログラムのランタイム実行障害について静的解析を実施するための記載のシステム及び方法の様々な側面は、いくつもの異なるコンピューティングシステム、環境、及び/または構成で実現することができるが、以下の例示的なシステムの文脈において実施形態について説明する。
ここで図1を参照すると、本主題の一実施形態により、ランタイム実行障害について静的解析を実施するためのシステム102のネットワークの実現形態100を示している。一実施形態において、システム102は、コンピュータプログラムにおいて静的解析を実施する。ランタイム障害の原因となっている可能性のある関心点が識別される。関心点における変数の前の値または関与する式(複数の場合もある)を特定するため、バックワードパス代入(バックワードパス)を実行することができる。変数の値または式は、新しい値または新しい式に変更することができる。新しい値または新しい式によるコンピュータプログラムにおいて静的増分解析を実行することで、コンピュータプログラムの実行における変更を確認する。
システム102はサーバ上に実装されるものと考えて、本主題について説明するが、システム102は、ラップトップコンピュータ、デスクトップコンピュータ、ノートブックコンピュータ、ワークステーション、メインフレームコンピュータ、サーバ、ネットワークサーバなど、様々なコンピュータシステムに実装することもできると認められる。なお、明らかなように、システム102には、以下でまとめてユーザ104と呼ぶ1つまたは複数のユーザ装置104‐1、104‐2、...104‐N、またはユーザ装置104上に常駐するアプリケーションを介して、複数のユーザがアクセスすることができる。ユーザ装置104の例として、限定するものではないが、ポータブルコンピュータ、パーソナルデジタルアシスタント、ハンドヘルドデバイス、ワークステーションを含むことができる。ユーザ装置104は、ネットワーク106を介してシステム102に通信接続される。
一実施形態において、ネットワーク106は、無線ネットワーク、有線ネットワーク、またはそれらの組み合わせとすることができる。ネットワーク106は、イントラネット、ローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、インターネットなど、様々なタイプのネットワークの1つで実現することができる。ネットワーク106は、専用ネットワークまたは共有ネットワークのいずれかとすることができる。共有ネットワークとは、相互に通信するために、例えば、ハイパーテキスト転送プロトコル(HTTP)、伝送制御プロトコル/インターネットプロトコル(TCP/IP)、ワイヤレスアプリケーションプロトコル(WAP)など、様々なプロトコルを用いる様々なタイプのネットワークを接続したものを意味する。また、ネットワーク106は、ルータ、ブリッジ、サーバ、コンピュータ装置、記憶装置など、様々なネットワーク装置を備えることができる。
次に図2を参照すると、本主題の一実施形態によるシステム102を示している。一実施形態において、システム102は、少なくとも1つのプロセッサ202と、入力/出力(I/O)インタフェース204と、メモリ206と、を備えることができる。少なくとも1つのプロセッサ202は、1つまたは複数のマイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、中央処理装置、状態機械、論理回路、及び/または演算命令に基づき信号を操作する任意のデバイスで実現することができる。少なくとも1つのプロセッサ202は、数ある機能の中でも特に、メモリ206に記憶されたコンピュータ可読命令を取り出して実行するように構成されている。
I/Oインタフェース204として、例えば、ウェブインタフェース、グラフィカルユーザインタフェースなど、様々なソフトウェア及びハードウェア・インタフェースを含むことができる。I/Oインタフェース204は、システム102がユーザと直接またはクライアント装置104を介して対話することを可能にすることができる。さらに、I/Oインタフェース204は、システム102がウェブサーバ及び外部データサーバ(図示せず)といった他のコンピュータ装置と通信することを可能にすることができる。I/Oインタフェース204によって、例えば、LAN、ケーブルネットワークなどの有線ネットワークと、WLAN、セルラネットワーク、または衛星ネットワークなどの無線ネットワークとを含む様々なタイプのネットワーク及びプロトコルの間での多重通信を円滑にすることができる。I/Oインタフェース204は、多くのデバイスを相互に、または別のサーバに接続するため、1つ以上のポートを備えることができる。
メモリ206は、当技術分野で周知の任意のコンピュータ可読媒体を備えることができ、例えば、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)などの揮発性メモリ、及び/または読み出し専用メモリ(ROM)、消去可能プログラマブルROM、フラッシュメモリ、ハードディスク、光ディスク、磁気テープなどの不揮発性メモリが含まれる。メモリ206には、モジュール208とデータ210とを入れることができる。
モジュール208には、特定のタスクを実行するか、または特定の抽象データ型を実現するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。一実施形態において、モジュール208として、識別モジュール212、解析モジュール214、修正モジュール216、静的解析モジュール218、及びその他モジュール220を含むことができる。その他モジュール220には、システム102のアプリケーション及び機能を補助するプログラムまたはコード化された命令を含むことができる。
データ230は、数ある中でも特に、モジュール208のうちの1つ以上により処理、受信、生成されるデータを記憶するためのリポジトリをなすものである。また、データ230には、システムデータベース232、及びその他データ234を含むこともできる。その他データ234には、その他モジュール220のうちの1つ以上のモジュールの実行の結果として生成されるデータを含むことができる。
一実施形態において、実際のコンピュータプログラムコードを実行することなく、コンピュータプログラムにおいて静的解析が実行される。コンピュータプログラムは、そのコンピュータプログラムのランタイム実行障害の原因となる1つ以上の変数または式を含み得る。識別モジュール212は、ランタイム実行障害のソースを発見するため、コンピュータプログラムにおいて関心点を識別するように構成することができる。関心点は、静的解析ツールによって、または手動コードレビューの際に、またはテストフェーズにおいて、または作成フェーズにおいて、識別することができる。上記以外の他の方法によりコンピュータプログラムにおいて関心点を識別することは、当業者には明らかである。関心点は、ランタイム実行障害の原因となる変数または式を含み得る。一実施形態において、ランタイム実行障害は、コンピュータプログラムの欠陥(複数の場合もある)と同様のものであり得る。さらに、関心点は、式をなすように少なくとも2つの変数を含み得る1つ以上の式を含むことができる。
一実施形態において、解析モジュール214は、その変数または式への前の代入を特定するため、その変数に関連付けられた値に応じて、静的解析を実行するように構成することができる。静的解析は、コンピュータプログラムのランタイム実行障害の各々のソースまたはランタイム実行障害のクラスを識別することができる、ランタイム実行障害のタイプ、ランタイム実行障害のクラスに基づいて、実行することができる。一実施形態において、ランタイム実行障害は、変数の値のゼロ除算、または配列の添字が範囲外であること、または変数の値のオーバフローもしくはアンダフローに起因する場合があり、あるいは他のパラメータに起因する場合がある。ランタイム実行障害は、周知であり得る他のパラメータに起因する場合があり、それは当業者に明らかである。
バックワードパスを実行することによって、その変数への前の代入を特定することができる。バックワードパスによって、ユーザは、コンピュータプログラムの関心点までの変数の値を定義し得る1つ以上の宣言または定義に達することが容易となる。バックワードパスを実行することによって、変数または他の関与する式(複数の場合もある)の前の定義において、ランタイム障害のソースを特定することができる。ランタイム障害は、変数への代入によって定められ得る値が意図した値に等しくないことに起因する場合がある。一実施形態において、意図した値は、コンピュータプログラムの実行に必要な値とすることができる。その変数または式は、それぞれ、意図した値または意図した式に等しくない可能性がある値または式を含むことがある。意図したものではない等しくない値または等しくない式は、ランタイム障害のソースとなり得る。一実施形態において、バックワードパスによって、プログラムのエントリポイント関数から関心点までの複数のパスを示すこと、及び、辿るパスを選択することを、容易とすることができる。
一実施形態において、ランタイム障害の原因となる変数または式への前の代入を特定したら、その変数の値を変更することができる。修正モジュール216は、ユーザがその変数の値を新しい値に変更することを許可するか、または、その式を新しい式に変更することを許可するように構成することができ、これによって、修正されたコンピュータプログラムを生成するように、新しい値または新しい式に基づいてコンピュータプログラムを修正する。システム102によって、ユーザが、ランタイム実行障害の原因となる値または式を、その変数または式の定義において、新しい値または新しい式に変更することを容易とすることができる。
一実施形態において、静的解析モジュール218は、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行するように構成することができる。一実施形態において、システム102は、ユーザが、コンピュータプログラムにおける変更の効果を分析するため、フォワードパス代入(フォワードパス)を実行することを可能にすることができる。フォワードパスによって、ユーザは、コンピュータプログラムにおけるその変数の1つ以上の次の使用または代入に達することが容易となる。一実施形態において、ユーザは、コンピュータプログラムにおいて変数の値または式をそれぞれ新しい値または新しい式に変更した結果であり得る1つ以上の可能性のある解を提示されることがある。
一実施形態において、フォワードパスは、その変数の関心点から次の使用を求めて実行することができる。また、フォワードパスを実行することで、ユーザは、変数の定義から次のその変数への代入であって、コンピュータプログラムにおいてその変数の値を変更するためのものであり得る代入に達することが容易となる。変数の定義から次のその変数への代入が、ランタイム障害の原因となる値を含むことがあり、その場合、ユーザは、やはり、コンピュータプログラムにおいてその変数の値を新しい値に変更することができる。
一実施形態において、システム102は、ユーザが、コンピュータプログラムにおいて新しい値または新しい式によりなされた変更の効果を検証することを可能にすることができる。当業者には明らかである1つ以上のデータフロー解析法を用いて、コンピュータプログラムにおいて静的解析を実行することができる。
システム102によりコンピュータプログラムにおいて実行される静的解析は、コンピュータプログラムのデバッグとは異なる。コンピュータプログラムをデバッグするプロセスでは、コンピュータプログラムのある特定の部分と、コンピュータプログラムへの厳密な入力とが必要となり得る。さらに、そのコンピュータプログラムと、コンピュータプログラムコードへの厳密な入力は、コンピュータプログラムにおいて変更の効果を確認するために実行されることがある。システム102は、静的解析を実行することで、ランタイム実行障害のソースを特定することにより、ランタイム実行障害を解析する。システム102は、ユーザがランタイム実行障害の原因となる値または式を修正することを許可し、コンピュータプログラムにおいて変更の効果を分析する。一実施形態において、ユーザは、コンピュータプログラムのランタイム実行に応じて、コンピュータプログラムの変更の効果を承認または拒否することができる。
一実施形態において、システム102により、関心点に関して、コンピュータプログラムの折り畳み表示を提供することを容易とすることができる。関心点に関する折り畳み表示は、関心点に影響を与えている可能性のあるコンピュータプログラム部分とすることができる。折り畳み表示によって、ユーザは、コンピュータプログラムにおいてランタイム実行障害のソースに達することが容易となる。一実施形態では、実際のコンピュータプログラムコードにおいて変数が複数のパスによる複数の値を持つ場合に、システム102は、その変数が生成された前のその変数への厳密な代入を視覚化することができる。
次に図3を参照すると、本主題の一実施形態により、コンピュータプログラムのランタイム実行障害について静的解析を実施するための方法300を示している。方法300について、コンピュータ実行可能命令という一般的文脈において説明することができる。一般に、コンピュータ実行可能命令として、特定の機能を実行するか、または特定の抽象データ型を実現するルーチン、プログラム、オブジェクト、コンポーネント、データ構造、プロシージャ、モジュール、関数などを含むことができる。また、方法300は、通信ネットワークを介して接続された遠隔処理装置によって種々の機能を実行する分散コンピューティング環境において実施することもできる。分散コンピューティング環境では、コンピュータ実行可能命令は、記憶装置を含むローカルとリモートの両方のコンピュータ記憶媒体に置くことができる。
方法300について記載する順序は、限定と解釈されるものではなく、記載する方法のブロックのうち任意の数のブロックを任意の順序で組み合わせて、本方法300または他の方法を実現することができる。また、個々のブロックは、本明細書に記載の主題の趣旨及び範囲から逸脱することなく、方法300から削除することができる。さらに、本方法は、任意の適切なハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせで実現することができる。しかしながら、以下で記載する実施形態では、説明を簡単にするため、方法300は上記のシステム102で実施されるものと考えることができる。
ブロック302において、コンピュータプログラムを静的に解析することにより、コンピュータプログラムにおいて関心点を識別することができる。関心点は、ランタイム実行障害の原因となる変数または式を含み得る。一実施形態において、関心点は、識別モジュール212により識別することができる。
ブロック304において、その変数に関連付けられた値に応じて、静的解析を実行することにより、その変数または他の関与する式(複数の場合もある)への前の代入を特定することができる。一実施形態において、この解析は、解析モジュール214により実行することができる。
ブロック306では、コンピュータプログラムにおいて、その変数の値またはその式を新しい値または新しい式に変更することができる。さらに、ブロック308において、修正されたコンピュータプログラムを生成するため、新しい値または新しい式に基づいてコンピュータプログラムを修正することができる。一実施形態において、コンピュータプログラムは、修正モジュール216により修正することができる。
ブロック310では、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行することができる。この静的解析は、静的解析モジュール218により実行することができる。
次に図4を参照すると、本主題の例示的な一実施形態により、コンピュータプログラムのランタイム実行障害について静的解析を実施するための、限定するものではない例示的な方法400を示している。ステップ404において、変数‘a’、‘b’、‘c’を初期化する。変数‘b’には値2を、‘c’には0を、それぞれ代入することができる。ステップ406において、変数‘b’の値が1に等しいかどうかチェックすることができる。変数‘b’の値が1に等しい場合は、ステップ408において、変数‘b’の値を変数‘a’に代入する。変数‘b’の値が1に等しくない場合は、ステップ410において、変数‘c’の値を変数‘a’に代入することができる。ステップ412において、変数‘b’の値を変数‘a’の値で除算して得られる値を、変数‘c’に代入する。
関心点は、識別モジュール212によって識別することができる。コンピュータプログラムにおける関心点は、ステップ412における‘a’であると考えられ、この場合、
ステップ412において‘a’の値が‘0’であることで、ランタイム実行障害の原因となる。コンピュータプログラムにおいて静的解析を実行することで、バックワードパスを用いて、関心点において変数の値が‘0’となるソースをチェックする。解析モジュール214により静的解析を実行することによって、その変数または他の関与する式(複数の場合もある)への前の代入を特定することができる。関心点すなわちステップ412から後戻りした前の定義において、変数‘a’がハイライト表示される。‘a’の値は、ステップ410で定義されているので、ステップ410をハイライト表示することができる。また、ステップ410で定義されている式‘a=c’を、次の関心点とすることができる。‘c’の前の定義すなわちステップ404が、ハイライト表示される。この解析によって、ランタイム実行障害のソースは、ステップ404の‘c=0’と特定することができる。ユーザは、ステップ404における‘c’の値を変更して、コンピュータプログラムの実行における変更の効果をチェックすることができる。一実施形態において、システム102は、ユーザが、ランタイム実行障害は値のゼロ除算に起因するとする手助けをすることができる。
システム102は、変数‘a’に関して、コンピュータプログラムの折り畳み表示をステップ412で提供することができる。また、ユーザは、折り畳み表示を選択して、または選択することなく、コンピュータプログラムにおいてバックワードパスを実行することにより、ランタイム実行障害のソースを特定することができる。
さらに、修正モジュール216によって、新しい値または新しい式に基づいてコンピュータプログラムを修正することで、修正されたコンピュータプログラムを生成することができる。上記の例では、ユーザは、ステップ404における変数‘c’の値を1に修正すると考えられる。静的解析モジュール218により、修正されたコンピュータプログラムにおいて静的増分解析を実行することで、コンピュータプログラムにおいて変更を確認することができる。フォワードパスを実行することにより、変数‘c’の次の使用すなわちステップ410をハイライト表示することができる。変数‘a’の値は1に変更され得る。さらに、フォワードパスを実行すると、変数‘a’の次の使用すなわちステップ412をハイライト表示することができる。ステップ412での‘a’の値が1に変更されたことによって、関心点での値は修正されている。ユーザは、修正されたコンピュータプログラムにおける変更の効果に応じて、コンピュータプログラムの変更を承認または拒否することができる。システム102は、変数‘a’に関して、コンピュータプログラムの折り畳み表示をステップ412で提供することができる。
次に図5A、図5B、及び図5Cを参照すると、本主題の別の例示的な一実施形態により、コンピュータプログラムのランタイム実行障害について静的解析を実施するための、限定するものではない例示的な方法500を示している。ステップ504において、変数‘a’、‘b’、‘c’、‘d’、及びresultを初期化することができる。さらに、ステップ506において、関数getValue()によって返される値を、変数‘b’に代入することができる。ステップ508において、関数foo(d)によって返される値を、変数‘d’に代入することができる。さらに、ステップ510において、変数‘d’の値が1に等しいかどうかチェックすることができる。変数‘d’の値が1に等しい場合は、ステップ512において、変数‘d’の値を1でインクリメントすることによる値を変数‘d’に代入することができる。ステップ514において、変数‘b’の値を評価することにより、スイッチ文を起動する。ステップ516において、変数‘b’の値が1に等しいかどうかチェックすることができる。変数‘b’の値が1に等しい場合には、ステップ518及び520を実行する。ステップ518では、1でインクリメントされた変数‘c’の値を、変数‘a’に代入することができる。さらに、ステップ520で、変数‘a’の値を、変数‘d’に代入することができる。
また、ステップ522において、変数‘b’の値が2に等しいかどうかチェックすることができる。変数‘b’の値が2に等しい場合には、ステップ524及び526を実行する。ステップ524では、変数‘d’の値を1でインクリメントすることによる値を、変数‘d’に代入することができる。ステップ526で、変数‘c’の値を、変数‘a’に代入することができる。
ステップ528において、変数‘b’の値が3に等しいかどうかチェックすることができる。変数‘b’の値が3に等しい場合には、ステップ530及び532を実行する。ステップ530では、1だけ減少させた‘d’の値を、変数‘d’に代入することができる。ステップ532では、1だけ減少させた変数‘c’の値を、変数‘a’に代入する。ステップ534において、変数‘b’の値を変数‘a’の値で除算することにより得られる値を、変数resultに代入する。
さらに、図5Cを参照すると、関数int getValue()及びint foo(int a)の実行について開示している。ステップ538において、変数‘a’、‘b’、‘c’を初期化する。ステップ540において、変数‘a’の値が変数‘b’の値に等しいかどうかチェックすることができる。変数‘a’の値が変数‘b’の値に等しい場合は、ステップ542において、変数‘c’の値を1でインクリメントした値を、変数‘c’の値に代入する。変数‘a’の値が変数‘b’の値に等しくない場合は、ステップ544において、変数‘c’の値を1だけ減少させた値を、変数‘c’の値に代入することができる。ステップ546において、変数‘a’の値と変数‘b’の値を加算して得られる値を返すことができる。
さらに、関数int foo(int a)の実行について説明する。ステップ550において、変数‘b’を初期化することができる。ステップ552において、変数‘a’の値から変数‘b’の値を減算して得られる値を返す。
例について説明するため、以下の値、short a=5、b,result=0、short c=1、int d=1、について考えることができる。識別モジュール212によって、関心点を識別することができる。静的解析を実行することにより、関心点はステップ534であると識別することができる。システム102は、ステップ534におけるゼロ除算によるランタイム実行障害を提示することができ、この場合、スイッチ文を用いて制御がステップ528で規定されるときに、変数‘a’の値がゼロとなり得る。一実施形態において、ユーザは、ステップ534に関して、折り畳み表示でコンピュータプログラムを可視化することができる。
ランタイム障害のソースを特定するため、バックワードパスを実行することができる。解析モジュール214によって静的解析を実行することにより、その変数及び他の関与する式(複数の場合もある)への前の代入を特定することができる。システム102は、変数の前の定義をハイライト表示することにより、可能性のある解についての情報をユーザに提示することができ、例えば、ステップ518における変数は値2となる‘a’であり、ステップ526における変数は値1となる式‘a=c’を含み、ステップ532における変数は値0となる式‘a=c−1’を含み、そして、ステップ534における変数‘a’は、値5、2、1、0を含む。ステップ532で代入される値は‘0’であり、ランタイム実行障害のソースはステップ532であると特定することができる。
システム102は、ステップ552に示すように、可能性のある解についての情報をユーザに提示することができる。例えば、システム102は、変数‘c’の値を2に変更するための情報をユーザに提示することができる。さらに、修正されたコンピュータプログラムにおける変更の効果を検証ため、フォワードパスを実行することができ、修正されたコンピュータプログラムにおいて静的増分解析が実行される。変更の結果、ステップ504における変数‘a’の値は5であり、ステップ518における変数‘a’の値は3であり、ステップ526における変数‘a’の値は2であり、ステップ532における変数‘a’の値は1であり、そして、ステップ534における変数‘a’の値は、5、3、2、1、となり得る。システム102は、ステップ532における変数の値が修正されていることを提示する。修正モジュール216により、新しい値または新しい式に基づいてコンピュータプログラムを修正することで、修正されたコンピュータプログラムを生成することができる。ユーザは、ステップ532におけるコンピュータプログラムの変更を承認または拒否することができる。
さらに、システム102は、代替解として、変数の値を変更するための情報をユーザに提示することができる。ユーザが、修正されたコンピュータプログラムの効果、すなわち変数‘c’の値を2とすることを拒否する場合は、元のコンピュータプログラムをユーザに提示することができる。システム102は、ステップ532における式を‘a=c+1’に変更するための情報をユーザに提示することができる。静的解析モジュール218により、コンピュータプログラムにおいて変更を確認するため、修正されたコンピュータプログラムにおいて静的増分解析を実行することができる。ステップ532において修正された式の効果は、システム102によって検証することができる。変更の結果、ステップ504における変数‘a’の値は5であり、ステップ518における変数‘a’の値は2であり、ステップ526における変数‘a’の値は1であり、ステップ532における変数‘a’の値は2であり、そして、ステップ534における変数の値は、5、2、1、となり得る。システム102は、ランタイム実行障害が解決されていることを提示することができる。ユーザは、ステップ532におけるコンピュータプログラムの変更を承認または拒否することができる。
コンピュータプログラムのランタイム実行障害について静的解析を実施するための方法及びシステムの実施形態について、構造的特徴及び/または方法に特化した表現で説明したが、当然のことながら、添付の請求項は、記載した特定の特徴または方法に必ずしも限定されない。むしろ、具体的な特徴及び方法は、コンピュータプログラムのランタイム実行障害について静的解析を実施するための実施形態の例として開示している。

Claims (7)

  1. コンピュータプログラムのランタイム実行障害について静的解析を実施する方法であって、
    前記コンピュータプログラムを静的に解析することにより、前記コンピュータプログラムにおいて、前記ランタイム実行障害の原因となる変数または式を含む関心点を識別することと、
    その変数に関連付けられた値に応じて、静的解析を実行することにより、その変数またはその式への前の代入を特定することと、
    その変数の値を新しい値に変更することを許可すること、または、その式を新しい式に変更することを許可することと、
    修正されたコンピュータプログラムを生成するため、その新しい値またはその新しい式に基づいて前記コンピュータプログラムを修正することと、
    前記コンピュータプログラムにおいて変更を確認するため、前記修正されたコンピュータプログラムにおいて静的増分解析を実行することとを有し、
    前記識別すること、前記特定すること、前記許可すること、前記コンピュータプログラムを修正すること、前記静的増分解析を実行することは、メモリに記憶されたプログラム命令を用いてプロセッサにより実行される
    ことを特徴とする方法。
  2. 前記値は、意図した値と等しくなく、このとき、その意図した値は、前記コンピュータプログラムを実行するのに必要な値である
    請求項1に記載の方法。
  3. 前記静的解析は、1つまたは複数のデータフロー解析法を用いて実行される
    請求項1に記載の方法。
  4. コンピュータプログラムのランタイム実行障害を解析する静的解析を実施するシステムであって、
    プロセッサと、
    前記プロセッサに接続されたメモリとを備え、前記プロセッサは、前記メモリに記憶された複数のモジュールを実行することが可能であり、
    その複数のモジュールは、
    前記コンピュータプログラムにおいて関心点を識別する識別モジュールあって、前記関心点は、前記ランタイム実行障害の原因となる変数または式を含む識別モジュールと、
    その変数またはその式への前の代入を特定するため、その変数に関連付けられた値に応じて、静的解析を実行するように構成された解析モジュールと、
    その変数の値を新しい値に変更することを許可するか、または、その式を新しい式に変更することを許可するように構成された修正モジュールであって、これにより、修正されたコンピュータプログラムを生成するように、その新しい値またはその新しい式に基づいて前記コンピュータプログラムを修正する、修正モジュールと、
    前記コンピュータプログラムにおいて変更を確認するため、前記修正されたコンピュータプログラムにおいて静的増分解析を実行するように構成された静的解析モジュールとを備える
    ことを特徴とするシステム。
  5. 前記値は、意図した値と等しくなく、このとき、その意図した値は、前記コンピュータプログラムを実行するのに必要な値である
    請求項4に記載のシステム。
  6. 前記静的解析は、1つまたは複数のデータフロー解析法を用いて実行される
    請求項4に記載のシステム。
  7. コンピュータプログラムのランタイム実行障害を解析する静的解析を実施するコンピュータプログラム・プロダクトであって、
    前記コンピュータプログラムを静的に解析することにより、前記コンピュータプログラムにおいて関心点を識別するためのプログラムコードであって、前記ランタイム実行障害の原因となる変数または式を含む関心点を識別するためのプログラムコードと、
    その変数に関連付けられた値に応じて、その変数またはその式への前の代入を特定するためのプログラムコードと、
    その変数の値を新しい値に変更することを許可するか、または、その式を新しい式に変更することを許可するためのプログラムコードと、
    修正されたコンピュータプログラムを生成するため、その新しい値またはその新しい式に基づいて前記コンピュータプログラムを修正するためのプログラムコードと、
    前記コンピュータプログラムにおいて変更を確認するため、前記修正されたコンピュータプログラムにおいて静的増分解析を実行するためのプログラムコードとを含む
    ことを特徴とするコンピュータプログラム・プロダクト。
JP2013200157A 2012-09-27 2013-09-26 ランタイム実行障害のソースを識別するシステム及び方法 Active JP5706940B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
IN2850MU2012 2012-09-27
IN2850/MUM/2012 2012-09-27

Publications (2)

Publication Number Publication Date
JP2014089700A true JP2014089700A (ja) 2014-05-15
JP5706940B2 JP5706940B2 (ja) 2015-04-22

Family

ID=50340165

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013200157A Active JP5706940B2 (ja) 2012-09-27 2013-09-26 ランタイム実行障害のソースを識別するシステム及び方法

Country Status (2)

Country Link
US (1) US20140089738A1 (ja)
JP (1) JP5706940B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017045446A (ja) * 2015-08-25 2017-03-02 富士通株式会社 ソフトウェアプログラムを修復する方法、記憶媒体及びシステム
JP2018026135A (ja) * 2016-08-11 2018-02-15 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 静的解析警告の効率的な運用のための原因ポイント解析のためのシステム及び方法
JP2020004363A (ja) * 2018-06-25 2020-01-09 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 複数の静的解析アラームを再配置するための方法およびシステム
JP2020038482A (ja) * 2018-09-04 2020-03-12 富士通株式会社 プログラム検証プログラム、プログラム検証方法およびプログラム検証装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005202494A (ja) * 2004-01-13 2005-07-28 Mitsubishi Electric Corp 静的解析結果分析システムおよび静的解析結果分析装置
JP2012141741A (ja) * 2010-12-28 2012-07-26 Fujitsu Ltd 解析支援プログラム,解析支援装置および解析支援方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7661097B2 (en) * 2005-04-05 2010-02-09 Cisco Technology, Inc. Method and system for analyzing source code
US20080244536A1 (en) * 2007-03-27 2008-10-02 Eitan Farchi Evaluating static analysis results using code instrumentation
US9342434B2 (en) * 2007-10-30 2016-05-17 International Business Machines Corporation Revealing new errors in edited code
US9274923B2 (en) * 2008-03-25 2016-03-01 Wind River Systems, Inc. System and method for stack crawl testing and caching
US8539447B2 (en) * 2008-06-04 2013-09-17 Microsoft Corporation Real-time validation of interactive applications
US8966453B1 (en) * 2010-11-24 2015-02-24 ECOLE POLYTECHNIQUE FéDéRALE DE LAUSANNE Automatic generation of program execution that reaches a given failure point
US8645761B2 (en) * 2011-01-13 2014-02-04 International Business Machines Corporation Precise fault localization

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005202494A (ja) * 2004-01-13 2005-07-28 Mitsubishi Electric Corp 静的解析結果分析システムおよび静的解析結果分析装置
JP2012141741A (ja) * 2010-12-28 2012-07-26 Fujitsu Ltd 解析支援プログラム,解析支援装置および解析支援方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017045446A (ja) * 2015-08-25 2017-03-02 富士通株式会社 ソフトウェアプログラムを修復する方法、記憶媒体及びシステム
JP2018026135A (ja) * 2016-08-11 2018-02-15 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 静的解析警告の効率的な運用のための原因ポイント解析のためのシステム及び方法
JP2020004363A (ja) * 2018-06-25 2020-01-09 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 複数の静的解析アラームを再配置するための方法およびシステム
JP2020038482A (ja) * 2018-09-04 2020-03-12 富士通株式会社 プログラム検証プログラム、プログラム検証方法およびプログラム検証装置
JP7111967B2 (ja) 2018-09-04 2022-08-03 富士通株式会社 プログラム検証プログラム、プログラム検証方法およびプログラム検証装置

Also Published As

Publication number Publication date
JP5706940B2 (ja) 2015-04-22
US20140089738A1 (en) 2014-03-27

Similar Documents

Publication Publication Date Title
US9720798B2 (en) Simulating black box test results using information from white box testing
US20200218533A1 (en) Code analytics and publication platform
US20080126867A1 (en) Method and system for selective regression testing
GB2536084A (en) A system and method for accessibility assessment of a web application
US20170075795A1 (en) Identifying test gaps using code execution paths
US9195570B2 (en) Progressive black-box testing of computer software applications
US11888885B1 (en) Automated security analysis of software libraries
JP5706940B2 (ja) ランタイム実行障害のソースを識別するシステム及び方法
US20170132121A1 (en) Incremental code coverage analysis using automatic breakpoints
US11194703B2 (en) System testing infrastructure for analyzing soft failures in active environment
JP2014170530A (ja) 静的解析中に発生した警告をグループ化するシステムおよび方法
Rana et al. A review of tools and techniques used in software testing
US10725895B2 (en) Measuring and improving test coverage
Heelan et al. Augmenting vulnerability analysis of binary code
US11132286B1 (en) Dynamic reordering of test case execution
US11609842B2 (en) System testing infrastructure for analyzing and preventing soft failure in active environment
US20190102285A1 (en) Testing pre and post system call exits
US20160041897A1 (en) Generation of automated unit tests for a controller layer system and method
JP5778808B2 (ja) エントリーポイントを参照したソフトウェアアプリケーション解析システムおよび方法
Cai et al. Analysis for cloud testing of web application
Mariano et al. Comparing graph-based algorithms to generate test cases from finite state machines
US10467131B1 (en) Method and system for performance analysis by test automation frameworks
US11593256B2 (en) System testing infrastructure for detecting soft failure in active environment
Ahmed et al. An Adaptation Model for Android Application Testing with Refactoring
CN115176233A (zh) 以确定性顺序执行测试

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140930

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141028

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150115

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150227

R150 Certificate of patent or registration of utility model

Ref document number: 5706940

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250