JP4914609B2 - ソースコード問題予測プログラム - Google Patents

ソースコード問題予測プログラム Download PDF

Info

Publication number
JP4914609B2
JP4914609B2 JP2005380256A JP2005380256A JP4914609B2 JP 4914609 B2 JP4914609 B2 JP 4914609B2 JP 2005380256 A JP2005380256 A JP 2005380256A JP 2005380256 A JP2005380256 A JP 2005380256A JP 4914609 B2 JP4914609 B2 JP 4914609B2
Authority
JP
Japan
Prior art keywords
function
source code
information
execution frequency
call
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
JP2005380256A
Other languages
English (en)
Other versions
JP2007179488A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2005380256A priority Critical patent/JP4914609B2/ja
Publication of JP2007179488A publication Critical patent/JP2007179488A/ja
Application granted granted Critical
Publication of JP4914609B2 publication Critical patent/JP4914609B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Description

本発明は、ソースコード問題予測技術に関し、たとえば、ソフトウェアレビュー工程におけるソースコード品質の検証、管理、評価作業等に適用して有効な技術に関する。
近年、様々なソフトウェア開発において、ソフトウェアの大規模化・多様化に伴い、低コストで高品質を確保したいという要求が強まっている。
低コストでソフトウェアを高品質化する技術としては、ソフトウェア静的解析がある。ソフトウェア静的解析は、ソースコード(以下ソース)を解析し様々な問題検出を行うものである。
プロファイラ、デバッガ、その他、一般のテスト技術では、プログラム実行時の情報(動作ログ等)を必要とする。
これらのテスト技術とは異なり、ソフトウェア静的解析では、ソースを対象とするため、開発工程のより上流の設計・コーディング工程での問題検出作業に利用できる。すなわち、シミュレーションや実機テスト前に問題の発見が可能である。このように早期にプログラムの問題を発見できる分、修正コストを削減でき、ソフトウェアの低コスト化、高性能化が見込める。
しかしながら、ソフトウェア静的解析では実行時情報を使わない分、実行時に起きる問題の予測をどう高精度で実現するかが技術的課題となるが、従来の製品はいずれも低い予測精度に留まっている。
すなわち、従来製品はいずれも、問題の可能性がある対象(関数呼出し等)を定義しておき、それらをソース中から一律に検索して出力する。このため、実際には問題にならないものも多く検出してしまい低精度となる。
この結果、問題の軽重に関係なく多数の関数をレビューする必要があり、ソフトウェア開発のソースレビユー工程における工数が増大する。
さらに、肝心の問題部分の出力結果が、大量の問題にならない部分の出力情報に埋もれてしまい、視認性や操作性が低下するため、支援プログラム自体の利用率も低くなる。
なお、特許文献1には、オブジェクト指向プログラムの実行性能を劣化させる可能性のあるクラス名、処理名、処理パターンを実行環境毎に性能劣化情報として予め蓄積し、この性能劣化情報に基づいてソースコードを静的に解析し、ソースコード中で実行性能を劣化させる可能性のある箇所を表示する技術が開示されている。
しかし、この特許文献1の場合には、ソースに含まれる条件分岐構造等の制御構造をきめ細かく分析するものではないため、問題部分の検出精度が比較的低くなる懸念がある。
特開2002−73369号公報
本発明の目的は、ソフトウェア静的解析における問題箇所の検出精度を向上させることが可能なソースコード問題予測技術を提供することにある。
本発明の他の目的は、ソフトウェア開発の設計工程およびレビュー工程における工数の削減を実現することが可能なソースコード問題予測技術を提供することにある。
本発明の他の目的は、ソフトウェア開発の設計工程およびレビュー工程において、ユーザの評価や過去の経験に基づいて問題箇所の検出方法の最適化を行うことが可能なソースコード問題予測技術を提供することにある。
本発明の他の目的は、ソフトウェア開発の設計工程およびレビュー工程を支援するソースコード問題予測プログラムの視認性や操作性を向上させることにある。
本発明の第1の観点は、プログラムのソースコードに含まれる関数の呼出し関係、繰返し構造、条件分岐構造の少なくとも一つに関する制御構造情報を抽出する処理と、
関数の呼出し列中に含まれる前記繰返し構造と前記条件分岐構造の各々の数を計測し、予め定義された重み定義情報に基づき、各々の前記数の計測値に重みを乗算することで予測される実行頻度を計算する処理と、
前記実行頻度から前記プログラムの実行時に高頻度で繰返し実行される特定領域を予測する処理と、
前記特定領域について、予め与えられた特定の関数の呼出しが存在するか調べ、存在した前記特定の関数を予測された当該特定領域の実行頻度に基づいてランク付けして表示する処理と、
をコンピュータに実行させるソースコード問題予測プログラムを提供する。
本発明では、ソース中で、実行時にボトルネックになりやすい部分(高頻度で実行される部分)を推定し、その部分に絞り込んだ検索を行うことで、問題部分の検出精度を向上させる。
たとえば高頻度で実行される部分の予測は、以下のようにして行う。関数間の呼出し関係と、各関数内のループや条件分岐等の制御構文(if文等)の関係をソースコードから抽出し、それらに対して、制御構文の性質を表す重みを付ける。この重みに基づき、関係する重みの合計が高い関数を、実行頻度が高い関数と予測する。
これにより、問題検出の観点から重要な関数が選択的に検出結果として出力され、問題箇所の指摘精度が向上する。この場合、実行頻度の高い順に順位付けして出力してもよい。重要でない関数は出力されないので問題箇所の検出結果の視認性も向上する。また、たとえば外部から経験的に知られた各関数の重要度に応じて重み付けを行うことで、ユーザの評価や経験に則して問題箇所の検出の最適化を実現できる。この結果、高精度の問題指摘を行うことが可能になり、操作性も向上する。
本発明によれば、ソフトウェア静的解析における問題箇所の検出精度を向上させることが可能となる。
また、ソフトウェア開発の設計工程およびレビュー工程における工数の削減を実現することが可能となる。
また、ソフトウェア開発の設計工程およびレビュー工程において、ユーザの評価や過去の経験に基づいて問題箇所の検出方法の最適化を行うことができる。
また、ソフトウェア開発の設計工程およびレビュー工程を支援するソースコード問題予測プログラムの視認性や操作性を向上させることができる。
以下、図面を参照しながら、本発明の実施の形態について詳細に説明する。
図1Aは、本発明の一実施の形態であるソースコード問題予測プログラムおよび方法の作用の一例を示す概念図である。
図1Bは、本発明の一実施の形態であるソースコード問題予測プログラムおよび方法を実施するソースコード問題予測装置の構成の一例を示す概念図である。
図2は、本発明の一実施の形態であるソースコード問題予測プログラムおよび方法の作用の一例を示すフローチャートである。
図3は、本実施の形態のソースコード問題予測プログラムで処理されるソースコードの一例を示す説明図である。
まず、図1Bを参照して、本実施の形態のソースコード問題予測装置を構成する情報処理装置10(コンピュータ)の一例について説明する。
本実施の形態の情報処理装置10は、中央処理装置11、主記憶12、外部記憶装置13、ディスプレイ14、情報入力装置15、ネットワークインタフェース16、を含んでいる。
中央処理装置11は、たとえばマイクロプロセッサ等で構成され、主記憶12に実装されたプログラムを実行することで所望の情報処理を行う。
主記憶12は、たとえば半導体メモリで構成され、中央処理装置11が実行するソフトウェアやデータが格納される。
本実施の形態の場合、主記憶12には、オペレーティングシステム18、ソースコード問題予測プログラム20、関数呼出し列情報31、ループ情報表32、条件分岐情報表33、例外処理情報表34、関数呼出し関係情報35、検出結果表36、実行頻度情報表37が格納される。
中央処理装置11はオペレーティングシステム18を実行することで、情報処理装置10の全体の動作を制御する。
ソースコード問題予測プログラム20は、オペレーティングシステム18の配下で稼働するアプリケーションプログラムである。
関数呼出し列情報31〜実行頻度情報表37は、ソースコード問題予測プログラム20が実行中に出力する情報である。
外部記憶装置13は、不揮発性の記憶媒体で構成される記憶装置からなる。
本実施の形態の場合、この外部記憶装置13には、ソースコード40、検出関数一覧表41、重み定義表42、ランク定義表43、関数重み定義表44、等の情報が保持される。
なお、特に図示しないが、この外部記憶装置13には、オペレーティングシステム18、ソースコード問題予測プログラム20も持久的に保持され、必要に応じて主記憶12にロードされて実行される。
ディスプレイ14には、ソースコード問題予測プログラム20から出力される検出結果レポート50が表示される。
情報入力装置15は、たとえば、キーボード、マウス等のユーザ入力機器からなる。本実施の形態の場合には、ソースコード問題予測プログラム20を制御するための各種情報が必要に応じてユーザから入力される。
ネットワークインタフェース16は、情報処理装置10と、外部の情報ネットワーク17との間における情報の授受を制御する。
たとえば、外部記憶装置13に格納される情報は、必要に応じて、ネットワークインタフェース16を介して情報ネットワーク17から取得するようにしてもよい。
また、ディスプレイ14に出力される検出結果レポート50を情報ネットワーク17に出力することも可能である。
一方、図1Aに例示されるように、本実施の形態のソースコード問題予測プログラム20は、字句・構文解析部21、検出部22、関数呼出し列抽出部23、ループ情報抽出部24、条件分岐抽出部25、例外処理情報抽出部26、関数呼出し関係情報生成部27、実行頻度予測部28、レポート出力部29、の各機能ブロックを含んでいる。
字句・構文解析部21は、ソースコード40を解析して後述のソースコード解析情報30を出力する。
検出部22は、ソースコード解析情報30と、検出関数一覧表41から検出結果表36を出力する。
関数呼出し列抽出部23は、ソースコード解析情報30を解析して関数呼出し列情報31を出力する。
ループ情報抽出部24は、ソースコード解析情報30を解析してループ情報表32を出力する。
条件分岐抽出部25は、ソースコード解析情報30を解析して条件分岐情報表33を出力する。
例外処理情報抽出部26は、ソースコード解析情報30を解析して例外処理情報表34を出力する。
関数呼出し関係情報生成部27は、関数呼出し列情報31、ループ情報表32、条件分岐情報表33、例外処理情報表34と、検出結果表36を入力して関数呼出し関係情報35を出力する。
実行頻度予測部28は、重み定義表42(および/または関数重み定義表44)と、関数呼出し関係情報35を入力して、実行頻度情報表37を出力する。
レポート出力部29は、検出結果表36、実行頻度情報表37と、ランク定義表43を入力して検出結果レポート50を出力する。
本実施の形態のソースコード問題予測プログラム20は、図2に例示されるフローチャートのように動作する。
まず、字句・構文解析部21によってソースコード40を解析して図4に例示されるソースコード解析情報30を出力する(ステップ100)。
次に、検出部22によって、ソースコード解析情報30から、検出関数一覧表41に記述された関数の呼出しを検出し、検出結果表36に記録する(ステップ200)。
次に、関数呼出し列抽出部23によって、ソースコード解析情報30から、関数呼出し列情報31を抽出する(ステップ300)。
次に、ループ情報抽出部24(条件分岐抽出部25)(例外処理情報抽出部26)によって、ソースコード解析情報30からループ情報表32(条件分岐情報表33)(例外処理情報表34)を出力する(ステップ400)。
次に、関数呼出し関係情報生成部27によって、検出結果表36、関数呼出し列情報31、ループ情報表32(条件分岐情報表33)(例外処理情報表34)から、関数呼出し関係情報35を生成する(ステップ500)。
次に、実行頻度予測部28によって、重み定義表42(関数重み定義表44)により、関数呼出し関係情報35から実行頻度情報表37を生成する(ステップ600)。
最後に、実行頻度情報表37、検出結果表36、ランク定義表43から、検出結果レポート50を出力する(ステップ700)。
以下、上述のステップ100〜ステップ700の各々について詳細に説明する。
まず、上述のステップ100では、字句・構文解析部21によって、ソースコード40を解析する。字句・構文解析自体は、ソースコード40に記述されたプログラム言語のパーサ等の解析技術を用いることができる。
解析の結果、図4に例示されるソースコード解析情報30が作られる。このソースコード解析情報30は、ROOTノードを起点として、各々が、プログラムの関数名、変数名、宣言、等記述要素を保持する複数のノード30aが木構造をなすように記述されている。
[ステップ200の詳細]
図5は、本実施の形態における検出関数一覧表41の構成例を示す概念図である。検出関数一覧表41には、クラス名41a、メソッド名41b、引数型41cが対応付けて格納される。この検出関数一覧表41には、後述のような非推奨関数が設定される。
次に、検出関数一覧表41と、上述のソースコード解析情報30を入力とし、検出関数一覧表41に記述された関数の呼出しを検索する。図6は、本処理のフローチャートである。
ここで、図3のJavaソースコード(擬似コード)では、複数の関数が定義されており、それらの関数中では別の関数を呼び出している。f100、f101等の関数は、その中でLinkedListクラスのget関数、Vectorクラスのinsert関数を呼んでいる。それらは一般に、高頻度で呼ぶと性能劣化を引き起こす関数として知られている。検出関数一覧表41は、そのような問題となる非推奨の関数を事前にユーザが定義したものである。
図6に例示されるように、本処理では、空の検出結果表36を生成し(ステップ201)、検出関数一覧表41を読み込む(ステップ202)。
そして、検出関数一覧表41の中で未処理の検出関数が存在する場合(ステップ203)、その未処理の関数を処理対象として選択し(ステップ204)、ソースコード解析情報30の中から対象関数の呼出しを検索し(ステップ205)、対象関数の呼出しが存在するか判別する(ステップ206)。
対象関数の呼出しが存在する場合には、検出された呼出しに連番でID(呼出しID36a)を割り当て(ステップ208)、検出結果表36に、ID、関数名、呼出しの存在箇所(行番号)を登録する(ステップ209)。
そして、当該関数を処理済みとして(ステップ207)、ステップ203に戻って、検出関数一覧表41に登録された全ての関数について反復する。
この図6に示すフローチャートの処理により、図7に例示される検出結果表36の情報が得られる。
検出結果表36には、呼出しID36a、存在箇所36b、検出関数36cが対応付けられて格納されている。
呼出しID36aは検出した関数に順に割当てた識別子である。検出関数36cで特定される各関数には、その呼出しの存在位置(ファイル中の行番号)も抽出し、存在箇所36bとして検出結果表36に記憶している。
[ステップ300の詳細]
次に、ステップ300では、ソースコード解析情報30から、関数呼出し列情報31を抽出する。図8は、本処理のフローチャートである。
未処理の関数が存在するか判別し(ステップ301)、存在する場合は、ソースコード解析情報30から未処理関数(@1)を取得し(ステップ302)、当該関数を示すノード31aを作成する(ステップ303)。
当該関数内にさらに関数呼出しが存在するか判別し(ステップ304)、存在する場合には、さらに、呼び出す関数のノード31aが作成済みか判別する(ステップ305)。
作成済みの場合には、呼び出す関数(@2)を取得し(ステップ306)、上述の関数(@1)から関数(@2)へのリンク31bを作成して(ステップ307)、ステップ301に戻る。
上述のステップ305で、作成済みでなかった場合には、呼び出す関数(@2)のノード31aを作成し、上述の関数(@1)から関数(@2)へのリンク31bを作成して(ステップ307)、ステップ301に戻る。
上述のステップ304で関数呼出しが存在しなかった場合にはステップ301に戻る。
これにより図9に例示される関数呼出し列情報31が得られる。この関数呼出し列情報31は、ソースコード40に含まれる関数の呼出し関係を、検出結果表36の各検出関数に注目して生成したものである。例えば、呼出しID36aが#3の呼出しは、それに至る関数の呼出し関係のリンク31bをたどっていくと、図9のような形で、「f0→f1→f102→#3」と「f2→f102→#3」の二本の呼出し列となる。
[ステップ400の詳細]
ステップ400により、ソースコード解析情報30からは、ループ情報表32や条件分岐情報表33も抽出する。図10は、ステップ400の詳細を示す本処理のフローチャートである。
まず、空のループ情報表32を生成し(ステップ401)、未処理の関数が存在するか判別する(ステップ402)。
存在する場合には、ソースコード解析情報30から未処理の関数(@1)を取得し(ステップ403)、当該関数内にさらに関数呼出しが存在するか判別する(ステップ404)。
存在する場合には、さらに、呼び出す関数(@2)を取得し(ステップ405)、関数(@1)の中で関数(@2)の呼出しを含むループ構造(たとえば、for文,while文)が存在するか判別する(ステップ406)。
存在する場合には、ループ構造の情報(ループ構文種別、数)を取得し(ステップ407)、さらに、二つの関数(@1)、関数(@1)をキーとして、抽出したループ構造の情報をループ情報表32に登録して(ステップ408)、ステップ402に戻る。
上述のステップ406、ステップ404で判定条件が不成立の場合はステップ402に戻る。
この処理により、得られるループ情報表32および条件分岐情報表33は、図11および図12のようになる。
すなわち、図11のループ情報表32は、関数ペア32aと種別32bとを対応つけて保持している。たとえば、最初のエントリでは、関数f0の定義中にwhile文があり、その中で関数f1を呼び出していることを表現している。
図12の条件分岐情報表33は、関数ペア33aと種別33bを対応付けて格納している。意味はループ情報表32の場合と同様である。
このようにループ情報表32、条件分岐情報表33は、関数の呼出しにおいて、関数間に存在するループ(for文やwhile文)や、条件分岐(if文やswitch文)の有無・数を表したものである。
[ステップ500の詳細]
上述のステップ500の処理では、関数呼出し列情報31に対して、ループ情報や条件分岐情報を追加し、図14に例示される関数呼出し関係情報35を生成する。
図13は、本処理の一例を示すフローチャートである。ここで生成される関数呼出し関係情報35は、関数の呼出し列に加え、呼出し列内に含まれるループや条件分岐を表現したものになる。関数呼出し関係情報35は、ノード35a、リンク35b、ノード35cを含む。
まず、ループ情報表32に未取得のキー(関数ペア)が存在するか判別し(ステップ501)、存在する場合は、ループ情報表32から未取得のキーを取得し(ステップ502)、ループ情報表32からキーの該当するループ情報を取得する(ステップ503)。
そして、関数呼出し関係情報35において、キーが表す二つの関数のノード35aの間にループ情報を表すノード35cを挿入して(ステップ505)、ステップ501に戻る。
ステップ501で未取得の関数ペアがないと判定された場合には、条件分岐情報表33に未取得のキー(関数ペア)が存在するか判定する(ステップ506)。
そして、存在する場合は、条件分岐情報表33から未取得のキーを取得し(ステップ507)、条件分岐情報表33からキーの該当する条件分岐情報を取得する(ステップ508)。
そして、関数呼出し関係情報35において、キーが表す二つの関数のノード35aの間に条件分岐情報を表すノード35cを挿入して(ステップ509)、ステップ506に戻る。
ステップ506で未取得のキーが存在しなくなったら終了する。
[ステップ600の詳細]
上述のステップ600では、上記の関数呼出し関係情報35と、図15に例示される重み定義(重み定義表42)から、図16に例示されるフローチャートの処理により、図18に例示される実行頻度情報表37を生成する。各呼出し列において、含まれるループや条件分岐に対し、重み定義表42で指定された重みを付加する。図17は、この処理における関数呼出し関係情報35の状態を例示した概念図である。
重みが割当てられた関数呼出し関係情報35から、それぞれの呼出し列について、呼出し列での重み合計を求める。この結果を実行頻度情報表37として生成する。
図15に例示されるように、重み定義表42は、種別42a、構文42b、重み42cを対応付けて保持する。
図18に例示されるように、実行頻度情報表37は、呼出し列37a、重み合計37bを対応つけて保持する。
図19に例示されるように、ランク定義表43は、ランク43a、重み合計43bを対応付けて保持する。
図16の実行頻度予測では、まず、関数呼出し関係情報35と重み定義表42を読み込み(ステップ601)、未処理の末端呼出しが存在するか判定する(ステップ602)。ここで、「末端呼出し」とは、図14の関数呼出し関係情報35において#nで表した呼出しを意味し、たとえば、#1、#2等のノード35aである。
そして、未処理の末端呼出しが存在する場合には、未処理の「末端呼出し」を処理対象とし(ステップ603)、重み合計(@2)を0に初期化する(ステップ604)。
そして、未処理の「末端呼出しに至る呼出し列」が存在するか判別する(ステップ605)。ここで、「末端呼出しに至る呼出し列」とは、図14の関数呼出し関係情報35で、#nで示した呼出しが最後に来る呼出し列を意味する。たとえば、図14の例では、#3の場合は、f0→while→f1→for→f102→#3、とf2→for→f102→#3、の二つである。
ステップ605で未処理の「末端呼出しに至る呼出し列」が存在する場合には、その未処理の「末端呼出しに至る呼出し列」を処理対象として選択する(ステップ606)。
そして、呼出し列を先頭からたどり、重み定義表42の重み定義に従って、各ノード35cに重みを付加する(ステップ607)。
次に、各ノードの重みを合計し、その呼出し列(枝)全体での値(@1)を得る(ステップ608)。
各呼出し列の値(@1)を、重み合計(@2)に加算した後(ステップ609)、ステップ605に戻る。
ステップ605で、未処理の「末端呼出しに至る呼出し列」がないと判定された場合には、処理対象の末端呼出しと、その重み合計(@2)を、実行頻度情報表37に登録して(ステップ610)、ステップ602に戻る。
ステップ602で、未処理の末端呼出しがなくなったら終了する。
[ステップ700の詳細]
最後に、上述のステップ700では、図19に例示されるランク定義表43のランク定義を用いて、実行頻度情報表37の実行頻度情報と、検出結果表36の関数検出結果(図7)から、図21に例示される検出結果レポート50を生成する。
図19に例示されるように、ランク定義表43は、ランク43aと重み合計43bを対応つけて保持している。本実施の形態の場合、ランク43aは、重み合計43bの大小に応じて、A〜Eの5段階に分類されている。
図20に、本処理フローを示す。ここでは、実行頻度情報表37の値と、ランク定義表43のランク定義を照合し、該当するランク(A〜E)を得る。そのランクと関数検出結果を統合して、検出結果レポート50として出力する。
検出結果表36、ランク定義表43、実行頻度情報表37を読み込み(ステップ701)、検出結果表36の各行に対して、以下のステップ703、ステップ704を反復する(ステップ702、ステップ705)。
すなわち、検出結果表36の関数の呼出しID36aを、実行頻度情報表37で検索し、実行頻度(重み合計37b)を取得する(ステップ703)。
求めた実行頻度について、ランク定義表43の重み合計43bを検索し、該当するランクを取得する(ステップ704)。
その後、取得した各情報をランクでソートして検出結果レポート50を生成する(ステップ706)。
生成された検出結果レポート50は、たとえばディスプレイ14に表示される。
図21に例示されるように、検出結果レポート50には、検出ID50a、問題ランク50b、存在箇所50c、検出関数50d、が対応つけて表示されている。
このように、本実施の形態の場合には、検出結果レポート50には、検出関数一覧表41で指定した関数の中から、実行頻度の高い(問題のありそうな)ものが自動的に選択され、ランク付けされて表示されるため、検出結果レポート50の視認性は極めて高い。
実行頻度の評価方法の変形例について、以下に説明する。
再帰呼出し(関数が自身を内部で呼出す形)は、プログラムの実行が繰返し起きる点で、for文やwhile文と同様に、ループの一種としてみなすことができる。
図22(a)に例示されるようにソースコード40中に再帰呼出しがあった場合、一例として、関数呼出し列情報31は、図22(b)のようになる。ここで、関数呼出し関係情報35は、図23のように、再帰呼出しを示すノード35cを挿入して作られる。以降の実行頻度情報表37を生成する処理は、前記と同様になる。
図24(a)〜(c)はこの再帰呼出しの場合における実行頻度情報表37の生成処理の例を示している。
図24(a)のように、関数f10が末端呼出し#6に連なる場合、関数呼出し関係情報35では、再帰呼出しを示す“RC”のノード35cが設定される。
この場合、図24(b)に示すように、重み定義表42の構文42bには、ループの構文として、再帰呼出しを示す“RC”が設定される。
この結果、図24(c)に例示されるように、呼出し列37aが#6に連なる実行頻度は、“RC”の重みを反映した値となる。
Java(登録商標)などのオブジェクト指向型プログラミング言語では、継承という仕組みがある。継承を使ったソースコード40−1の例を図25に示す。継承はあるクラス(スーパークラス)を再利用して別のクラス(サブクラス)を作るものである。
一般にスーパークラスが1つ、サブクラスが複数となることが多い。継承の特徴として、ソースコード40−1の例にあるように、同名の関数が各クラスで定義される。これにより、コード例ではf20という関数を呼んでいるが、これはスーパークラス及び3つのサブクラスのf20のいずれかを呼ぶことになる(どれが実際に呼ばれるかはプログラム実行時に決定される)。
すなわち、SuperCのf20だけでなく、SubC1〜SubC3のf20が呼ばれる可能性がある(4つのf20のいずれかが呼ばれる)。
従って、継承を使ったクラスの関数呼出しは、一種の分岐処理ともみなすことができる。ここでは、前記のif文やswitch文と同様に、重み付けを行う。本処理を図26、図27、図28に示す。
図26は、この場合の関数呼出し列情報31を示しており、図27は、この場合の関数呼出し関係情報35を示している。
この関数呼出し関係情報35では、f20それ自身のノード35aの他に承継に該当するノード35dとして、3つの“Inh”が追加されている。
図28(b)に例示される重み定義表42においては、承継に対応する種別42aとして“分岐”が設定され、構文42bには“Inn”が設定され、重み42cには、たとえば−0.2が設定され、図28(a)に例示されるように関数呼出し列情報31のノード35dの“Inn”には対応した重みが付与される。
この結果、図28(c)のように、実行頻度情報表37においては、末端呼出しの#7では、承継の重みを反映して、実行頻度は、−.6となる。
条件分岐の条件値を実行頻度予測の重み付けに用いることもできる。すなわち、if文やswitch文の条件値も考慮した重み付けを行う。
例えば、エラー処理部分の実行頻度は通常小さい。エラー処理部分は、図29(a)に例示されたソースコード40−2のような表現がされることが多いため、条件値(文字列定数、この場合、“FILE_IO_ERROR”)を見ることで、その分岐がエラー処理であるか否かを予測できる。
このソースコード40−2に対応する関数呼出し列情報31は、図29(b)のようになり、#8の「末端呼出し」の実行頻度の予測に、条件値の判定が寄与する。
この条件分岐がエラー処理部分か否かの判定には、ソースコード解析情報30から、条件値の変数名または定数名を取得する。そして、“ERR”や“ERROR”などの文字列とのマッチングを行う。このマッチングで条件値が類似の文字列と判断した場合は、上述の図29(b)の関数呼出し列情報31に対応して、図30のように関数呼出し関係情報35を生成する。この場合、関数呼出し関係情報35には、評価対象となる条件値に対応した“Val”のノード35dが追加されている。
以降は、図31(b)に例示されるように、重み定義表42に、種別42aが条件分岐で、構文42bが“Val”のエントリを設けて、重み42cを設定し、図31(a)に示されるように、関数呼出し関係情報35の“Val”のノード35dに対応した重み値を付与して、上述の処理と同様に、#8の「末端呼出し」に対して、図31(c)に例示される実行頻度情報表37を得る。
同様な例として、catch節で表される例外処理も、エラー処理と同様、実行頻度は通常小さい。従って、catch節内の関数呼出しには、実行頻度を下げる重みを付ける。この例を図32に示す。
図32(a)のソースコード40−3の例のように、catch節を含む場合、関数呼出し列情報31は、図32(b)のようになり、例外処理情報表34は、図32(c)のようになり、関数呼出し関係情報35は、図32(d)のようになる。例外処理情報表34は、関数ペア34aと、種別34bを含む。
これにより、上述の条件値の場合と同様に、重み合計として実行頻度を得ることができる。
一般に、たとえば、過去の経験やプログラムの用途等から、プログラム中で高頻度で実行される関数がどれか、ユーザが事前に分かっているケースがある。
このような場合、以下のように、ユーザが既知の当該関数に関する情報をソースコード問題予測プログラム20に与えることで、上記までの実行頻度の予測処理をより高精度化することができる。
まず、図33(a)に例示されるように関数重み定義表44を用いて、高頻度で実行される関数とその重みをユーザが指定する。この場合、関数重み定義表44は、関数名44aと、対応する重み44bを含む。
この関数重み定義表44の重み定義を入力として、図33(b)に例示されるように、関数呼出し関係情報35において、指定された関数にその重みを付加する。以降は、前記と同じ処理を行うことにより、図33(c)に例示されるように、実行頻度情報表37を生成して、重み合計から、実行頻度の予測を行う。
図34に本実施の形態の場合の効果と、従来の参考技術の場合とを比較対照して示す。
従来の参考技術の場合は、ソースコード中から一律で関数呼出しを検出するため、それを用いた設計レビューでは、全ての関数を同様にレビューする必要があり、多大な工数を必要とする。また、結果の視認性も劣る。
これに対して、本実施の形態の場合には、重み付けにより、問題の関数を高精度に検出(すなわち本質的な問題を重点的に検出)できるため、それらの関数に絞ったレビューを行えば良い。これにより、設計レビューの工数を大幅に削減できる。
たとえば、既存のコンピュータで実行される一般のプログラムと異なり、組み込みソフトウェアの開発では、ソフトウェアと実機の開発とが並行して行われることが多いため、実際に実機でソフトウェアを実行して試験する動的試験を開発の早期に実施することが困難な場合が多い。
このとき、本実施の形態の場合には、上述のような、問題の関数等を高精度で予測して検出することにより、開発工程の早期に効果的なレビューを実施して、有効なソースコードの改善、修正を実現できる、という利点がある。
図35は、本実施の形態のソースコード問題予測プログラム20においてディスプレイ14に表示される操作画面と、それに基づく評価処理の作用の一例を示す説明図である。
本実施の形態の場合、単に、ディスプレイ14に検出結果レポート50を表示するだけでなく、ユーザが当該検出結果レポート50を評価し、その評価結果を各種の重みの設定にフィードバックして、一層、ソースコード40における問題の検出精度を向上させることができる。
すなわち、操作画面には、検出結果レポート50とともにユーザ評価入力領域60を表示させる。このユーザ評価入力領域60には、検出結果レポート50の側の検出ID50aの各行に対応したチェック欄61とコメント欄62が設けられている。
チェック欄61は、検出結果レポート50の結果に基づいて、改善が必要な場合を示す「改善」のチェック項目61aと、現在のままでも可を示す「実害なし」のチェック項目61bが設けられている。
チェック項目61bの「改善」がチェックされた場合には、コメント欄62には、対応する対策が記載される。
チェック項目61aの「実害なし」がチェックされた場合には、検出結果レポート50の側における検出ID50aの関数は、現在のままでも実害がないと判定され、問題検出の観点からは、検出結果レポート50におけるノイズとみなすことができる。
そこで、本実施の形態の場合には、チェック項目61aがチェックされた検出ID50aの関数に関係する重み定義表42、関数重み定義表44等における重み値を変更して、問題として検出される可能性やランクを下げる。
すなわち、図35の例では、チェック項目61a「実害なし」がチェックされた項目(この場合、検出ID50aが#2と#1)を抽出し、さらに検出修正対象を絞り込む。この場合、#1は、すでに最低ランク「E」であり、重みの変更は不要と判断して検出ID50aが#2の関数を、重み調整の対象と決定する。
そして、こうして決定された#2について、問題ランク50bの「問題の可能性」のランクが低下するように、重み定義表42、関数重み定義表44等における重みの設定値を変更する。この変更に際しては、他の検出結果の検出精度への影響がより少ない重み設定項目を選択して変更を行う。
図35の例では、重み定義表42におけるif文の条件分岐に対する重みを減らす例が示されている。
この結果、図36に例示されるように、実行頻度情報表37は、変更の前後で、図36(a)から図36(b)に変化する。そして、これに応じて、出力される検出結果レポート50においては、検出ID50aが#2の問題ランク50bが、Dから最低のEに変化する。
これにより、たとえば、問題ランク50bをランクの降順にして検出結果レポート50に表示すれば、「実害なし」の#2は、最後のほうに表示され、問題検出におけるノイズとして目立たなくなり、視認性が向上する。
図35の例では、検出結果レポート50における関数の数は、5個であるが、実際のソースコードの評価では、抽出される関数が1000個を超える場合もあり、本実施の形態のように、問題の可能性のある関数に絞り込んで、しかもランク付けして出力することによる視認性や操作性の向上の効果は非常に大きい。
このように、本実施の形態の場合には、検出結果レポート50として出力された結果に、ユーザの評価を加味して、さらにソースコード40の問題部分の検出精度や、検出結果レポート50の視認性、操作性を向上させることができる。
なお、本発明は、上述の実施の形態に例示した構成に限らず、その趣旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
(付記1)
プログラムのソースコードに含まれる関数の呼出し関係、繰返し構造、条件分岐構造の少なくとも一つに関する制御構造情報を抽出する処理と、
前記制御構造情報から前記プログラムの実行時に高頻度で繰返し実行される特定領域を予測する処理と、
前記特定領域について、予め与えられた特定の関数の呼出しが存在するか調べ、存在した前記特定の関数を予測された当該特定領域の実行頻度に基づいてランク付けして表示する処理と、
をコンピュータに実行させることを特徴とするソースコード問題予測プログラム。
(付記2)
付記1記載のソースコード問題予測プログラムにおいて、
前記関数の呼出し列中に含まれる前記繰返し構造と前記条件分岐構造の各々の数を計測し、予め定義された重み定義情報に基づき、各々の前記数の計測値に重みを乗算することで予測される前記実行頻度を計算する処理を、さらに前記コンピュータに実行させることを特徴とするソースコード問題予測プログラム。
(付記3)
付記1記載のソースコード問題予測プログラムにおいて、
再帰呼出しを行う前記関数を抽出し、当該関数内の処理を実行頻度が高い前記特定領域として予測する処理、
オブジェクト指向型プログラムにおける継承の関係にあるクラス群を抽出し、各クラスに宣言されている同一名の前記関数について、クラス数に反比例する実行頻度を割当てる処理、
前記条件分岐構造の条件値となっている変数及び定数について、前記変数及び定数の文字列表現を予め定義されたエラー処理を表す文字列と照合し、類似性が高ければ条件一致時に実行される処理領域に対して低い実行頻度を割当てる処理、
前記関数の呼出し列中に含まれる例外処理の数を計測し、前記例外処理の数に反比例する実行頻度を個々の前記関数に割当てる処理、
特定の前記関数に対するユーザからの重み定義を受け付け、前記重み定義も用いて実行頻度を個々の前記関数に割当てる処理、
の少なくとも一つを、さらに前記コンピュータに実行させることを特徴とするソースコード問題予測プログラム。
(付記4)
プログラムのソースコードに含まれる関数の呼出し関係、繰返し構造、条件分岐構造の少なくとも一つに関する制御構造情報を抽出するステップと、
前記制御構造情報から前記プログラムの実行時に高頻度で繰返し実行される特定領域を予測するステップと、
前記特定領域について、予め与えられた特定の関数の呼出しが存在するか調べ、存在した前記特定の関数を予測された当該特定領域の実行頻度に基づいてランク付けして表示するステップを、
含むことを特徴とするソースコード問題予測方法。
(付記5)
プログラムのソースコードに含まれる関数の呼出し関係、繰返し構造、条件分岐構造の少なくとも一つに関する制御構造情報を抽出する第1手段と、
前記制御構造情報から前記プログラムの実行時に高頻度で繰返し実行される特定領域を予測する第2手段と、
前記特定領域について、予め与えられた特定の関数の呼出しが存在するか調べ、存在した前記特定の関数を予測された当該特定領域の実行頻度に基づいてランク付けして表示する第3手段と、
を含むことを特徴とするソースコード問題予測装置。
(付記6)
付記5記載のソースコード問題予測装置において、
前記第2手段では、前記関数の呼出し列中に含まれる前記繰返し構造と前記条件分岐構造の各々の数を計測し、予め定義された重み定義情報に基づき、各々の前記数の計測値に重みを乗算することで予測される前記実行頻度を計算することを特徴とするソースコード問題予測装置。
(付記7)
付記5記載のソースコード問題予測装置において、
前記第2手段では、再帰呼出しを行う前記関数を抽出し、当該関数内の処理を実行頻度が高い前記特定領域として予測することを特徴とするソースコード問題予測装置。
(付記8)
付記5記載のソースコード問題予測装置において、
前記第2手段では、オブジェクト指向型プログラムにおける継承の関係にあるクラス群を抽出し、各クラスに宣言されている同一名の前記関数について、クラス数に反比例する実行頻度を割当てることを特徴とするソースコード問題予測装置。
(付記9)
付記5記載のソースコード問題予測装置において、
前記第2手段では、前記条件分岐構造の条件値となっている変数及び定数について、前記変数及び定数の文字列表現を予め定義されたエラー処理を表す文字列と照合し、類似性が高ければ条件一致時に実行される処理領域に対して低い実行頻度を割当てることを特徴とするソースコード問題予測装置。
(付記10)
付記5記載のソースコード問題予測装置において、
前記第2手段では、前記関数の呼出し列中に含まれる例外処理の数を計測し、前記例外処理の数に反比例する実行頻度を個々の前記関数に割当てることを特徴とするソースコード問題予測装置。
(付記11)
付記5記載のソースコード問題予測装置において、
特定の前記関数に対するユーザからの重み定義を受け付け、前記第2手段は前記重み定義も用いて実行頻度を個々の前記関数に割当てることを特徴とするソースコード問題予測装置。
本発明の一実施の形態であるソースコード問題予測プログラムおよび方法の作用の一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムおよび方法を実施するソースコード問題予測装置の構成の一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムおよび方法の作用の一例を示すフローチャートである。 本発明の一実施の形態であるソースコード問題予測プログラムで処理されるソースコードの一例を示す説明図である。 本発明の一実施の形態であるソースコード問題予測プログラムで生成されるソースコード解析情報の一例を示す説明図である。 本発明の一実施の形態であるソースコード問題予測プログラムに入力される検出関数一覧表の構成例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおける関数検出処理の一例を示すフローチャートである。 本発明の一実施の形態であるソースコード問題予測プログラムで出力される検出結果表の一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおける関数呼出し列情報の抽出処理の一例を示すフローチャートである。 本発明の一実施の形態であるソースコード問題予測プログラムにて抽出された関数呼出し列情報の一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおけるループ情報の抽出処理の一例を示すフローチャートである。 本発明の一実施の形態であるソースコード問題予測プログラムにおいて出力されるループ情報表の一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおいて出力される条件分岐情報表の一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおける関数呼出し関係情報の抽出処理の一例を示すフローチャートである。 本発明の一実施の形態であるソースコード問題予測プログラムにおいて出力される関数呼出し関係情報の一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムに入力される重み定義表の一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおける実行頻度予測処理の一例を示すフローチャートである。 本発明の一実施の形態であるソースコード問題予測プログラムの実行頻度予測処理における関数呼出し関係情報の状態を例示した概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおいて出力される実行頻度情報表の一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムに入力されるランク定義表の一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおける検出結果レポートの出力処理の一例を示すフローチャートである。 本発明の一実施の形態であるソースコード問題予測プログラムにおいて出力される検出結果レポートの一例を示す概念図である。 (a)および(b)は、本発明の一実施の形態であるソースコード問題予測プログラムにおいて処理される、再帰呼出しを含むソースコード例と対応する関数呼出し関係情報の一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおいて出力される関数呼出し関係情報の一例を示す概念図である。 (a)〜(c)は、関数の再帰呼出しの場合における実行頻度情報表の生成処理の例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムに入力される、継承を含むソースコードの一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおいて、継承を含むソースコードに対応して出力される関数呼出し列情報の一例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおいて、継承を含むソースコードに対応して出力される関数呼出し関係情報の一例を示す概念図である。 (a)〜(c)は、継承を含むソースコードに対する重み付け処理の一例を示す概念図である。 (a)、(b)は、本発明の一実施の形態であるソースコード問題予測プログラムにおいて、条件分岐の条件値を実行頻度予測に用いる場合の概念図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおいて出力される、条件値を含む関数呼出し関係情報の一例を示す概念図である。 (a)〜(c)は、本発明の一実施の形態であるソースコード問題予測プログラムにおける、条件値を含む関数呼出し関係情報の重み付け処理の一例を示す概念図である。 (a)〜(d)は、本発明の一実施の形態であるソースコード問題予測プログラムにおける、例外処理を含むソースコードにおける関数呼出し関係情報の生成例を示す概念図である。 (a)〜(c)は、本発明の一実施の形態であるソースコード問題予測プログラムにおける、ユーザによる関数の重み付けの処理例を示す概念図である。 本発明の一実施の形態であるソースコード問題予測技術の場合と、従来の参考技術の場合の効果を比較対照して示す説明図である。 本発明の一実施の形態であるソースコード問題予測プログラムにおける操作画面と、それを用いた重み調整の作用の一例を示す説明図である (a)〜(c)は、重み調整による検出結果の最適化の一例を示す概念図である。
符号の説明
10 情報処理装置
11 中央処理装置
12 主記憶
13 外部記憶装置
14 ディスプレイ
15 情報入力装置
16 ネットワークインタフェース
17 情報ネットワーク
18 オペレーティングシステム
20 ソースコード問題予測プログラム
21 字句・構文解析部
22 検出部
23 関数呼出し列抽出部
24 ループ情報抽出部
25 条件分岐抽出部
26 例外処理情報抽出部
27 関数呼出し関係情報生成部
28 実行頻度予測部
29 レポート出力部
30 ソースコード解析情報
30a ノード
31 関数呼出し列情報
31a ノード
31b リンク
32 ループ情報表
32a 関数ペア
32b 種別
33 条件分岐情報表
33a 関数ペア
33b 種別
34 例外処理情報表
34a 関数ペア
34b 種別
35 関数呼出し関係情報
35a ノード
35b リンク
35c ノード

35d ノード
36 検出結果表
36a 呼出しID
36b 存在箇所
36c 検出関数
37 実行頻度情報表
37a 呼出し列
37b 重み合計
40 ソースコード
40−1 ソースコード
40−2 ソースコード
40−3 ソースコード
41 検出関数一覧表
41a クラス名
41b メソッド名
41c 引数型
42 重み定義表
42a 種別
42b 構文
42c 重み
43 ランク定義表
43a ランク
43b 重み合計
44 関数重み定義表
44a 関数名
44b 重み
50 検出結果レポート
50a 検出ID
50b 問題ランク
50c 存在箇所
50d 検出関数
60 ユーザ評価入力領域
61 チェック欄
61a チェック項目
61b チェック項目
62 コメント欄

Claims (2)

  1. プログラムのソースコードに含まれる関数の呼出し関係、繰返し構造、条件分岐構造の少なくとも一つに関する制御構造情報を抽出する処理と、
    関数の呼出し列中に含まれる前記繰返し構造と前記条件分岐構造の各々の数を計測し、予め定義された重み定義情報に基づき、各々の前記数の計測値に重みを乗算することで予測される実行頻度を計算する処理と、
    前記実行頻度から前記プログラムの実行時に繰返し実行される特定領域を予測する処理と、
    前記特定領域について、予め与えられた特定の関数の呼出しが存在するか調べ、存在した前記特定の関数を予測された当該特定領域の実行頻度に基づいてランク付けして表示する処理と、
    をコンピュータに実行させることを特徴とするソースコード問題予測プログラム。
  2. プログラムのソースコードに含まれる関数の呼出し関係、繰返し構造、条件分岐構造の少なくとも一つに関する制御構造情報を抽出する処理と、
    実行頻度を割当てる処理と、
    前記実行頻度から前記プログラムの実行時に繰返し実行される特定領域を予測する処理と、
    前記特定領域について、予め与えられた特定の関数の呼出しが存在するか調べ、存在した前記特定の関数を予測された当該特定領域の実行頻度に基づいてランク付けして表示する処理とを、ソースコード問題予測プログラムがコンピュータに実行させ、
    前記実行頻度を割当てる処理は、
    オブジェクト指向型プログラムにおける継承の関係にあるクラス群を抽出し、各クラスに宣言されている同一名の前記関数について、クラス数に反比例する実行頻度を割当てる処理、
    前記条件分岐構造の条件値となっている変数及び定数について、前記変数及び定数の文字列表現を予め定義されたエラー処理を表す文字列と照合し、類似性が高ければ条件一致時に実行される処理領域に対して低い実行頻度を割当てる処理、
    数の呼出し列中に含まれる例外処理の数を計測し、前記例外処理の数に反比例する実行頻度を個々の前記関数に割当てる処理、
    特定の前記関数に対するユーザからの重み定義を受け付け、前記重み定義も用いて実行頻度を個々の前記関数に割当てる処理、
    の少なくとも一つを行うことを特徴とするソースコード問題予測プログラム。
JP2005380256A 2005-12-28 2005-12-28 ソースコード問題予測プログラム Expired - Fee Related JP4914609B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005380256A JP4914609B2 (ja) 2005-12-28 2005-12-28 ソースコード問題予測プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005380256A JP4914609B2 (ja) 2005-12-28 2005-12-28 ソースコード問題予測プログラム

Publications (2)

Publication Number Publication Date
JP2007179488A JP2007179488A (ja) 2007-07-12
JP4914609B2 true JP4914609B2 (ja) 2012-04-11

Family

ID=38304579

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005380256A Expired - Fee Related JP4914609B2 (ja) 2005-12-28 2005-12-28 ソースコード問題予測プログラム

Country Status (1)

Country Link
JP (1) JP4914609B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107357733A (zh) * 2017-07-17 2017-11-17 万帮充电设备有限公司 提高代码质量的方法及装置

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5073767B2 (ja) * 2010-02-10 2012-11-14 株式会社エクサ Cobolソースコードチェックプログラム、cobolソースコードチェックシステム
JP5572619B2 (ja) * 2011-12-02 2014-08-13 株式会社日立製作所 トレース情報の数を算出する計算機、トレース情報の数を算出する方法及びトレース情報の数を算出させるプログラム
US9542176B2 (en) * 2012-08-20 2017-01-10 Microsoft Technology Licensing, Llc Predicting software build errors
CN105320591B (zh) * 2014-07-25 2019-08-27 腾讯科技(深圳)有限公司 代码检测方法及装置
CN106293676B (zh) * 2015-06-08 2019-05-10 东元电机股份有限公司 产生整体检测程序的方法及系统
JP6512032B2 (ja) * 2015-08-21 2019-05-15 富士通株式会社 スタブ化対象判定装置、方法、及びプログラム
JP6548836B2 (ja) 2016-11-22 2019-07-24 三菱電機株式会社 情報処理装置、情報処理方法及び情報処理プログラム
JP7068752B2 (ja) * 2018-03-22 2022-05-17 三菱電機株式会社 ソースコード解析装置およびソースコード解析プログラム
US11281566B2 (en) 2018-07-23 2022-03-22 Mitsubishi Electric Corporation Scoring device, computer readable medium, and scoring method
CN111611153B (zh) * 2019-02-26 2023-05-16 阿里巴巴集团控股有限公司 一种用户界面过度绘制的检测方法和装置
KR102245386B1 (ko) * 2019-07-16 2021-04-27 서울과학기술대학교 산학협력단 사회연결망과 자료포락을 이용한 소프트웨어 함수 분석 시스템 및 그 방법
CN114328168B (zh) * 2020-10-09 2024-07-02 腾讯科技(深圳)有限公司 异常检测方法、装置、计算机设备和存储介质
KR102295868B1 (ko) * 2021-02-01 2021-09-01 (주)제스아이앤씨 네트워크 장애예측 시스템

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09282173A (ja) * 1996-04-10 1997-10-31 Hitachi Ltd プログラムの静的解析方法
JP2000330782A (ja) * 1999-05-25 2000-11-30 Nec Microcomputer Technology Ltd ソースへのヒント記述による静的性能解析装置および方法
JP2001273169A (ja) * 2000-03-24 2001-10-05 Toshiba Corp プログラムテスト仕様書生成装置
JP3961787B2 (ja) * 2000-06-12 2007-08-22 富士通株式会社 オブジェクト指向プログラム性能改善支援装置、記録媒体及びプログラム
JP2004086319A (ja) * 2002-08-23 2004-03-18 Hitachi Information Systems Ltd ソフトウェアの品質評価方法及び品質評価システム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107357733A (zh) * 2017-07-17 2017-11-17 万帮充电设备有限公司 提高代码质量的方法及装置

Also Published As

Publication number Publication date
JP2007179488A (ja) 2007-07-12

Similar Documents

Publication Publication Date Title
JP4914609B2 (ja) ソースコード問題予測プログラム
US7975256B2 (en) Optimizing application performance through data mining
Hölzle et al. Reconciling responsiveness with performance in pure object-oriented languages
US6205555B1 (en) Processor power consumption estimating system, processor power consumption estimating method, and storage medium storing program for executing the processor power consumption estimating method
US7707386B2 (en) Program segment searching for extension instruction determination to design a processor that meets performance goal
US8627287B2 (en) Prioritizing quality improvements to source code
US6658643B1 (en) Method and apparatus for computer software analysis
CN110287702B (zh) 一种二进制漏洞克隆检测方法及装置
Sandoval Alcocer et al. Learning from source code history to identify performance failures
US8881116B2 (en) Identifying and triaging software bugs through backward propagation of under-approximated values and empiric techniques
US8839210B2 (en) Program performance analysis apparatus
CN111104335B (zh) 一种基于多层次分析的c语言缺陷检测方法及装置
US20140359566A1 (en) Resolution of textual code in a graphical hierarchical model of a technical computing environment
US8387001B2 (en) Method for finding an impact on a computer generated code
US20110271250A1 (en) Software Development Tool
US20150378724A1 (en) Identifying code that exhibits ideal logging behavior
EP3835944A1 (en) Apparatus and method for source code optimisation
US8065565B2 (en) Statistical debugging using paths and adaptive profiling
US8898649B2 (en) Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program
CN116406459A (zh) 一种代码处理方法、装置、设备及介质
US10839124B1 (en) Interactive compilation of software to a hardware language to satisfy formal verification constraints
Nguyen et al. Recommending exception handling code
Park et al. A survey of parametric static analysis
US7647581B2 (en) Evaluating java objects across different virtual machine vendors
CN108415836B (zh) 利用应用程序检测计算机系统性能变化的方法和系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080911

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110531

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111025

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111220

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

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

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20150127

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees