JP2007122631A - プログラムの規約違反を判断する装置、およびその方法 - Google Patents

プログラムの規約違反を判断する装置、およびその方法 Download PDF

Info

Publication number
JP2007122631A
JP2007122631A JP2005317204A JP2005317204A JP2007122631A JP 2007122631 A JP2007122631 A JP 2007122631A JP 2005317204 A JP2005317204 A JP 2005317204A JP 2005317204 A JP2005317204 A JP 2005317204A JP 2007122631 A JP2007122631 A JP 2007122631A
Authority
JP
Japan
Prior art keywords
conversion
program
rules
violation
tree
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
JP2005317204A
Other languages
English (en)
Other versions
JP4144889B2 (ja
Inventor
Takeshi Kondo
豪 近藤
Shinichi Hirose
紳一 広瀬
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2005317204A priority Critical patent/JP4144889B2/ja
Priority to US11/555,144 priority patent/US7669192B2/en
Publication of JP2007122631A publication Critical patent/JP2007122631A/ja
Application granted granted Critical
Publication of JP4144889B2 publication Critical patent/JP4144889B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Library & Information Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】プログラムが規約に違反しているか否かを、これまでよりも効率的に判断する。
【解決手段】プログラムの規約違反を判断する装置であって、規約違反を判断する対象となる対象プログラムの入力を受け付ける入力部と、規約違反となるプログラムの構造を示す抽象構文木あるいはパターンを予め記憶している違反記憶部と、対象プログラムの抽象構文木を、予め定められた変換規則によって変換木に変換する変換部と、変換木の少なくとも一部が、規約違反となる抽象構文木に一致することを条件に、対象プログラムが規約に違反していると判断する判断部とを備える装置。
【選択図】図1

Description

本発明は、プログラムの規約違反を判断する装置、およびその方法に関する。特に、本発明は、プログラムの構造を示す抽象構文木を用いて、プログラムの規約違反を判断する装置、およびその方法に関する。
プログラムの開発現場においては、業務効率化や保守性向上を目的として、APIの使用方法などの規約が設けられている場合がある。プログラムがこの規約に違反しているかを判断するために、従来、規約違反となるプログラムの構造を示す抽象構文木のパターンを予め準備しておき、判断対象となるプログラムの抽象構文木と比較する技術が用いられている(例えば、非特許文献1を参照。)。
非特許文献2については後述する。
Rational Code Review http://codereview.lexma.ibm.com/ FindBugs http://findbugs.sourceforge.net
しかしながら、開発されるプログラムは様々であり、規約違反となる構造も様々となる。このため、規約違反となるプログラムの構造を示す抽象構文木を予め全て準備しておくことは極めて困難であり、また、誤検出や検出漏れなどが発生し易い。また、抽象構文木を用いることなくプログラムの欠陥を検出する技術も提案されている(例えば、非特許文献2を参照。)。この技術は、Java(登録商標)言語などのバイトコードを走査することによって制御フローやデータフローの解析を行う。そして、プログラムの中で実行され得ない部分などを探し出して利用者に通知する。しかしながら、この技術において、制御フローなどの解析処理を実装するためには専門的な知識が必要である。従って、この技術によっては、プログラム言語の専門家によって予め想定された欠陥しか検出できず、プロジェクトの担当者が、必要に応じて規約を追加・変更することはできない。
そこで本発明は、上記の課題を解決することのできる装置、方法、および、プログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
上記課題を解決するために、本発明においては、プログラムの規約違反を判断する装置であって、規約違反を判断する対象となる対象プログラムの入力を受け付ける入力部と、規約違反となるプログラムの構造を示す抽象構文木あるいはパターンからなる違反情報を予め記憶している違反記憶部と、前記対象プログラムの抽象構文木を、予め定められた変換規則によって変換木に変換する変換部と、前記変換木の少なくとも一部が、規約違反となる前記抽象構文木あるいはパターンに一致することを条件に、前記対象プログラムが規約に違反していると判断する判断部とを備える装置、当該装置によって規約違反を判断する方法、および、当該装置として情報処理装置を機能させるプログラムを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
本発明によれば、プログラムが規約に違反しているか否かを、これまでよりも効率的に判断することができる。
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、判断装置10の機能構成を示す。判断装置10は、プログラムの規約違反を効率的に判断することを目的とする。本実施例において判断する規約違反とは、プログラムの構文上の誤りのみならず、そのプログラムを開発しているプロジェクトや、そのプログラムが組み込まれるライブラリにおいて局所的に設けられた規約に対する違反を含む。このような規約によってプログラムを検査し、規約違反のプログラムを予め修正しておけば、プログラムの実行を効率化して、ソフトウェアの開発や運用の効率を高めることができる。
判断装置10は、入力部100と、変換規則記憶部105と、変換部110と、履歴記憶部120と、違反記憶部130と、判断部140と、通知部150と、修正部160とを備える。入力部100は、規約違反を判断する対象となる対象プログラムの入力を受け付ける。変換規則記憶部105は、予め定められた複数の変換規則を記憶している。変換部110は、複数の変換規則の中から1または複数の変換規則の組み合わせを複数選択し、それぞれの組み合わせに含まれる変換規則のそれぞれを対象プログラムの抽象構文木(AST:Abstract Syntax Tree)に順次適用することにより複数の変換木のそれぞれを生成する。
履歴記憶部120は、抽象構文木が変換部110によって変換される毎に、変換元の部分木と変換先の部分木とを対応付けて記憶する。違反記憶部130は、複数の規約のそれぞれに対応付けて、その規約に違反しているプログラムの構造を示す違反情報を予め記憶している。また、違反記憶部130は、複数の規約のそれぞれに対応付けて、その規約に違反しているプログラムをその規約に違反しない形式に変更する変更方法を記憶している。更に、違反記憶部130は、変換後の変換木を規約違反として誤検出するような変換規則および規約の組を、誤検出パターンとして記憶している。
判断部140は、生成された複数の変換木のうち少なくとも何れか一つの少なくとも一部の構造が、何れかの違反情報に一致することを条件に、対象プログラムが規約に反していると判断する。なお、判断部140は、対象プログラムの抽象構文木自体の構造が何れかの違反情報に一致した場合にも、対象プログラムが規約に違反していると判断する。また、判断部140は、変換された変換木の構造が違反情報に一致する場合であっても、その変換の変換規則およびその違反情報に対応する規約の組が誤検出パターンであることを条件に、対象プログラムが規約に違反していないと判断する。
通知部150は、対象プログラムが規約に反していると判断されたことを条件に、その規約に対応する変更方法を利用者に通知する。更に、通知部150は、対象プログラムが規約に違反していることを条件に、変換部110によって変換された変換木のうち、違反記憶部130に記憶されている違反情報とは構造が一致しない変換木によって表されるプログラムを利用者に通知してもよい。更にこの場合、修正部160は、対象プログラムが規約に違反しており、かつ、対象プログラムを示す抽象構文木から、通知されたその変換木への変換が等価変換であることを条件に、対象プログラムの少なくとも一部を変換木が示す構造に修正してもよい。修正された対象プログラムは、利用者に対して出力される。
図2は、変換規則記憶部105のデータ構造の一例を示す。変換規則記憶部105は、抽象構文木を変換木に変換する複数の変換規則のそれぞれを、その変換規則を識別する記号に対応付けて記憶している。以降、対象プログラムには、データベースに対するアクセス手順が記述されているものとする。より詳細には、対象プログラムは、SQL(Structured Query Language)のデータ操作言語(DML:Data Manipulation Language)によって記述されているものとする。また、各変換規則は、SQLで記述された対象プログラムの抽象構文木を、変換木に変換する規則であるものとする。
具体的には、変換規則tajは、データベースに含まれる3つのテーブルを結合する結合命令を、結合法則によって再構成する変換を示す。この変換規則は、例えば、第1項と第2項との間での演算結果と第3項とを演算することを示す抽象構文木を、第2項と第3項との間での演算結果と第1項とを演算することを示す変換木に変換する規則である。
また、変換規則tmjは、データベースのテーブルから行または列を選択し、選択された行または列を他のテーブルと結合するプログラムの抽象構文木を、データベースのテーブルを他のテーブルと結合し、結合されたテーブルの行または列を選択するプログラムの変換木に変換する規則である。
また、変換規則txjは、行を選択する条件を2つの選択命令に割り当てる変換を示す。例えば、変換規則txjは、データベースのテーブルから、第1の条件および第2の条件を満たす行を選択するプログラムの抽象構文木を、そのテーブルから第1の条件を満たす行を選択し、選択された結果得られる中間テーブルから、更に第2の条件を満たす行を選択するプログラムの変換木に変換する規則である。
ここで、好ましくは、変換規則記憶部105に記憶される複数の変換規則のそれぞれは、変換された変換木における当該変換規則によって変換された部分木の一部に対しては当該変換規則を更に適用することはできない変換規則である。即ち、変換規則の集合は、同一の変換規則を無限に適用して、変換木を無限に拡張することはできないように定められることが望ましい。これにより、変換部110による処理を有限時間で終了させ、判断装置10を現実的な用途に適用し易くすることができる。
一方で、変換規則が上記の性質を満たさない場合であっても、変換部110は、抽象構文木に対し複数の変換規則を順次適用し始めてから、予め定められた時間が経過し、または、予め定められた回数の適用が完了したことを条件に、変換規則の適用を終了してもよい。この方法によっても、変換部110による処理を有限時間で終了させることができる。更に好ましくは、変換部110は、既に生成された変換木と同一の変換木が生成された場合においては、その変換木に対しては変換規則の適用を完了する。これにより、規約違反判断に不要な重複した変換を防止し、処理の効率を高めることができる。
図3aは、違反記憶部130に記憶されている違反情報およびそれに対応する変更方法を示す。違反記憶部130は、違反情報を、その識別情報(ID)と、それに対応する変更方法とに対応付けて記憶している。違反情報(r)は、SQLのSELECT命令の列名リストにアスタリスク(*)を使用した場合に規約違反となることを示す。違反情報(r)は、SQLの副照会および結合のどちらでも記述できる場合に副照会で記述した場合に規約違反となることを示す。
違反情報(r)は、結合命令により結合されるテーブルの数が所定の数(例えば、4個)以上である場合に規約違反となることを示す。この規約違反を設けることによって、結合後のテーブルのデータサイズが膨大になることを防ぐことができる。なお、複数のテーブルを結合された場合であっても、これら複数のテーブルから特定の行を選択した後に、選択後のテーブルを更に他のテーブルと結合する場合には、結合後のテーブルのデータサイズが小さくなる場合が考えられる。このため、好ましくは、違反情報(r)は、SELECT命令を実行させることなく連続して結合する複数のテーブルの合計数が所定の数以上である場合に規約違反とするような情報であってもよい。
違反情報(r)は、あるテーブルに他のテーブルを外部結合してから、結合されたテーブルの中からレコードを選択するプログラムは規約違反になることを示す。また、違反情報(r)は、互いに等しい複数のテーブルを同一のキーで結合するプログラムは規約違反になることを示す。また、違反情報(r)は、最終結果に影響しないテーブルを生成するプログラムは規約違反になることを示す。
図3aの例において、違反情報は、その内容を示す文章として表される。実際には、違反情報は、規約を順守しない典型的なプログラムの抽象構文木そのものだけではなく,それを表すパターンであってもよい。そして、判断部140は、抽象構文木がそのパターンに一致するか否かを判断してもよい。より詳細には、このパターンは、所定のスクリプト言語やプログラム言語により記述されていてもよい。具体例として、このパターンは、XPath(XML Path Language)により記述されていてもよいし、Java(登録商標)言語により記述されていてもよい。
更に、違反記憶部130は、それぞれの違反情報に対応付けて、その違反情報によって示される規約違反を解消するためにプログラムを変更する変更方法を記憶している。例えば、違反記憶部130は、違反情報(r)に対応付けて、副照会および結合のどちらでも記述できるプログラムを、結合で記述するように変更する変更方法を記憶している。また、違反記憶部130は、違反情報(r)に対応付けて、外部結合してから選択するプログラムを、選択してから外部結合するプログラムに変更する変更方法を記憶している。さらに、違反記憶部130は、違反情報(r)に対応付けて、同一テーブルを同一キーで結合するプログラムを、単なるテーブルに変更する変更方法を記憶している。
この変更方法も、違反情報と同様、図3aにおいては、その内容を示す文章として表される。実際には、この変更方法は、対象プログラムを変換するための変換プログラムであってもよい。この変換プログラムは、各種のスクリプト言語やプログラム言語によって記述されていてもよい。
以上、変換規則および違反情報を例示したが、規約違反を漏れなく検出するためには、管理者は、規約違反を効率的に検出させるための多様な変換規則および違反情報を選択する必要がある。このような多様な変換規則の中には、違反情報に一致する構造を極めて生成し易いような変換規則が含まれる場合もある。このような場合に、違反情報に一致する構造を有している場合には全て規約違反と判断してしまうとすれば、違反情報や変換規則は極めて慎重に検討して定めなければならず、却って管理者に不便を与える場合がある。これに対し、本実施例において、違反記憶部130は、変換後の変換木を規約違反として誤検出するような変換規則および規約の組を、誤検出パターンとして更に記憶している。そして、このような誤検出パターンに一致する変換木が検出された場合には、規約違反の例外として規約違反でないものとして取り扱う。以下、このような誤検出パターンの具体例を述べる。
図3bは、違反記憶部130に記憶されている誤検出パターンを示す。違反記憶部130は、変換後の変換木を規約違反として誤検出するような変換規則および規約の組を、誤検出パターンとして更に記憶している。本図の例において、違反記憶部130は、誤検出パターンに該当する変換規則および規約の組を、誤検出パターンであることを示すフラグtrueに対応付けて記憶している。違反情報(r)および変換規則(tmj)の組は、誤検出パターンであることを示すフラグtrueに対応付けて記憶されている。このため、変換規則(tmj)によって変換された変換木が違反情報(r)に該当する場合であっても、判断部140は、対象プログラムを規約違反とは判断しない。その他の場合については、変換木が何れかの違反情報によって示される構造に一致するならば、規約違反として判断される。
図4は、誤検出を引き起こす変換の例を示す。図4において、集合410は、ある違反情報rに一致する構造を有する抽象構文木の集合を示す。また、集合400は、ある変換規則tの値域、つまりこの変換規則によって変換される変換木の集合を示す。また、集合420は、ある変換規則tの値域、つまりこの変換規則によって変換される変換木の集合を示す。抽象構文木qは、変換規則tによって、変換木qi+1に変換される。この変換木qi+1は、集合410に含まれ、即ち、違反情報に一致する構造を有する。また、抽象構文木pは、変換規則tによって、変換木pj+1に変換される。この変換木qi+1は、集合410に含まれる。
ここで、変換木qi+1および変換木pj+1は、何れも、集合410に含まれている。従って、規約違反を違反情報のみによって判断する場合においては、qの何れもが、規約違反のプログラムとして判断される。これに対して、管理者は、この変換木qi+1を、規約に違反している構造の例外として取り扱いたい場合においては、規約違反の例外を定めた誤検出パターンを定めることができる。即ち例えば、変換規則tおよび違反情報rの組を誤検出パターンとして定めておけば、判断部140は、変換木qi+1のみを規約違反でないと判断し、変換木pj+1については規約違反として判断することができる。
以上、図3bおよび図4に例示したように、規約違反に例外を定める誤検出パターンを設けることによって、規約違反となるプログラムを精度良く判断することができ、また、変換規則や違反情報に要求される厳密性が緩和され、変換規則や違反情報の作成を容易にすることができる。
図5は、対象プログラムが規約に違反しているか否かを判断する処理の流れを示す。入力部100は、規約違反を判断する対象となる対象プログラムの入力を受け付ける(S500)。変換部110は、複数の変換規則の中から1または複数の変換規則の組み合わせを複数選択し、それぞれの組み合わせに含まれる変換規則のそれぞれを対象プログラムの抽象構文木に順次適用することにより複数の変換木のそれぞれを生成する(S510)。履歴記憶部120は、抽象構文木が変換部110によって変換される毎に、変換元の部分木と変換先の部分木とを対応付けて記憶する(S520)。
判断部140は、生成された複数の変換木のうち少なくとも何れか一つの少なくとも一部の構造が、何れかの違反情報に一致するか否かを判断する(S530)。一致することを条件に(S530:YES)、通知部150は、対象プログラムが規約に違反している旨を利用者に通知する(S540)。更に、通知部150は、その規約に対応する変更方法を利用者に通知してもよい。更に、通知部150は、変換部110によって変換された変換木のうち、違反記憶部130に記憶されている違反情報とは構造が一致しない変換木によって表されるプログラムを利用者に通知してもよい。更に好ましくは、通知部150は、変換されたこれらの変換木によって表されるプログラムのうち、その変換木に含まれるノードの数が最も少ないプログラムを通知してもよい。これにより、利用者は、規約に違反しているプログラムの修正方法を知ることができ、更に、最もシンプルな修正方法を知ることができる。
更にこの場合、修正部160は、その対象プログラムの自動変更が可能か否かを判断してもよい(S550)。例えば、修正部160は、対象プログラムが規約に違反しており、かつ、対象プログラムを示す抽象構文木から、通知されたその変換木への変換が等価変換であることを条件に、対象プログラムの自動変更が可能と判断してもよい。更に、対象プログラムの自動変更は、利用者の同意を条件とすることが望ましい。対象プログラムの自動変更が可能なことを条件に(S550:YES)、修正部160は、対象プログラムの少なくとも一部を、通知された変換木が示す構造に修正する(S560)。修正された対象プログラムは、利用者に対して出力される。
続いて、図6および図7を用いて、対象プログラムの規約違反が検出される具体例を説明する。
図6は、対象プログラムの一例を示す。この対象プログラムは、SQLで記述されており、データベースに対するアクセス手順を示している。本実施例においては、この対象プログラムの第3行目から第12行目までの部分を例に、規約違反の判断方法を説明する。対象プログラムのこの部分は、対象プログラムの抽象構文木においてはある部分木sとして表される。第6行目から第7行目のプログラムは、COMPASHRPROFILEというテーブルと、TM_CR_EMPLOYEE_INFOというテーブルとを、所定の条件で左結合する処理を示す。このテーブルは、更に、TM_CR_BO_PRESENT_INFOというテーブルと内部結合される。
第3行目および第4行目のプログラムは、この内部結合によって生成されたテーブルから所定の行または列を選択する処理を示す。また、第12行目から第13行目までのプログラムは、この選択によって生成されたテーブルを、更に、COMPASHRPROFILEというテーブルと内部結合する処理を示す。
実際に、図6の対象プログラムに対して、変換規則tajmjを順次適用することにより、変換部110は、19種類の変換木を生成した。これらのうちの幾つかは、以下の様なSQL文を含む。
COMPASHRPROFILE AS JT INNER JOIN COMPASHRPROFILE AS HR2
ON JT.USERID = HR2.USERID
このSQL文は、共に、COMPASHRPROFILEというテーブルを、同一のUSERIDというキーでアクセスしている。このため、この対象プログラムの抽象構文木は、違反情報rによって示される構造に一致する。従って、図6の対象プログラムは、規約違反と判断される。
図7は、対象プログラムの抽象構文木を変換した変換木によって表されるプログラムの一例を示す。図7のプログラムは、図6の第3〜4行目のSELECT命令、および、図6の第12行目の内部結合命令の組に対し、上述の変換規則tmjを適用したプログラムを示す。即ち、図6ではSELECT命令の実行後に内部結合命令を実行していたのに対し、図7においては内部結合命令の実行後にSELECT命令が実行される。
図7のプログラムにおいては、第6行目において、テーブルHR1およびテーブルEMが結合の対象となる。また、第9行目においてテーブルBOが結合の対象となる。また、第12行目において、テーブルHR2が結合の対象となる。そして、これら複数の結合処理は、SELECT命令を実行することなく連続して行われる。従って、このプログラムの抽象構文木は、図3aに示す違反情報(r)に違反しているとも考えられる。しかしながら、違反情報(r)および変換規則tmjの組は、図3bに示す誤検出パターンに該当する。このため、判断部140は、図7のプログラムが示す変換木によっては、対象プログラムを規約違反とは判断しない。
また、図7の第6行目から第12行目のプログラムが示す部分木は、他の変換規則によって、部分木sからs19までのそれぞれに変換される。このように、規約違反として誤検出された変換木が、次の変換規則によって更に変換された場合においては、既に誤検出された変換木によって、次の変換結果が規約違反と判断されないようにされなければならない。このため、判断部140は、当該次の変換による変換木の構造が違反情報に一致する場合であっても、当該次の変換による変換の対象となる部分木が誤検出された部分木と同一であれば、引き続き誤検出であるとして取り扱う。つまり、判断部140は、当該次の変換による変換の対象となる部分木が誤検出された部分木とは異なることを更に条件として、対象プログラムが規約に違反していると判断する。この条件判断は、履歴記憶部120に記憶された、変換前の変換木および変換後の変換木を比較することによって実現される。即ち例えば、判断部140は、一旦誤検出パターンとして判断された部分木が、当該次の変換によって変換されていない場合においては、対象プログラムを規約違反としては判断しない。これにより、誤検出パターンが一旦検出された場合においても、続いて適用される変換規則によって生じた規約違反を適切に判断することができる。
以上、図6および図7において例示したように、本実施例における判断装置10は、実際に記述されたプログラムを対象として、プロジェクト管理者などによって定められた規約違反を適切に判断することが確かめられた。また、この判断に要した時間は1秒未満であり、実用上充分な処理速度であることが確かめられた。
図8は、判断装置10として機能する情報処理装置500のハードウェア構成の一例を示す。情報処理装置500は、ホストコントローラ1082により相互に接続されるCPU1000、RAM1020、及びグラフィックコントローラ1075を有するCPU周辺部と、入出力コントローラ1084によりホストコントローラ1082に接続される通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を有する入出力部と、入出力コントローラ1084に接続されるROM1010、フレキシブルディスクドライブ1050、及び入出力チップ1070を有するレガシー入出力部とを備える。
ホストコントローラ1082は、RAM1020と、高い転送レートでRAM1020をアクセスするCPU1000及びグラフィックコントローラ1075とを接続する。CPU1000は、ROM1010及びRAM1020に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ1075は、CPU1000等がRAM1020内に設けたフレームバッファ上に生成する画像データを取得し、表示装置1080上に表示させる。これに代えて、グラフィックコントローラ1075は、CPU1000等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
入出力コントローラ1084は、ホストコントローラ1082と、比較的高速な入出力装置である通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を接続する。通信インターフェイス1030は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ1040は、情報処理装置500が使用するプログラム及びデータを格納する。CD−ROMドライブ1060は、CD−ROM1095からプログラム又はデータを読み取り、RAM1020又はハードディスクドライブ1040に提供する。
また、入出力コントローラ1084には、ROM1010と、フレキシブルディスクドライブ1050や入出力チップ1070等の比較的低速な入出力装置とが接続される。ROM1010は、情報処理装置500の起動時にCPU1000が実行するブートプログラムや、情報処理装置500のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ1050は、フレキシブルディスク1090からプログラム又はデータを読み取り、入出力チップ1070を介してRAM1020またはハードディスクドライブ1040に提供する。入出力チップ1070は、フレキシブルディスク1090や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
情報処理装置500に提供されるプログラムは、フレキシブルディスク1090、CD−ROM1095、又はICカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ1070及び/又は入出力コントローラ1084を介して、記録媒体から読み出され情報処理装置500にインストールされて実行される。プログラムは、例えば、本発明に係る判断プログラムであり、この判断プログラムが情報処理装置500等に働きかけて行わせる動作は、図1から図7において説明した判断装置10における動作と同一であるから、説明を省略する。
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク1090、CD−ROM1095の他に、DVDやPD等の光学記録媒体、MD等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムを情報処理装置500に提供してもよい。
以上、本実施例における判断装置10によれば、対象プログラムについて、これまで検出の難しかった規約違反を効率的に判断することができる。本実施例で判断する規約違反とは、プログラムの構文上の誤りのみならず、そのプログラムを開発しているプロジェクトや、そのプログラムが組み込まれるライブラリにおいて局所的に設けられた規約に対する違反を含む。このような規約によってプログラムを検査し、規約違反のプログラムを予め修正しておけば、プログラムの実行を効率化して、ソフトウェア開発や運用の効率を高めることができる。更に、誤検出パターンという規約違反の例外を定めることができるようにすることで、規約違反を判断する精度を高め、また、規約や変換規則の効率的に作成することができる。更に、誤検出パターンが一旦検出された場合には、そのパターンに一致する部分木は誤検出パターンとして判断し続けることにより、続いて適用される変換規則によって生じた規約違反を適切に判断することができる。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
図1は、判断装置10の機能構成を示す。 図2は、変換規則記憶部105のデータ構造の一例を示す。 図3aは、違反記憶部130に記憶されている違反情報およびそれに対応する変更方法を示す。 図3bは、違反記憶部130に記憶されている誤検出パターンを示す。 図4は、誤検出を引き起こす変換の例を示す。 図5は、対象プログラムが規約に違反しているか否かを判断する処理の流れを示す。 図6は、対象プログラムの一例を示す。 図7は、対象プログラムの抽象構文木を変換した変換木によって表されるプログラムの一例を示す。 図8は、判断装置10として機能する情報処理装置500のハードウェア構成の一例を示す。
符号の説明
10 判断装置
100 入力部
105 変換規則記憶部
110 変換部
120 履歴記憶部
130 違反記憶部
140 判断部
150 通知部
160 修正部
400 集合
410 集合
420 集合
500 情報処理装置

Claims (14)

  1. プログラムの規約違反を判断する装置であって、
    規約違反を判断する対象となる対象プログラムの入力を受け付ける入力部と、
    規約違反となるプログラムの構造を示す違反情報を予め記憶している違反記憶部と、
    前記対象プログラムの抽象構文木を、予め定められた変換規則によって変換木に変換する変換部と、
    前記変換木の少なくとも一部の構造が、前記違反情報に一致することを条件に、前記対象プログラムが規約に違反していると判断する判断部と
    を備える装置。
  2. 前記違反記憶部は、複数の規約のそれぞれについて、当該規約に違反しているプログラムの構造を示す違反情報を記憶しており、
    前記変換部は、複数の前記変換規則の中から1または複数の変換規則の組み合わせを複数選択し、それぞれの前記組み合わせに含まれる変換規則のそれぞれを前記対象プログラムの抽象構文木に順次適用することにより複数の変換木のそれぞれを生成し、
    前記判断部は、前記複数の変換木のうち少なくとも何れか1つの少なくとも一部の構造が、何れかの前記違反情報に一致することを条件に、前記対象プログラムが規約に違反していると判断する
    請求項1に記載の装置。
  3. 前記複数の変換規則のそれぞれは、変換された変換木における当該変換規則によって変換された部分木の一部に対しては当該変換規則を更に適用することはできない変換規則である
    請求項2に記載の装置。
  4. 少なくとも1つの前記変換規則は、第1項と第2項との間での演算結果と第3項とを演算することを示す抽象構文木を、第2項と第3項との間での演算結果と第1項とを演算することを示す変換木に変換する変換規則である
    請求項2に記載の装置。
  5. 少なくとも1つの前記変換規則は、データベースのテーブルから行または列を選択し、選択された行または列を他のテーブルと結合するプログラムの抽象構文木を、データベースのテーブルを他のテーブルと結合し、結合されたテーブルから行または列を選択するプログラムの変換木に変換する変換規則である
    請求項2に記載の装置。
  6. 少なくとも1つの前記変換規則は、データベースのテーブルから、第1の条件および第2の条件を満たす行または列を選択するプログラムの抽象構文木を、前記テーブルから、前記第1の条件を満たす行または列を選択し、選択された結果得られる中間テーブルから、更に前記第2の条件を満たす行または列を選択するプログラムの変換木に変換する変換規則である
    請求項2に記載の装置。
  7. 前記違反記憶部は、複数の規約のそれぞれに対応付けて、当該規約に違反しているプログラムの構造を示す違反情報と、更に、当該プログラムを当該規約に違反しない形式に変更する方法である変更方法を記憶しており、
    前記対象プログラムが規約に違反していると判断されたことを条件に、当該規約に対応する前記変更方法を利用者に通知する通知部
    を更に備える請求項2に記載の装置。
  8. 前記対象プログラムが規約に違反していることを条件に、前記変換部によって変換された変換木によって表されるプログラムのうち、前記違反記憶部に記憶されている違反情報とは構造が一致しない変換木によって表されるプログラムを利用者に通知する通知部
    を更に備える請求項2に記載の装置。
  9. 前記通知部は、複数の前記変換木によって表されるプログラムのうち、当該変換木に含まれるノードの数が最も少ないプログラムを利用者に通知する
    請求項8に記載の装置。
  10. 前記対象プログラムが規約に違反しており、かつ、前記対象プログラムを示す抽象構文木から、通知された前記プログラムの変換木への変換が等価変換であることを条件に、前記対象プログラムの少なくとも一部を前記変換木の構造によって修正する修正部
    を更に備える請求項8に記載の装置。
  11. 前記違反記憶部は、変換後の変換木を規約違反として誤検出するような変換規則および規約の組を、誤検出パターンとして更に記憶しており、
    前記判断部は、変換された変換木の構造が前記違反情報に一致する場合であっても、当該変換の変換規則および当該違反情報に対応する規約の組が前記誤検出パターンであることを条件に、前記対象プログラムが規約に違反していないと判断する
    請求項2に記載の装置。
  12. 抽象構文木が前記変換部によって変換される毎に、変換元の部分木と変換先の部分木とを対応付けて記憶する履歴記憶部を更に備え、
    前記判断部は、規約違反として誤検出された変換木が、他の変換規則によって更に変換された場合において、当該変換による変換の対象となる部分木が誤検出された部分木とは異なることを更に条件として、前記対象プログラムが規約に違反していると判断する
    請求項11に記載の装置。
  13. プログラムの規約違反を判断する装置として、情報処理装置を機能させる判断プログラムであって、
    前記情報処理装置を、
    規約違反を判断する対象となる対象プログラムの入力を受け付ける入力部と、
    規約違反となるプログラムの構造を示す違反情報を予め記憶している違反記憶部と、
    前記対象プログラムの抽象構文木を、予め定められた変換規則によって変換木に変換する変換部と、
    前記変換木の少なくとも一部の構造が前記違反情報に一致することを条件に、前記対象プログラムが規約に違反していると判断する判断部と
    して機能させる判断プログラム。
  14. プログラムの規約違反を判断する方法であって、
    規約違反を判断する対象となる対象プログラムの入力を受け付ける段階と、
    規約違反となるプログラムの構造を示す違反情報を予め記憶している段階と、
    前記対象プログラムの抽象構文木を、予め定められた変換規則によって変換木に変換する段階と、
    前記変換木の少なくとも一部の構造が前記違反情報に一致することを条件に、前記対象プログラムが規約に違反していると判断する段階と
    を備える方法。
JP2005317204A 2005-10-31 2005-10-31 プログラムの規約違反を判断する装置、およびその方法 Expired - Fee Related JP4144889B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2005317204A JP4144889B2 (ja) 2005-10-31 2005-10-31 プログラムの規約違反を判断する装置、およびその方法
US11/555,144 US7669192B2 (en) 2005-10-31 2006-10-31 Method to find a violation of a coding rule in program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005317204A JP4144889B2 (ja) 2005-10-31 2005-10-31 プログラムの規約違反を判断する装置、およびその方法

Publications (2)

Publication Number Publication Date
JP2007122631A true JP2007122631A (ja) 2007-05-17
JP4144889B2 JP4144889B2 (ja) 2008-09-03

Family

ID=38146369

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005317204A Expired - Fee Related JP4144889B2 (ja) 2005-10-31 2005-10-31 プログラムの規約違反を判断する装置、およびその方法

Country Status (2)

Country Link
US (1) US7669192B2 (ja)
JP (1) JP4144889B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009259141A (ja) * 2008-04-21 2009-11-05 Jfe Steel Corp アプリケーションプログラム作成支援装置、データベースシステム、アプリケーションプログラム作成支援方法およびそのプログラム
JP2010140407A (ja) * 2008-12-15 2010-06-24 Nomura Research Institute Ltd ソースコード検査装置
JP2019160284A (ja) * 2018-03-08 2019-09-19 富士通株式会社 抽象コードグラフを用いたソフトウェアの表現
WO2020241570A1 (ja) * 2019-05-31 2020-12-03 コネクトフリー株式会社 ソフトウェア開発装置およびソフトウェア開発プログラム

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9146712B2 (en) * 2013-09-18 2015-09-29 Vmware, Inc. Extensible code auto-fix framework based on XML query languages
US10733075B2 (en) * 2018-08-22 2020-08-04 Fujitsu Limited Data-driven synthesis of fix patterns
CN110413646B (zh) * 2019-06-28 2023-05-12 创新先进技术有限公司 基于预设规则筛选用户的方法和装置
CN110609693B (zh) * 2019-08-15 2023-05-26 深圳赛安特技术服务有限公司 基于数据标准化的代码更新方法、装置及终端设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10187450A (ja) 1996-11-07 1998-07-21 Fujitsu Ltd オブジェクト指向プログラム自動生成装置,自動生成方法およびそのプログラム記憶媒体
US7627861B2 (en) * 2003-12-05 2009-12-01 The University Of North Carolina Methods, systems, and computer program products for identifying computer program source code constructs
US7624304B2 (en) * 2004-10-07 2009-11-24 Microsoft Corporation Defect detection for integers
US7849509B2 (en) * 2005-10-07 2010-12-07 Microsoft Corporation Detection of security vulnerabilities in computer programs

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009259141A (ja) * 2008-04-21 2009-11-05 Jfe Steel Corp アプリケーションプログラム作成支援装置、データベースシステム、アプリケーションプログラム作成支援方法およびそのプログラム
JP2010140407A (ja) * 2008-12-15 2010-06-24 Nomura Research Institute Ltd ソースコード検査装置
JP2019160284A (ja) * 2018-03-08 2019-09-19 富士通株式会社 抽象コードグラフを用いたソフトウェアの表現
JP7172435B2 (ja) 2018-03-08 2022-11-16 富士通株式会社 抽象コードグラフを用いたソフトウェアの表現
WO2020241570A1 (ja) * 2019-05-31 2020-12-03 コネクトフリー株式会社 ソフトウェア開発装置およびソフトウェア開発プログラム
JP2020197866A (ja) * 2019-05-31 2020-12-10 コネクトフリー株式会社 ソフトウェア開発装置およびソフトウェア開発プログラム
JP7473145B2 (ja) 2019-05-31 2024-04-23 コネクトフリー株式会社 ソフトウェア開発装置およびソフトウェア開発プログラム
US12045608B2 (en) 2019-05-31 2024-07-23 Connectfree Corporation Software development device and software development program

Also Published As

Publication number Publication date
US20070169020A1 (en) 2007-07-19
JP4144889B2 (ja) 2008-09-03
US7669192B2 (en) 2010-02-23

Similar Documents

Publication Publication Date Title
JP4144889B2 (ja) プログラムの規約違反を判断する装置、およびその方法
KR101755365B1 (ko) 레코드 포맷 정보의 관리
JP4889204B2 (ja) シェルに対するコマンドの入力パラメータを処理するための媒体およびシステム
JP5085022B2 (ja) 継ぎ目なくオブジェクトを比較するシステムおよび方法
US20170279691A1 (en) System and Method for Validating Documentation of Representational State Transfer (Rest) Services
CN112035359B (zh) 程序测试方法、装置、电子设备及存储介质
US8938383B2 (en) Enabling test script play back in different locales
JP5047621B2 (ja) 対話環境における構文への制約を入手し適用する機構
JP2007519073A (ja) 管理用ツール環境
JP2007094775A (ja) 意味解析装置、意味解析方法および意味解析プログラム
JP2007509411A (ja) データ駆動型コマンドライン出力を提供する機構
US8275779B2 (en) Data tranformations for applications supporting different data formats
JP2007509407A (ja) コマンドライン命令への拡張機能を提供する機構
WO2011151931A1 (ja) アプリケーションの解析方法、解析システム及び記録媒体
US7530075B2 (en) System and method for employing object-based pipelines
JP2007510203A (ja) 部分的に未解決の入力を分析する機構
US8489537B2 (en) Segmenting sequential data with a finite state machine
US7849404B2 (en) System for determining whether screen displayed by program satisfies specification
JP2011113298A (ja) 流用ソースコード解析システム及びプログラム並びに記録媒体
JP2005352861A (ja) 電子データ処理方法、電子データ処理装置、および、電子データ処理プログラム
JP5103338B2 (ja) 電子ファイルの解析技術
JP6419902B1 (ja) プログラム比較方法、プログラム比較装置およびプログラム比較プログラム
WO2014064746A1 (ja) データ操作命令生成装置、データ操作命令生成システム、データ操作命令生成方法およびデータ操作命令生成プログラム
JP2006318104A (ja) ソースコード検閲方法
US20100185635A1 (en) Data tranformations between a source application and service-oriented target applications supporting different data formats

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080118

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20080130

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20080227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080304

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080516

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20080612

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080616

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

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees