JP2008021244A - ソースコード修正優先度付けシステムおよびその優先度付け方法 - Google Patents

ソースコード修正優先度付けシステムおよびその優先度付け方法 Download PDF

Info

Publication number
JP2008021244A
JP2008021244A JP2006194349A JP2006194349A JP2008021244A JP 2008021244 A JP2008021244 A JP 2008021244A JP 2006194349 A JP2006194349 A JP 2006194349A JP 2006194349 A JP2006194349 A JP 2006194349A JP 2008021244 A JP2008021244 A JP 2008021244A
Authority
JP
Japan
Prior art keywords
source code
warning
module
new source
new
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
JP2006194349A
Other languages
English (en)
Other versions
JP4886404B2 (ja
Inventor
Koki Ando
弘毅 安藤
Ryoichi Kato
亮一 加藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2006194349A priority Critical patent/JP4886404B2/ja
Publication of JP2008021244A publication Critical patent/JP2008021244A/ja
Application granted granted Critical
Publication of JP4886404B2 publication Critical patent/JP4886404B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

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

Abstract

【課題】ソースコードに対する静的解析により検出された警告に対し、どの警告に対応する修正から行うべきかの優先度付けを行うことができるソースコード修正優先度付けシステムおよびその優先度付け方法を提供する。
【解決手段】本発明に係るソースコード修正優先度付けシステム10は、ソースコードの記憶を行う構成管理部11、不具合情報管理DB12、変更履歴にもとづく修正優先度付けを行う変更履歴優先度付け装置13、不具合情報にもとづく修正優先度付けを行う不具合優先度付け装置14、総合的な修正優先度付けを行う修正優先度決定装置15、修正優先度DB16、一般的な静的解析を行う静的解析装置21および静的解析結果DB22を有するものである。
【選択図】 図1

Description

本発明は、ソースコードに対する静的解析により検出された警告に対応する修正の優先度付けを行うソースコード修正優先度付けシステムおよびその優先度付け方法に関する。
ソースコードに対する静的解析は、動作不良などの不具合を起こす可能性を減らす目的で行われる。静的解析では、不具合に繋がりやすい一定のパターンをあらかじめ定義しておき、この定義に合致するパターンをソースコード内に検出した場合に、その旨が警告として出力される。ユーザは、この警告に対応する修正と静的解析を繰り返すことにより、ソースコードの品質改善を行うことができる。
この静的解析により検出される警告は、ソースコードが大きくなるにつれ、膨大な量になっていく。実際には、静的解析の結果、不具合に繋がらないもの等も含め、修正しきれないほど大量の警告が出力されることも多い。このため、ユーザに対し、どの警告から修正すべきかを提示する技術が求められている。
従来、この種のソースコード修正支援技術として、特開2004−326337号公報(特許文献1)に開示されたものがある。
特開2004−326337号公報(特許文献1)に開示されたコード解析プログラム、コード解析自動化プログラム及び自動コード解析システムは、ソースコードに変更(修正)があった場合に変更前と変更後のソースコードの差分情報を生成し、この差分情報にもとづいて、変更後のソースコードの静的解析結果を絞り込むことができるようになっている。このため、変更のないソースコードに対する解析結果はリストアップされない。したがって、修正する必要のないソースコードを静的解析ごとにチェックする手間を省略することができるとともに、静的解析ごとに余分な警告が増大することも防止することができる。
特開2004−326337号公報
従来のソースコード修正支援技術では、ソースコードの変更箇所に対する警告を単に抽出するだけであり、この抽出された警告が複数の場合、どの警告が優先的に修正されるべきかが全く不明である。つまり、この警告のうち、どの警告が実際に不具合に結びつくコーディングミスに由来するものか、どの警告がソースコード作成者の仕様に対する理解不足に由来するものなのか、関連付けられてはいない。また、ソースコードの変更が広く分布している場合には、そもそも警告の絞込みが効果的に行えない。
本発明は、上述した事情を考慮してなされたもので、ソースコードに対する静的解析により検出された警告に対し、どの警告に対応する修正から行うべきかの優先度付けを行うことができるソースコード修正優先度付けシステムおよびその優先度付け方法を提供することを目的とする。
本発明に係るソースコード修正優先度付けシステムは、上述した課題を解決するために、新初回記憶時のソースコードから前回記憶時のソースコードまでと新たなソースコードとの全てのソースコードをモジュールごとに記憶する構成管理データベースと、前記構成管理データベースに記憶された前記新たなソースコードと前記前回記憶時のソースコードを比較しモジュールごとの変更の情報を作成し、このモジュールごとの変更の情報を前記新たなソースコードと関連付けて前記構成管理データベースに記憶させる差分作成装置と、前記新たなソースコードに対して静的解析を行い、不具合に繋がりやすい一定のパターンを検出した場合に、その旨を警告として出力する静的解析装置と、この静的解析装置の出力した警告を前記新たなソースコードと関連付けて記憶する静的解析結果データベースと、前記構成管理データベースからこの構成管理データベースに記憶されている全ての前記モジュールごとの変更の情報を、前記静的解析結果データベースから前記新たなソースコードの警告を、それぞれ取得し、前記全てのモジュールごとの変更の情報にもとづき前記初回記憶時のソースコードから前記新たなソースコードまでの前記モジュールごとの変更の累計回数を計算し、この変更の累計回数が多いモジュールに付された前記新たなソースコードの警告から修正すべき旨の優先度付けを行う変更履歴優先度付け装置と、を備えたことを特徴とするものである。ここで、モジュールごとの変更の情報とは、少なくともモジュールごとの変更の有無と、新たなソースコードの変更時期(記憶日時)の情報を含むものをいう。以下同じ。
また、本発明に係るソースコード修正優先度付けシステムは、上述した課題を解決するために、初回記憶時のソースコードから前回記憶時のソースコードまでと新たなソースコードとの全てのソースコードをモジュールごとに記憶し、この新たなソースコードが変更後のソースコードでありかつこの変更が不具合に対応するための変更であった場合にはこの不具合の不具合IDをこの新たなソースコードに関連付けてさらに記憶する構成管理データベースと、前記構成管理データベースに記憶された前記新たなソースコードと前記前回記憶時のソースコードを比較しモジュールごとの変更の情報を作成し、このモジュールごとの変更の情報を前記新たなソースコードと関連付けて前記構成管理データベースに記憶させる差分作成装置と、前記新たなソースコードに対して静的解析を行い、不具合に繋がりやすい一定のパターンを検出した場合に、その旨を警告として出力する静的解析装置と、この静的解析装置の出力した警告を前記新たなソースコードと関連付けて記憶する静的解析結果データベースと、前記構成管理データベースから前記新たなソースコードに関連付けられたモジュールごとの変更の情報および存在する場合は前記不具合IDを、前記静的解析結果データベースから前記新たなソースコードの警告および前記前回記憶時のソースコードの警告を、それぞれ取得し、前記不具合IDが存在しかつ前記前回記憶時のソースコードにあり前記新たなソースコードにない削除された警告がある場合は、この削除された警告と同一種類の前記新たなソースコードの警告から修正すべき旨の優先度付けを行う不具合優先度付け装置と、を備えたことを特徴とするものである。
さらに、本発明に係るソースコード修正優先度付けシステムは、上述した課題を解決するために、初回記憶時のソースコードから前回記憶時のソースコードまでと新たなソースコードとの全てのソースコードをモジュールごとに記憶し、この新たなソースコードが変更後のソースコードでありかつこの変更が不具合に対応するための変更であった場合にはこの不具合の不具合IDをこの新たなソースコードに関連付けてさらに記憶する構成管理データベースと、前記構成管理データベースに記憶された前記新たなソースコードと前記前回記憶時のソースコードを比較しモジュールごとの変更の情報を作成し、このモジュールごとの変更の情報を前記新たなソースコードと関連付けて前記構成管理データベースに記憶させる差分作成装置と、前記新たなソースコードに対して静的解析を行い、不具合に繋がりやすい一定のパターンを検出した場合に、その旨を警告として出力する静的解析装置と、この静的解析装置の出力した警告を前記新たなソースコードと関連付けて記憶する静的解析結果データベースと、前記構成管理データベースからこの構成管理データベースに記憶されている全ての前記モジュールごとの変更の情報を、前記静的解析結果データベースから前記新たなソースコードの警告を、それぞれ取得し、前記全てのモジュールごとの変更の情報にもとづき前記初回記憶時のソースコードから前記新たなソースコードまでの前記モジュールごとの変更の累計回数を計算し、この変更の累計回数が同一回数のモジュールがない場合は、この変更の累計回数が多いモジュールに付された前記新たなソースコードの警告から修正すべき旨の優先度付けを行い、前記モジュールごとの変更の累計回数が同一回数のモジュールがある場合は、この同一回数のモジュールのうち変更時期が新しいモジュールに付された前記新たなソースコードの警告から修正すべき旨の優先度付けをさらに行う変更履歴優先度付け装置と、前記構成管理データベースから前記新たなソースコードに関連付けられたモジュールごとの変更の情報および存在する場合は前記不具合IDを、前記静的解析結果データベースから前記新たなソースコードの警告および前記前回記憶時のソースコードの警告を、それぞれ取得し、前記不具合IDが存在しかつ前記前回記憶時のソースコードにあり前記新たなソースコードにない削除された警告がある場合は、この削除された警告と同一種類の前記新たなソースコードの警告から修正すべき旨の優先度付けを行う不具合優先度付け装置と、前記変更履歴優先度付け装置から受けた優先度付けの結果と、前記不具合優先度付け装置から受けた優先度付けの結果とにもとづき、総合的にどの前記警告から修正すべきかの優先度付けを行う修正優先度決定装置と、を備えたことを特徴とするものである。
一方、本発明に係るソースコード修正優先度付け方法は、上述した課題を解決するために、初回記憶時のソースコードから前回記憶時のソースコードまでと新たなソースコードとの全てのソースコードをモジュールごとに記憶するステップと、前記新たなソースコードと前記前回記憶時のソースコードを比較しモジュールごとの変更の情報を作成してこのモジュールごとの変更の情報を前記新たなソースコードと関連付けて記憶するステップと、前記新たなソースコードに対して静的解析を行い、不具合に繋がりやすい一定のパターンを検出した場合に、その旨を警告として出力するステップと、前記関連付けて記憶するステップで記憶した全ての前記モジュールごとの変更の情報にもとづき前記初回記憶時のソースコードから前記新たなソースコードまでの前記モジュールごとの変更の累計回数を計算するステップと、この変更の累計回数が多いモジュールに付された前記新たなソースコードの警告から修正すべき旨の優先度付けを行うステップと、を有することを特徴とする方法である。
また、本発明に係るソースコード修正優先度付け方法は、上述した課題を解決するために、初回記憶時のソースコードから前回記憶時のソースコードまでと新たなソースコードとの全てのソースコードをモジュールごとに記憶するステップと、前記新たなソースコードが変更後のソースコードでありかつこの変更が不具合に対応するための変更であった場合にはこの不具合の不具合IDをこの新たなソースコードに関連付けて記憶するステップと、この新たなソースコードと前記前回記憶時のソースコードを比較しモジュールごとの変更の情報を作成してこのモジュールごとの変更の情報を前記新たなソースコードと関連付けて記憶するステップと、前記新たなソースコードに対して静的解析を行い、不具合に繋がりやすい一定のパターンを検出した場合に、その旨を警告として出力するステップと、前記不具合IDが存在しかつ前記前回記憶時のソースコードにあり前記新たなソースコードにない削除された警告がある場合は、この削除された警告と同一種類の前記新たなソースコードの警告から修正すべき旨の優先度付けを行うステップと、を有することを特徴とする方法である。
本発明に係るソースコード修正優先度付けシステムおよびその優先度付け方法によれば、ソースコードに対する静的解析により検出された警告に対し、どの警告に対応する修正から行うべきかの優先度付けを行うことができる。
本発明に係るソースコード修正優先度付けシステムおよびその優先度付け方法の実施の形態について、添付図面を参照して説明する。
図1は、本発明に係るソースコード修正優先度付けシステムの一実施形態を示す概略的な全体構成図である。
ソースコード修正優先度付けシステム10は、構成管理部11、不具合情報管理DB12、変更履歴優先度付け装置13、不具合優先度付け装置14、修正優先度決定装置15、修正優先度DB16、静的解析装置21および静的解析結果DB22を有する。
構成管理部11は、構成管理DB11aと、監視装置11bと、差分生成装置11cとを有する。
構成管理DB11aは、ユーザから、ユーザの意思をソースコード修正優先度付けシステム10に伝える機能を有するキーボードなどの入力装置31を介して受けたソースコードをモジュールごとに記憶する。変更(修正)後のソースコードを受けた場合、構成管理DB11aはこの変更後のソースコードをさらに記憶する。また、この変更が不具合に対応するための変更であった場合には、変更後のソースコードに対しこの不具合の不具合IDを関連付けて記憶する。
監視装置11bは、構成管理DB11aを監視し、ソースコードの記憶が行われたかどうか判定する。ソースコードの記憶が行われた場合、監視装置11bは、その旨を差分生成装置11c、変更履歴優先度付け装置13、不具合優先度付け装置14および静的解析装置21に通知する。
差分生成装置11cは、構成管理DB11aに記憶されたソースコードと前回記憶時のソースコードとを取得し、両者を比較して変更(差分)があるかどうかを判定し、ソースコードのモジュールごとに差分情報を作成する。また、差分生成装置11cは、モジュールごとの変更(差分)の情報(少なくともモジュールごとの変更の有無と、ソースコードの変更時期(記憶日時)の情報を含む)(以下、変更の情報という)を、ソースコードと関連付けて、構成管理DB11aに記憶させる。
不具合管理DB12は、ユーザから入力装置31を介して受けた、ソースコードの開発中に発見された不具合に関する情報(以下、不具合情報という)を記憶する。不具合情報は、不具合ごとに付与する不具合IDと、不具合の原因(コーディングミス、その他(仕様誤解等))を少なくとも含む。不具合の原因を、原理的に静的解析で検出困難な仕様の誤解等によるものと、静的解析で検出しやすいコーディングミスとに分けることで、より精度良く実際の不具合と静的解析による警告を結びつけることができる。
変更履歴優先度付け装置13は、構成管理DB11aからソースコードのモジュールごとの変更の情報を、静的解析結果DB22からこのソースコードの警告(各警告を識別するための警告ID、警告内容、ソースコード内の警告位置、警告種類の情報を少なくとも含む)を、それぞれ取得する。また、変更履歴優先度付け装置13は、この変更の情報からモジュールごとの変更の累計回数を計算し、この変更回数および変更時期にもとづいてどの警告から修正すべきかの優先度付けを行い、この優先度付けの結果を修正優先度決定装置15に与える。
不具合優先度付け装置14は、構成管理DB11aからソースコードのモジュールごとの変更の情報および存在する場合は不具合IDを、静的解析結果DB22からこのソースコードの変更前後の警告を、それぞれ取得する。また、不具合優先度付け装置14は、不具合IDが存在し、かつ、変更により削除された警告がある場合は、この削除された警告が実際に不具合の原因になっていたとみなして、この削除された警告と同一種類の警告に対する優先度を上げるよう優先度付けを行い、この優先度付けの結果を修正優先度決定装置15に与える。
修正優先度決定装置15は、変更履歴優先度付け装置13および不具合優先度付け装置14から優先度の情報を受け、総合的にどの警告から修正すべきかの優先度を決定する。また、修正優先度決定装置15は、この総合的な修正優先度を修正優先度DB16に記憶させる。さらに、修正優先度決定装置15は、CRTやLCDなどの表示装置32を介して、修正優先度DB16が記憶している修正優先度付けされた警告のリストをユーザに提示する。
静的解析装置21は、ソースコードに対し、一般的な静的解析を行う装置であり、この静的解析の結果(警告)をソースコードと関連付けて静的解析結果DB22に記憶させる。また、静的解析装置21は、構成管理DB11aから静的解析を行ったソースコードの変更の情報を取得し、このソースコードの構成管理DB11aへの記憶が初めてである場合(変更時期が一つも記憶されていない場合)は、その旨を修正優先度決定装置15に与える。
静的解析結果DB22は、静的解析装置21から受けたソースコードの静的解析の結果(警告)をソースコードと関連付けて記憶する。
なお、構成管理DB11a、不具合管理DB12、静的解析結果DB22および修正優先度DB16の各データベースは、磁気的もしくは光学的記憶媒体または半導体メモリなどのコンピュータ読み取り可能な記憶媒体を含んだ構成を有してもよく、各データベース内のデータの一部または全部は電子ネットワークを介してダウンロードされるように構成してもよい。
次に、ソースコード修正優先度付けシステム10の作用について説明する。
図2は、図1に示すソースコード修正優先度付けシステム10により、ソースコードに対する静的解析により検出された警告に対し、どの警告に対応する修正から行うべきかの優先度付けを行う際の手順を示すフローチャートである。図2において、Sに数字を付した符号は、フローチャートの各ステップを示す。
この手順は、あらかじめ、ソースコードの開発中に発見された不具合情報を不具合管理DB12に記憶させた状態でスタートとなる。
まず、ステップS1において、監視装置11bは、構成管理DB11aを監視し、ソースコードの記憶が行われたかどうか判定する。記憶が行われた場合は、ステップS2に進む。一方、記憶が行われない場合は、引き続き構成管理DB11aの監視を続ける。
このソースコードの記憶は、ユーザにより入力装置31を介して行われる。この記憶には、ソースコードを初めて構成管理DB11aに記憶させる場合と、すでに構成管理DB11aに記憶させてある(開発中の)ソースコードに対して変更を行った後にこの変更後のソースコードをさらに構成管理DB11aに記憶させる場合とがある。
変更後のソースコードを記憶させる場合、この変更が不具合に対応するための変更であった場合には、ユーザは、変更後のソースコードに対しこの不具合の不具合IDを関連付けて構成管理DB11aに記憶させる。この結果、構成管理DB11aに記憶されたソースコードには、不具合IDが関連付けられているものと不具合IDが関連付けられていないものとが存在することになる。
次に、ステップS2において、静的解析装置21は、監視装置11bからソースコードの記憶が行われた旨の通知を受け、このソースコードに対して静的解析を行う。静的解析装置21は、この静的解析の結果(警告)をソースコードと関連付けて静的解析結果DB22に記憶させる。この警告には、各警告を識別するための警告ID、警告内容、ソースコード内の警告位置、警告種類の情報を少なくとも含む。
次に、ステップS3において、静的解析装置21は、構成管理DB11aに従って静的解析を行ったソースコードを検索し、このソースコードに対応する変更の情報(少なくともモジュールごとの変更の有無と、ソースコードの変更時期(記憶日時)の情報を含む)を取得し、このソースコードの構成管理DB11aへの記憶が初めてであるかどうか判定する。初めてである場合(変更時期が一つも記憶されていない場合)は、ステップS4に進む。一方、2度目以降である場合(変更時期が記憶されている場合)は、ステップS5に進む。
次に、ステップS4において、修正優先度決定装置15は、静的解析装置21からソースコードの初回記憶が行われた旨の通知を受け、静的解析結果DB22からソースコードの警告を読み込み、全ての警告に対する優先度をデフォルトの値に設定して修正優先度DB16に記憶させ、ステップS1に戻る。このデフォルト値の設定は、たとえば優先度を数値化する場合は、全ての警告に対する優先度(数値)を同一の数値に設定することなどにより行う。
次に、ステップS5において、差分生成装置11cは、監視装置11bからソースコードの記憶が行われた旨の通知を受け、構成管理DB11aに従ってこのソースコードと前回記憶時のソースコードとを取得し、両者を比較して変更(差分)があるかどうかを判定する。変更がある場合はステップS6に進む。一方、変更がない場合はステップS1に戻る。
次に、ステップS6において、差分生成装置11cは、前回記憶時のソースコードと今回記憶したソースコードの差分情報を作成する。この差分情報の作成は、ソースコードのモジュールごとに行う。差分生成装置11cは、ソースコードの変更の情報(少なくともモジュールごとの変更の有無と、ソースコードの変更時期(記憶日時)の情報を含む)を、ソースコードと関連付けて、構成管理DB11aに記憶させる。この結果、構成管理DB11aには、少なくとも、ソースコードと、このソースコードのモジュールごとの変更の有無と、変更が行われた場合にはこの変更の日時(変更時期)とが互いに関連付けられて記憶される。また、ソースコードの記憶ごとに各ソースコードに関連付けられたモジュールごとの変更の情報が記憶されるため、構成管理DB11aには、モジュールごとの変更の情報の履歴が作成されることになる。
次に、ステップS7において、変更履歴優先度付け装置13は、監視装置11bからソースコードの記憶が行われた旨の通知を受け、構成管理DB11aに従ってソースコードを検索し、このソースコードに対応する変更の情報をから変更のあったモジュールに関する情報(モジュール名など)を取得する。そして、変更履歴優先度付け装置13は、静的解析結果DB22に従ってこのソースコードの変更のあったモジュールを検索し、この変更のあったモジュールに警告が存在するかどうか判定する。警告がある場合はステップS8に進む。一方、警告がない場合はステップS1に戻る。
次に、ステップS8において、変更履歴優先度付け装置13は、構成管理DB11aに記憶されているソースコードの変更の情報にもとづいて、どの警告から修正すべきかの優先度付けを行い、この優先度付けの結果を修正優先度決定装置15に与える。
図3は、図2のステップS8で変更履歴優先度付け装置13により実行される、変更履歴にもとづく修正優先度付けの際の手順を示す、サブルーチンフローチャートである。図3において、Sに数字を付した符号は、フローチャートの各ステップを示す。
図4は、警告に対応して行われるソースコードの修正の様子を概念的に示す説明図である。図4には、ModuleA、ModuleBおよびModuleCの3つのモジュールで構成されるソースコードについて、ソースコード修正の一例を示した。
図4において、Wa−1、Wa−2などと示す記号は静的解析装置21により付される警告を簡略的に表したもので、アルファベット(WaおよびWb)は警告の種類を表し、数字(1〜6)はソースコード内の警告位置を表す。たとえば、図4に示すソースコードVersion1には、WaおよびWbの2種類の警告が、それぞれソースコード内の6箇所に存在している。
また、図4において、ソースコードVersion1(以下、Ver1という)は変更前のソースコードを、ソースコードVersion2(以下、Ver2という)はVer1のModuleBの警告に対応する修正を行ったソースコードを、ソースコードVersion3(以下、Ver3という)はVer2のModuleAの警告に対応する修正を行ったソースコードを、それぞれ表している。
つづいて、図3を参照して、図4に示すVer3の記憶が行われた場合の、変更履歴にもとづく修正優先度付けの際の手順について説明する。
まず、ステップS81において、変更履歴優先度付け装置13は、構成管理DB11aに従ってソースコードを検索し、モジュールごとの変更の情報を取得する。この取得は、構成管理DB11aに記憶されているソースコード全てについて、それぞれのソースコードに関連付けられたモジュールごとの変更の情報を取得することにより行う。この結果、変更履歴優先度付け装置13は、モジュールごとの変更の情報の履歴を得ることができる。
次に、ステップS82において、変更履歴優先度付け装置13は、モジュールごとの変更の情報から、モジュールごとの変更回数の累計を計算する。たとえば図4に示すソースコードでは、ModuleAとModuleBの変更回数がそれぞれ1回であり、ModuleCは0回である。
次に、ステップS83において、変更履歴優先度付け装置13は、静的解析結果DB22に従ってVer3のソースコードを検索し、このVer3に対応する警告を取得して、変更回数の多いモジュールに付された警告に対する優先度を上げるべき旨の情報を修正優先度決定装置15に与える。
図5(a)は、図4に示したソースコードに対して変更回数にもとづく修正優先度付けを行った結果を示す説明図である。図4に示したソースコードの場合、変更履歴優先度付け装置13は、ModuleAに付された警告Wa-1、Wa−2およびWb−1と、ModuleBに付された警告Wa−3およびWb−4の優先度を、ModuleCに付された警告Wa−5、Wa−6、Wb−5およびWb−6の優先度よりも上げるべき旨の情報を修正優先度決定装置15に与える。
次に、ステップS84において、変更履歴優先度付け装置13は、モジュールごとの変更の情報から、同一変更回数のモジュールがあるかどうかを判定する。同一変更回数のモジュールがある場合はステップS85に進む。一方、ない場合は変更履歴にもとづく修正優先度付けの一連の手順は終了となり、図3のステップS9に進む。
次に、ステップS85において、変更履歴優先度付け装置13は、変更時期の新しいモジュールに付された警告の優先度をさらに上げるべき旨の情報を修正優先度決定装置15に与えて、変更履歴にもとづく修正優先度付けの一連の手順は終了となり、図3のステップS9に進む。
図5(b)は、図4に示したソースコードに対して変更履歴(変更回数および変更時期)にもとづく修正優先度付けを行った結果を示す説明図である。図4に示したソースコードでは、ModuleAとModuleBの変更回数は同じであるが、ModuleAの変更時期のほうが新しい。したがって、図4に示したソースコードの場合、変更履歴優先度付け装置13は、ModuleAに付された警告Wa-1、Wa−2およびWb−1の優先度を、ModuleBに付された警告Wa−3およびWb−4の優先度よりも上げるべき旨の情報を修正優先度決定装置15に与える。
この変更履歴にもとづく修正優先度付けの手順により、変更履歴(変更回数および変更時期)にもとづいて、修正優先度付けを行うことができる。この結果、更新回数が多いモジュールおよび変更時期の新しいモジュールに付された警告に対して高い優先度が与えられることになる。
次に、ステップS9において、不具合優先度付け装置14は、監視装置11bからソースコードの記憶が行われた旨の通知を受け、構成管理DB11aに従ってソースコードを検索し、このソースコードに不具合IDが関連付けられているかどうか調べる。不具合IDが関連付けられている場合は、ソースコードの変更が不具合に対応するためのものであったと判定し、ステップS10に進む。一方、不具合IDが関連付けられていない場合は、ステップS11に進む。
次に、ステップS10において、不具合優先度付け装置14は、構成管理DB11aに記憶されている不具合IDにもとづいて、どの警告から修正すべきかの優先度付けを行い、この優先度付けの結果を修正優先度決定装置15に与える。
図6は、図2のステップS10で不具合優先度付け装置14により実行される、図4に示すVer3の記憶が行われた場合の不具合情報にもとづく修正優先度付けの際の手順を示す、サブルーチンフローチャートである。図6において、Sに数字を付した符号は、フローチャートの各ステップを示す。
まず、ステップS101において、不具合優先度付け装置14は、構成管理DB11aに従ってソースコードを検索し、このソースコードの変更の情報から変更のあったモジュールに関する情報(モジュール名など)を取得する。そして、不具合優先度付け装置14は、静的解析結果DB22からこの変更のあったモジュールについて変更後と変更前のモジュールの警告を取得し、この変更のあったモジュールの警告に変更によって削除されたものがあるかどうか判定する。削除された警告がある場合はステップS102に進む。一方、削除された警告がない場合は不具合情報にもとづく修正優先度付けの一連の手順は終了となり、図3のステップS11に進む。
次に、ステップS102において、不具合優先度付け装置14は、削除された警告と同一種類の警告に対する優先度を上げるべき旨の情報を修正優先度決定装置15に与えて、不具合情報にもとづく修正優先度付けの一連の手順は終了となり、図3のステップS11に進む。
図7は、図4に示したソースコードの警告について、不具合情報にもとづく優先度付けを行った結果を示す説明図である。図4に示したように、Ver3に対し不具合IDが関連付けられて構成管理DB11aに記憶されているため、Ver2からVer3への変更(修正)は、不具合ID1の不具合に対応するための変更であることがわかる。また、ModuleAからは、この変更(修正)によって警告Wb−2が削除されている。このため、警告Wb−2は、実際に不具合に結びつく重要な警告であるといえる。
したがって、図4に示したソースコードの場合、不具合優先度付け装置14は、Wb−2と同一種類の警告に対する優先度を、つまりWb−4、Wb−5およびWb−6に対する優先度を、上げるべき旨の情報を修正優先度決定装置15に与える。
この不具合情報にもとづく修正優先度付けの手順により、実際の不具合と静的解析による警告を容易に結びつけることができ、不具合情報にもとづいて、修正優先度付けを行うことができる。この結果、不具合に結びつく警告に対して高い優先度が与えられることになる。
次に、ステップS11において、修正優先度決定装置15は、変更履歴優先度付け装置13および不具合優先度付け装置14から受けた優先度の情報にもとづき、総合的にどの警告から修正すべきかの優先度を決定し、この総合的な修正優先度を修正優先度DB16に記憶させる。
図8は、図4に示したソースコードに対して、不具合情報にもとづく優先度付け結果が優先されるように総合的な修正優先度付けを行った結果を示す説明図である。
不具合情報にもとづく修正優先度が高い警告から低い警告の順に、変更履歴にもとづく修正優先度を参照して、総合的な修正優先度を決定することにより、不具合情報にもとづく修正優先度付け結果を、変更履歴にもとづく修正優先度付け結果より優先することができる。
図8に示す例では、修正優先度決定装置15は、まず、不具合情報にもとづく修正優先度が高いもの、つまり警告種類Wbの警告Wb−1、Wb−4、Wb−5およびWb−6について、変更履歴にもとづく修正優先度を参照して、総合的な修正優先度を決定する。次に、警告種類Waの警告について、同様に総合的な修正優先度を決定する。
次に、ステップS12において、表示装置32は、修正優先度決定装置15から総合的な修正優先度付けを行った旨の情報を受け、修正優先度DB16から修正優先度付けされた警告のリストを取得し、ユーザに提示する。
以上の手順により、ソースコードに対する静的解析により検出された警告に対し、どの警告に対応する修正から行うべきかの優先度付けを行うことができる。
図1に示したソースコード修正優先度付けシステム10は、ソースコードに対する静的解析により検出された警告に対し、不具合情報にもとづいてどの警告に対応する修正から行うべきかの優先度付けを行う。このため、静的解析によって得られる警告と実際の不具合との関わりに応じた修正優先度を自動的にユーザに提示することができる。したがって、このソースコード修正優先度付けシステム10によれば、ユーザは、不具合に結びつく警告を容易に絞り込んで修正することができるため、非常に効率がよい。
また、このソースコード修正優先度付けシステム10は、ソースコードに対する静的解析により検出された警告に対し、ソースコードのモジュールごとの変更履歴にもとづいてどの警告に対応する修正から行うべきかの優先度付けを行う。このため、モジュールごとの変更回数(変更頻度)および変更時期に応じた修正優先度を自動的にユーザに提示することができる。一般に、変更回数が多く、変更時期の新しいモジュールは、ソースコード全体にとって、不具合を起こす可能性が高い危険なモジュールである場合が少なくない。したがって、このソースコード修正優先度付けシステム10によれば、ユーザは、より不具合を起こす可能性が高いモジュールから修正に取りかかることによって警告の絞込みを行うことができ、非常に効率がよい。
一般的な不具合管理では、警告箇所はソースコード内の位置で示されるが、不具合箇所や不具合の修正箇所は、ソースコード内の位置ではなく、ソースコードの機能の分類で記述されることが多い。このため、不具合箇所や不具合の修正箇所のソースコード内での位置は、大まかにしか把握できず、静的解析の警告と不具合を関連付けて絞りこみを行うことが困難であった。
しかし、このソースコード修正優先度付けシステム10は、不具合IDと、この不具合IDと関連付けられたソースコードの削除警告とを対応させる。このため、削除警告の位置から、不具合の修正箇所のソースコード内の位置を知ることができる。また、ソースコード修正優先度付けシステム10は、不具合に結びつく警告種類を特定する。したがって、このソースコード修正優先度付けシステム10によれば、この不具合に結びつく(不具合関連の)警告種類と同一種類の警告のソースコード内の位置から、修正すべき不具合関連の警告の位置を容易に知ることができる。
なお、本実施形態では、総合的な修正優先度付けを行う手順では、不具合情報にもとづく優先度付け結果が優先されるような手順を示したが(図8参照)、この手順は、変更履歴にもとづく優先度付け結果が優先されるような手順であってもかまわない。修正優先度決定装置15は、いずれの手順にも対応できるように構成する。
また、新たなソースコードの開発を行うにあたり、過去にこのソースコードと同一または類似のソースコードに対してソースコード修正優先度付けシステム10を適用していた場合は、この適用の結果得た総合的な修正優先度を新たなソースコードのデフォルトの修正優先度として利用してもよい。この場合、ユーザは、新たなソースコードの初回記憶時から警告の絞込みを行うことができる。
なお、本発明は上述した実施形態に限定されず、当業者に自明な種々の改変が可能である。たとえば、上述したソースコード修正優先度付けシステム10における構成の一部または全部を、コンピュータによりプログラムを実行させて機能させることもできる。
本発明に係るソースコード修正優先度付けシステムの一実施形態を示す概略的な全体構成図。 図1に示すソースコード修正優先度付けシステムにより、ソースコードに対する静的解析により検出された警告に対し、どの警告に対応する修正から行うべきかの優先度付けを行う際の手順を示すフローチャート。 図2のステップS8で変更履歴優先度付け装置により実行される、変更履歴にもとづく修正優先度付けの際の手順を示す、サブルーチンフローチャート。 警告に対応して行われるソースコードの修正の様子を概念的に示す説明図。 (a)は図4に示したソースコードに対して変更回数にもとづく修正優先度付けを行った結果を示す説明図、(b)は図4に示したソースコードに対して変更履歴(変更回数および変更時期)にもとづく修正優先度付けを行った結果を示す説明図。 図2のステップS10で不具合優先度付け装置により実行される、不具合情報にもとづく修正優先度付けの際の手順を示す、サブルーチンフローチャート。 図4に示したソースコードの警告について、不具合情報にもとづく優先度付けを行った結果を示す説明図。 図4に示したソースコードに対して、不具合情報にもとづく優先度付け結果が優先されるように総合的な修正優先度付けを行った結果を示す説明図。
符号の説明
10 ソースコード修正優先度付けシステム
11 構成管理部
11a 構成管理DB
11b 監視装置
11c 差分生成装置
12 不具合管理DB
13 変更履歴優先度付け装置
14 不具合優先度付け装置
15 修正優先度決定装置
16 修正優先度DB
21 静的解析装置
22 静的解析結果DB
31 入力装置
32 表示装置

Claims (7)

  1. 初回記憶時のソースコードから前回記憶時のソースコードまでと新たなソースコードとの全てのソースコードをモジュールごとに記憶する構成管理データベースと、
    前記構成管理データベースに記憶された前記新たなソースコードと前記前回記憶時のソースコードを比較しモジュールごとの変更の情報を作成し、このモジュールごとの変更の情報を前記新たなソースコードと関連付けて前記構成管理データベースに記憶させる差分作成装置と、
    前記新たなソースコードに対して静的解析を行い、不具合に繋がりやすい一定のパターンを検出した場合に、その旨を警告として出力する静的解析装置と、
    この静的解析装置の出力した警告を前記新たなソースコードと関連付けて記憶する静的解析結果データベースと、
    前記構成管理データベースからこの構成管理データベースに記憶されている全ての前記モジュールごとの変更の情報を、前記静的解析結果データベースから前記新たなソースコードの警告を、それぞれ取得し、前記全てのモジュールごとの変更の情報にもとづき前記初回記憶時のソースコードから前記新たなソースコードまでの前記モジュールごとの変更の累計回数を計算し、この変更の累計回数が多いモジュールに付された前記新たなソースコードの警告から修正すべき旨の優先度付けを行う変更履歴優先度付け装置と、
    を備えたことを特徴とするソースコード修正優先度付けシステム。
  2. 前記変更履歴優先度付け装置は、前記モジュールごとの変更の累計回数が同一回数のモジュールがある場合は、この同一回数のモジュールのうち変更時期が新しいモジュールに付された前記新たなソースコードの警告から修正すべき旨の優先度付けをさらに行うよう構成された請求項1記載のソースコード修正優先度付けシステム。
  3. 初回記憶時のソースコードから前回記憶時のソースコードまでと新たなソースコードとの全てのソースコードをモジュールごとに記憶し、この新たなソースコードが変更後のソースコードでありかつこの変更が不具合に対応するための変更であった場合にはこの不具合の不具合IDをこの新たなソースコードに関連付けてさらに記憶する構成管理データベースと、
    前記構成管理データベースに記憶された前記新たなソースコードと前記前回記憶時のソースコードを比較しモジュールごとの変更の情報を作成し、このモジュールごとの変更の情報を前記新たなソースコードと関連付けて前記構成管理データベースに記憶させる差分作成装置と、
    前記新たなソースコードに対して静的解析を行い、不具合に繋がりやすい一定のパターンを検出した場合に、その旨を警告として出力する静的解析装置と、
    この静的解析装置の出力した警告を前記新たなソースコードと関連付けて記憶する静的解析結果データベースと、
    前記構成管理データベースから前記新たなソースコードに関連付けられたモジュールごとの変更の情報および存在する場合は前記不具合IDを、前記静的解析結果データベースから前記新たなソースコードの警告および前記前回記憶時のソースコードの警告を、それぞれ取得し、前記不具合IDが存在しかつ前記前回記憶時のソースコードにあり前記新たなソースコードにない削除された警告がある場合は、この削除された警告と同一種類の前記新たなソースコードの警告から修正すべき旨の優先度付けを行う不具合優先度付け装置と、
    を備えたことを特徴とするソースコード修正優先度付けシステム。
  4. 初回記憶時のソースコードから前回記憶時のソースコードまでと新たなソースコードとの全てのソースコードをモジュールごとに記憶し、この新たなソースコードが変更後のソースコードでありかつこの変更が不具合に対応するための変更であった場合にはこの不具合の不具合IDをこの新たなソースコードに関連付けてさらに記憶する構成管理データベースと、
    前記構成管理データベースに記憶された前記新たなソースコードと前記前回記憶時のソースコードを比較しモジュールごとの変更の情報を作成し、このモジュールごとの変更の情報を前記新たなソースコードと関連付けて前記構成管理データベースに記憶させる差分作成装置と、
    前記新たなソースコードに対して静的解析を行い、不具合に繋がりやすい一定のパターンを検出した場合に、その旨を警告として出力する静的解析装置と、
    この静的解析装置の出力した警告を前記新たなソースコードと関連付けて記憶する静的解析結果データベースと、
    前記構成管理データベースからこの構成管理データベースに記憶されている全ての前記モジュールごとの変更の情報を、前記静的解析結果データベースから前記新たなソースコードの警告を、それぞれ取得し、前記全てのモジュールごとの変更の情報にもとづき前記初回記憶時のソースコードから前記新たなソースコードまでの前記モジュールごとの変更の累計回数を計算し、この変更の累計回数が同一回数のモジュールがない場合は、この変更の累計回数が多いモジュールに付された前記新たなソースコードの警告から修正すべき旨の優先度付けを行い、前記モジュールごとの変更の累計回数が同一回数のモジュールがある場合は、この同一回数のモジュールのうち変更時期が新しいモジュールに付された前記新たなソースコードの警告から修正すべき旨の優先度付けをさらに行う変更履歴優先度付け装置と、
    前記構成管理データベースから前記新たなソースコードに関連付けられたモジュールごとの変更の情報および存在する場合は前記不具合IDを、前記静的解析結果データベースから前記新たなソースコードの警告および前記前回記憶時のソースコードの警告を、それぞれ取得し、前記不具合IDが存在しかつ前記前回記憶時のソースコードにあり前記新たなソースコードにない削除された警告がある場合は、この削除された警告と同一種類の前記新たなソースコードの警告から修正すべき旨の優先度付けを行う不具合優先度付け装置と、
    前記変更履歴優先度付け装置から受けた優先度付けの結果と、前記不具合優先度付け装置から受けた優先度付けの結果とにもとづき、総合的にどの前記警告から修正すべきかの優先度付けを行う修正優先度決定装置と、
    を備えたことを特徴とするソースコード修正優先度付けシステム。
  5. 初回記憶時のソースコードから前回記憶時のソースコードまでと新たなソースコードとの全てのソースコードをモジュールごとに記憶するステップと、
    前記新たなソースコードと前記前回記憶時のソースコードを比較しモジュールごとの変更の情報を作成してこのモジュールごとの変更の情報を前記新たなソースコードと関連付けて記憶するステップと、
    前記新たなソースコードに対して静的解析を行い、不具合に繋がりやすい一定のパターンを検出した場合に、その旨を警告として出力するステップと、
    前記関連付けて記憶するステップで記憶した全ての前記モジュールごとの変更の情報にもとづき前記初回記憶時のソースコードから前記新たなソースコードまでの前記モジュールごとの変更の累計回数を計算するステップと、
    この変更の累計回数が多いモジュールに付された前記新たなソースコードの警告から修正すべき旨の優先度付けを行うステップと、
    を有することを特徴とするソースコード修正優先度付け方法。
  6. 前記優先度付けを行うステップは、前記モジュールごとの変更の累計回数が同一回数のモジュールがある場合、変更時期が新しいモジュールに付された前記新たなソースコードの警告から修正すべき旨の優先度付けを行うステップをさらに有する請求項5記載のソースコード修正優先度付け方法。
  7. 初回記憶時のソースコードから前回記憶時のソースコードまでと新たなソースコードとの全てのソースコードをモジュールごとに記憶するステップと、
    前記新たなソースコードが変更後のソースコードでありかつこの変更が不具合に対応するための変更であった場合にはこの不具合の不具合IDをこの新たなソースコードに関連付けて記憶するステップと、
    この新たなソースコードと前記前回記憶時のソースコードを比較しモジュールごとの変更の情報を作成してこのモジュールごとの変更の情報を前記新たなソースコードと関連付けて記憶するステップと、
    前記新たなソースコードに対して静的解析を行い、不具合に繋がりやすい一定のパターンを検出した場合に、その旨を警告として出力するステップと、
    前記不具合IDが存在しかつ前記前回記憶時のソースコードにあり前記新たなソースコードにない削除された警告がある場合は、この削除された警告と同一種類の前記新たなソースコードの警告から修正すべき旨の優先度付けを行うステップと、
    を有することを特徴とするソースコード修正優先度付け方法。
JP2006194349A 2006-07-14 2006-07-14 ソースコード修正優先度付けシステムおよびその優先度付け方法 Expired - Fee Related JP4886404B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006194349A JP4886404B2 (ja) 2006-07-14 2006-07-14 ソースコード修正優先度付けシステムおよびその優先度付け方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006194349A JP4886404B2 (ja) 2006-07-14 2006-07-14 ソースコード修正優先度付けシステムおよびその優先度付け方法

Publications (2)

Publication Number Publication Date
JP2008021244A true JP2008021244A (ja) 2008-01-31
JP4886404B2 JP4886404B2 (ja) 2012-02-29

Family

ID=39077114

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006194349A Expired - Fee Related JP4886404B2 (ja) 2006-07-14 2006-07-14 ソースコード修正優先度付けシステムおよびその優先度付け方法

Country Status (1)

Country Link
JP (1) JP4886404B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012248050A (ja) * 2011-05-30 2012-12-13 Nec Commun Syst Ltd 静的解析支援装置、静的解析支援方法、及びプログラム
JP2016071774A (ja) * 2014-10-01 2016-05-09 日本電気株式会社 検証支援装置、検証支援方法およびコンピュータプログラム
JP2018026135A (ja) * 2016-08-11 2018-02-15 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 静的解析警告の効率的な運用のための原因ポイント解析のためのシステム及び方法
JP2019090546A (ja) * 2017-11-10 2019-06-13 三菱電機株式会社 送風装置、空気調和装置および換気システム
US11281566B2 (en) 2018-07-23 2022-03-22 Mitsubishi Electric Corporation Scoring device, computer readable medium, and scoring method

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012248050A (ja) * 2011-05-30 2012-12-13 Nec Commun Syst Ltd 静的解析支援装置、静的解析支援方法、及びプログラム
JP2016071774A (ja) * 2014-10-01 2016-05-09 日本電気株式会社 検証支援装置、検証支援方法およびコンピュータプログラム
JP2018026135A (ja) * 2016-08-11 2018-02-15 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 静的解析警告の効率的な運用のための原因ポイント解析のためのシステム及び方法
JP2019090546A (ja) * 2017-11-10 2019-06-13 三菱電機株式会社 送風装置、空気調和装置および換気システム
US11281566B2 (en) 2018-07-23 2022-03-22 Mitsubishi Electric Corporation Scoring device, computer readable medium, and scoring method

Also Published As

Publication number Publication date
JP4886404B2 (ja) 2012-02-29

Similar Documents

Publication Publication Date Title
US7734574B2 (en) Intelligent system health indicator
CN110178121B (zh) 一种数据库的检测方法及其终端
CN108804215B (zh) 一种任务处理方法、装置以及电子设备
US10911447B2 (en) Application error fingerprinting
JP4886404B2 (ja) ソースコード修正優先度付けシステムおよびその優先度付け方法
CN110377481B (zh) 日志管理方法、装置、设备及存储介质
CN107562419B (zh) 软件开发支援方法及系统
US9621679B2 (en) Operation task managing apparatus and method
CN113448862B (zh) 软件版本测试方法、装置及计算机设备
JP2008250914A (ja) プログラム修正装置及び方法、並びにプログラム
CN111767218B (zh) 一种用于持续集成的自动化测试方法、设备及存储介质
WO2023179749A1 (zh) 组态数据处理系统、方法及电子设备
CN115757181B (zh) 一种代码检测方法、装置、设备及可读存储介质
KR20150124653A (ko) 프로세스 검증 기능이 구비된 전력 계통 감시 및 제어 시스템
JP5188421B2 (ja) ソースコード解析方法およびソースコード解析支援システム
JP6121828B2 (ja) 静的解析装置、静的解析方法、および、コンピュータ・プログラム
JP2020009815A (ja) 検査方法、検査システム及びプログラム
JP2005276040A (ja) デグレード確認検査方法、デグレード確認検査システム、およびそのためのプログラム
JP2015032195A (ja) 構造解析装置、構造解析方法及び構造解析プログラム
JP2006059266A (ja) 障害解析方法及びその装置
JP2018018197A (ja) ソースコード評価プログラム
US20120246516A1 (en) Method and device for testing the configuration of a computer system
WO2018101070A1 (ja) 異常判定装置、異常判定方法、及び異常判定プログラムが記録された記憶媒体
JP2002333992A (ja) 実行順序検査装置及びプログラム
JP2010055305A (ja) 診断項目登録システム、方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090427

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111026

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

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

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

Free format text: PAYMENT UNTIL: 20141216

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20141216

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees