条件付コンパイル用識別子の管理方法、コンピュータプログラムの作成支援装置及びプログラム
【課題】
条件付コンパイルの識別子のスペルミス、設定ミスを低減する。
【解決手段】
コンピュータが、プログラムソースコードを走査し、少なくとも、条件付コンパイル用のプリプロセッサ命令に後続して用いられている識別子とその出現回数と、識別子が定義されているか否かを示した定義状態と、を併記した識別子一覧を生成表示する。ユーザは、識別子一覧を参照して、出現回数と定義状態を確認し、必要に応じてソースコードの修正作業を行う。更に、ユーザが前記識別子一覧から任意の識別子を選択することによって、コンピュータは、条件付コンパイル用の識別子の設定を受け付けて、条件付コンパイルのコマンドを生成する。
条件付コンパイルの識別子のスペルミス、設定ミスを低減する。
【解決手段】
コンピュータが、プログラムソースコードを走査し、少なくとも、条件付コンパイル用のプリプロセッサ命令に後続して用いられている識別子とその出現回数と、識別子が定義されているか否かを示した定義状態と、を併記した識別子一覧を生成表示する。ユーザは、識別子一覧を参照して、出現回数と定義状態を確認し、必要に応じてソースコードの修正作業を行う。更に、ユーザが前記識別子一覧から任意の識別子を選択することによって、コンピュータは、条件付コンパイル用の識別子の設定を受け付けて、条件付コンパイルのコマンドを生成する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムソースコード(以下、ソースコードという)に含まれる条件付コンパイル用識別子の管理方法、コンピュータプログラムの作成支援装置及びプログラムに関し、特に、識別子のスペルミスを検出して条件付コンパイル(Conditional Compilation)を確実に行うことのできる識別子の管理方法、コンピュータプログラムの作成支援装置及びプログラムに関する。
【背景技術】
【0002】
近年、アプリケーションが多機能化・多品種化しているため、それに比例して、プリプロセッサ命令(コンパイル前にソースプログラムに対して行われる前処理命令であり、文字列の置き換えやプログラムの有効/無効部分の指定が可能である)を用いた前処理が多用され、また、ソースコードも大規模かつ複雑になっている。またそのため、デバッグ作業は複雑になり時間がかかっているのが現状である。特許文献1には、ソースコード中のプリプロセッサ命令を解析し、その結果をエディタ画面に視覚的に表示する機能を備えて、プリプロセッサ命令の間違いを検出できるようにしたプログラム・エディタが紹介されている。
【0003】
また、特許文献2、3には、ソースコード入力作業中に、入力ミスの可能性のある箇所を強調表示することのできるエディタが紹介されており、特許文献4には、プログラム中で使用されている変数の整合性チェックを行う変数データ処理装置が紹介されている。
【0004】
図15は、従来のプログラム作成手順を示したフローチャートである。図15を参照すると、まずエディタなどを用いてプログラムの作成・編集を行い(ステップ1−1)、必要な箇所に条件付きコンパイルの設定が手動で行われる(ステップ1−2)。この条件付きコンパイルの設定は、機種依存性がからむ場合やデバッグ時に多用され、プログラマがソースコードや設計書から判断して、必要な箇所に条件付コンパイル用プリプロセッサとその識別子を設定することによって行われる。
【0005】
続いて、コンパイルが行われる(ステップ1−3、1−4)。図16は、条件付きコンパイルのコマンド例であり、この場合、ソースコード中の条件付きコンパイル用プリプロセッサ命令に後続して用いられている識別子”DEBUG”、”TEST”が有効化され、例えば、ソースコード中の#ifdef DEBUGの行から、#endifまでの部分がコンパイルの対象となる。このコンパイルの過程で、エラーのチェックが行われるが、ここで文法上のエラーがある場合は、コンパイラがエラーを表示する(プリプロセッサ命令自体の入力ミス等の文法エラーも含む)。そして、エラーと表示された場合は、再びプログラムの修正に移る(ステップ1−1)。一方、エラーが無い場合にはデバッグ作業に移る。
【0006】
次のデバッグ作業では、さまざまな評価を行い、プログラムが仕様書通りに動いているか評価を行う(ステップ1−5、1−6)。ここで、誤作動に気が付けば、様々なツールを使用したり、実際にソースを読むことにより、プログラムの論理的なエラーなどを発見して、ソースコードの修正に移る(ステップ1−1)。エラーが発見されなかった場合は、プログラムの作成は終了になる。
【0007】
【特許文献1】特開2000−148508号公報
【特許文献2】特開平5−341976号公報
【特許文献3】特開平11−73305号公報
【特許文献4】特開平7−78072号公報
【発明の開示】
【発明が解決しようとする課題】
【0008】
条件付コンパイルで用いるプリプロセッサ命令に後続する「識別子」として、任意の文字を定義可能であって大変便利であるが、その反面、プリプロセッサ命令を含む行は文法的に独立したものと取扱われるため、以下のような負担が生じていたといえる。第1の問題点は、コンパイル時のエラーチェックでは、たとえ入力ミスであってもそのような識別子が設定されているものと判断され検出できないことにある。例えば、図16のように、コンパイルコマンドで「DEBUG」と指定したのに対し、ソースコードでは識別子「DEBAG」(入力ミス)が定義されていたとしても、コンパイラは誤りとせず識別子「DEBUG」の条件付きコンパイルを行う。このように、識別子の入力ミスは、デバッグ作業でしか発見することができず、条件付きコンパイルの識別子のスペルミスの不具合が発生すると、デバッグ作業を強いられることになり、大規模かつ複雑なソースコードではかなりの負担となっている。
【0009】
第2の問題点は、条件付きコンパイルの識別子を指定する際に、多くの識別子の設定を手動で行う必要があるため、同一の識別子が指定されるべきところ、別の識別子が設定されるなど、見落としや指定間違いが発生する危険性が常にあったことにある。大規模なソースコードは、複数の人間がプログラミングしており、更には、一つのソースコードで多くの品種・バージョンに対応するため、複雑に条件付きコンパイルのプリプロセッサ命令が指定されている場合もある。また、ソースコードが大規模で複雑であれば、条件付きコンパイルが正しく設定できているかどうかを検証することも困難となり、プログラム開発作業の効率化を阻害する要因ともなっている。
【0010】
この点、特許文献1は、プリプロセッサ命令の解釈結果を編集画面上に視覚的に表示するものであるから、デバッグ作業の軽減にはなったとしても、大規模かつ複雑なソースコードでは上記各問題点を根本的に解決するものとはならない。また、特許文献2、3の技術をもってしても、条件付コンパイル用の識別子の場合、何をもって入力ミスと判定するかどうかも一義的でなく適用が困難である。また、特許文献4に記載の技術も、インタプリタ系言語に特有の変数の整合性をチェックするためのものであり、この種の問題は、コンパイラ系言語では、コンパイル時に検出することが可能となっているものである。
【課題を解決するための手段】
【0011】
本発明の第1の視点によれば、少なくともコンパイルする前の段階で、コンピュータが、プログラムソースコードを走査して、少なくとも、条件付コンパイル用のプリプロセッサ命令に後続して用いられている識別子とその出現回数と、識別子が定義されているか否かを示した定義状態と、を併記した識別子一覧を生成表示し、ユーザに注意を喚起することのできる条件付コンパイル用の識別子の管理方法が提供される。
【0012】
本発明の第2の視点によれば、上記した条件付コンパイル用の識別子の管理方法において、少なくともコンパイルコマンド入力時に、前記コンピュータが、前記識別子一覧からユーザによって選択された識別子を、条件付コンパイル用の識別子として設定すること、を特徴とする条件付コンパイル用の識別子の管理方法が提供される。
【0013】
本発明の第3の視点によれば、上記したソースコード中の識別子の管理方法を実施するためのコンピュータプログラムの作成支援装置、及び、コンピュータに上記ソースコード中の識別子の管理方法を実施するためのコンピュータ・プログラム(チェッカ・プログラム、プログラム作成支援プログラム)が提供される。
【発明の効果】
【0014】
本発明によれば、少なくとも出現回数と定義状態を併記した識別子一覧を参照して、識別子のスペルミスや不整合を発見することが可能となる。
【発明を実施するための最良の形態】
【0015】
続いて、本発明を統合開発環境(Integrated Development Environment)に適用した本発明の好適な実施の形態について、図面を参照して詳細に説明する。図1は、本発明に係るコンピュータプログラムの作成支援装置の概略構成図である。図1を参照すると、コンピュータプログラムの作成支援装置には、ソースコードやオブジェクトコードを記憶保持する記憶装置11、後述する動作を行う識別子一覧出力部12及び識別子入力受付部13、コンパイラ15(これらは、コンピュータのハードウェア資源利用するコンピュータプログラムで構成され、前2者については後に詳述する。)、識別子一覧を表示するためのモニタ14とのほか、図示しないエディタ、デバッガ等プログラミングに必要なツールが統合して扱えるような環境が整えられている。
【0016】
図2は、識別子一覧出力部12で管理される識別子一覧作成用のテーブル構成を表した図である。図2を参照すると、ID(通し番号)、識別子名(文字列)、出現数(ソースファイル中の出現回数)、設定(使用=ON/不使用=OFF)、定義、強調表示(ON/OFF)といったフィールドが設けられ、IDで識別される識別子の情報を格納可能となっている。また、定義フィールドには、ソースファイル中にその識別子を定義している部分がないことを示す「OFF」、ソースファイル中にその識別子をプリプロセッサ命令#defineで定義していることを示す「ON(Define)」、ソースファイル中にその識別子をプリプロセッサ命令#undefで定義していることを示す「ON(Undef)」、ソースファイル中にその識別子をプリプロセッサ命令#define及び#undefで定義していることを示す「ON(DefineUndef)」が記述される。識別子一覧出力部12は、このテーブルの適宜項目を選択・表示してユーザに提供する。
【0017】
図3は、上記した識別子一覧のテーブル構成中の定義欄の4つの状態を求めるためのマトリクスである。図3を参照すると、ソースファイル中にその識別子が#defineで定義されている場合に、define_flagが1となり、#undefで定義されている場合に、undef_flagが1となり、これらの組合せによって、上記OFF〜ON(DefineUndef)までのいずれかの状態を求めることが可能となっている。
【0018】
図4は、本発明を適用した場合のプログラム作成の大まかな流れを示したフローチャートである。図4を参照すると、プログラムの作成・修正が終了したら(ステップ3−1)、識別子一覧出力部12がソースコードから条件付きコンパイルの識別子一覧を作成する処理を実行する(ステップ3−2)。
【0019】
次いで、モニタ14に出力された識別子一覧表(図11参照)より、適宜強調表示された識別子を確認して識別子にスペルミスや不整合があるかを確認し(ステップ3−3、3−4)、スペルミスが存在する場合は、再びプログラムの作成・修正に戻る(ステップ3−1)。一方、識別子にスペルミスがない場合には、識別子一覧表から、有効にする識別子を選択する(ステップ3−5)。例えば、図12のようにCUSTUM、DEBUG2、VERSIONが選択されている場合は、その設定欄に基づいて、識別子入力受付部13は(RELEASEはソースコード中で宣言されている;図11凡例参照)、コンパイラ15に対して、”−D CUSTUM −D DEBUG2 −D VERSION”のコマンドを発行する。
【0020】
続いて、本実施の形態における詳細動作(識別子一覧の生成)について説明する。図5は、上記図4のステップ3−2における詳細動作を表したフローチャートである。初めに、ソースファイルの最初の行へ移動する(ステップ7−1)。次に、ソースファイルより一行読み出す処理が行われる(ステップ7−2)。
【0021】
次に、読み出した行から#define又は#undefに後続する識別子が検出されたか否かの判断を行い(ステップ7−3)、該当する識別子が検出された場合は、後述する識別子新規登録処理を実行し(ステップ7−6)、ステップ7−9へ進む。
【0022】
一方、ステップ7−3で#define又は#undefに後続する識別子が検出されなかった場合は、次に条件付コンパイルで用いるプリプロセッサ命令♯ifdef、♯if define又は#elifに後続して用いられている識別子が検出されたか否かの判断を行う(ステップ7−4)。ここで、該当する識別子が検出されなかった場合は、ステップ7−9へ進む。
【0023】
一方、ステップ7−4で♯ifdef、♯if define又は#elifに後続する識別子が検出された場合は、次に、検出できた識別子と同じ名前の識別子が、識別子一覧のテーブルの識別子の列に既に存在するか否かの判断を行う(ステップ7−5)。ここで、当該識別子がテーブルに存在する場合は、既に過去に1回以上検出できたということなので、テーブルの一致した識別子の出現数に1を足し(ステップ7−7)、ステップ7−9へ進む。
【0024】
一方、ステップ7−5で検出できた識別子と同じ名前の識別子が、テーブルに存在しない場合は、テーブルの最後に一行を追加して、IDを付番し、識別子名を記述、出現数を1、設定、定義、強調表示の各要素をOFFに設定し(ステップ7−8)、ステップ7−9へ進む。
【0025】
そして、ステップ7−9で次の行に移動した時点で、ファイルの終了(EOF)に達したか否かを確認し、終了(EOF)ではない場合には、ステップ7−2に戻り、ソースファイルから一行読み取りフローを続行する。そして、ソースファイルの終了(EOF)に達している場合は、識別子一覧テーブルに含まれる識別子を強調すべきか否かの強調処理要否判定(図7参照;後述する)を実行し(ステップ7−11)、このフローを終了する。
【0026】
図6は、図5のステップ7−6における詳細動作を表したフローチャートである。図5のステップ7−3において読み出した行から#define又は#undefに後続する識別子が検出された場合、検出できた識別子と同じ名前の識別子が、テーブルに存在するか否かの判断を行う(ステップ8−1)。ここで、同じ識別子がすでにテーブルに存在する場合はステップ8−3へ進む。
【0027】
一方、同じ識別子がテーブルに存在しない場合は、テーブルの最後に一行を追加して、IDを付番し、識別子名を記述、出現数を0、設定、定義、強調表示の各要素をOFFに設定し(ステップ8−2)、ステップ8−3へ進む。
【0028】
ステップ8−3では、識別子の検出箇所は#defineでの定義であるか否かの判断を行い、識別子の定義が#defineであった場合には、図3のdefine_flagを1に設定する(ステップ8−4)。一方、識別子の定義が#undefであった場合には、図3のundef_flagを1に設定する(ステップ8−5)。
【0029】
その後このフローを終了し、図6のステップ7−6に制御を返す。このようにして、ソースファイルから#defineや#undefが検出されると、それぞれdefine_flagやundef_flagが更新され、最終的に当該識別子の定義状態が図3のマトリックスを用いて決定される。
【0030】
図7は、図5のステップ7−11における詳細動作(強調表示要否判定)を表したフローチャートである。図7を参照すると、初期化の後(ステップ9−1)、識別子一覧作成用のテーブルの識別子が順次評価される(ステップ9−2)。
【0031】
まず、その識別子の定義状態がON(DefineUndef)であるか否かの判断を行う(ステップ9−3)。ここで、定義状態がON(DefineUndef)である場合は、ソース中で一つの識別子を#define/#undefの両方で定義しているのは、誤りである可能性があるため、当該識別子の強調表示をONにする(ステップ9−8)。
【0032】
一方、定義状態がON(DefineUndef)でなかった場合は、識別子の定義がON(define)又はON(undef)であって、かつ、出現数が0であるか否かの判断を行う(ステップ9−4)。識別子の定義がON(define)又はON(undef)であって、かつ、出現数が0である場合は、識別子のスペルミスなどの可能性があるため、当該識別子の強調表示をONにする(ステップ9−8)。
【0033】
一方、定義状態がON(define)又はON(undef)であって、かつ、出現数が0でなかった場合は、大文字・小文字の違いに過ぎない、文字構成中所定字数が共通する等、当該識別子と文字構成上の特徴が一致する類似識別子が、テーブル内に存在するか判断する類似識別子探索処理を実行する(ステップ9−5、9−6)。ここで、類似識別子が存在しない場合には、ステップ9−8の強調処理ON設定を飛ばしてステップ9−9に進む。
【0034】
一方、類似識別子が存在する場合は、評価中(着目中)の識別子の出現数が設定値以下であるか否かを判断する(ステップ9−7)。ここで、評価中(着目中)の識別子の出現数が設定値より多い場合は、ステップ9−8の強調処理ON設定を飛ばしてステップ9−9に進む。
【0035】
一方、類似識別子があり、評価中(着目中)の出現数が設定値(例えば3を用いる。別途ユーザが設定できるものとする)以下である場合は、その識別子がスペルミスである可能性があるため、識別子の強調表示をONに設定する(ステップ9−8)。
【0036】
そして、上記一連の評価処理が終了すると、次の識別子が存在するか否かの判断が行われ(ステップ9−9)、次の識別子がある場合には、ステップ9−10(インクリメント処理)を経てステップ9−2に戻り、次の識別子の評価を続行する。一方、次の識別子がない場合には、この処理を終了する。
【0037】
図9は、図8に示したサンプルソースファイルについて、上記図5のフローチャートのステップ7−1から7−11までを実行した時点の識別子一覧作成用のテーブルを表した図である。図8を参照し、どのように判定されるかを説明すると、1行目の[#define RELEASE]が検出され、ID番号1/ 識別子RELEASE/ 出現数0/ 設定Off/ 定義On(define)/ 強調表示Offとしたデータがテーブルに追加される。
【0038】
次に、2行目の[#undef DEBUG3]が検出され、これもテーブルにないため、ID番号2/ 識別子DEBUG3/ 出現数0/ 設定Off/ 定義On(undef)/ 強調表示Offとしたデータがテーブルに追加される。
【0039】
次に、4行目の[#ifdef CUSTUM]が検出され、これもテーブルにないため、ID番号3/ 識別子CUSTUM/ 出現数1/ 設定Off/ 定義Off/ 強調表示Offとしたデータがテーブルに追加される。
【0040】
次に、8行目の[#ifdef DEBUG3]が検出されるが、これはテーブルに既に存在するため、テーブルのID番号2(DEBUG3)の出現数の値が加算される(0から1に変更)。
【0041】
次に、11行目の[#ifdef RELEASE]が検出されるが、これもテーブルに既に存在するため、テーブルのID番号1(RELEASE)の出現数の値が加算される(0から1に変更)。
【0042】
次に、13行目の[#ifdef DEBUG3]が検出されるが、これはテーブルに既に存在するため、テーブルのID番号2(DEBUG3)の出現数の値が加算される(1から2に変更)。
【0043】
次に、18行目の[#ifdef RELEACE]が検出されるが、これはテーブルにないため、ID番号4/ 識別子RELEACE/ 出現数1/ 設定Off/ 定義Off/ 強調表示Onとしたデータがテーブルに追加される。
【0044】
以上の各判定処理をまとめたものが図9であり、この短いソースファイルでも、RELEASEとRELEACEが互いに類似識別子(その判定詳細は後述する)となり、それぞれ出現数が少ないため、強調表示ON設定されることが了解される。
【0045】
図10は、別のソースファイルから生成された識別子一覧作成用のテーブルである。図10を参照すると、ID番号1乃至4、7、9の識別子は強調表示がOffであり、問題点がないことが判別できる。
【0046】
しかしながら、ソース中に6回記述されているID番号5、識別子”NEW”は、定義フィールドは、On(DefineUndef)となっている。これは、上述したようにソース中に#define/ #undefの両方の定義が検出されたためである。そのような不定状態は、識別子の定義ミス/スペルミスの可能性があると考えられるため、強調表示はONに設定される。
【0047】
また、ID番号6、識別子”OLD”は、#undefで定義はされており、また♯ifdef、♯if define又は#elifが見当たらない状態となっている(出現数が0)。この場合は、スペルミスの可能性があると考えられるため、強調表示はONに設定される。
【0048】
また、ID番号8、識別子”RELEACE”は、ソース中に1回記述されているが、定義(#define/ #undef)は無い。この場合は、類似する(一文字相違)スペルを有するRELEASEが存在し、かつ出現数が少ない(3回より少ない)ため、スペルミスの可能性があると判断され、強調表示はONに設定される。
【0049】
図11は、図10の識別子一覧作成用のテーブルを視覚的にわかりやすい態様に構成し直したものである。図10の識別子一覧作成用のテーブルをそのまま表示してユーザに注意を喚起しても良いが、図11の例では、出現数でソートしてあり、更に、定義と設定が設定欄にまとめて記号表示され、強調表示は行頭の「*」でもって表されている(NEW/ RELEACE/ OLD参照)。また、すでにソース中に明示的に宣言している識別子については、コマンドラインよりも優先的に設定されるため、凡例に示したように設定欄には状態(有効・無効)が示され、一覧表から変更できないように、適宜チェックボックスが変更不可状態にされている。
【0050】
また、この識別子一覧は、出現数(昇順/降順)又は識別子名(辞書順)でソートできるように構成され、識別子のスペルミスや不整合をそれぞれの視点から確認できるようになっている。そして、ユーザがその識別子を使用したい場合には、設定欄のボックスをチェックして選択状態とすることができる。但し、ここでは、RELEASEは既にソース中で#defineで定義されているので、選択状態で変更不可能であり、DEBUG3及びOLDは、ソース中で#undefで定義されているので、未選択状態で変更不可能になっている。またNEWは、ソース中で#defineかつ#undefで定義されているため、不定状態で変更不可能になっている。
【0051】
図12は、図11の一覧により、RELEACEが間違っていたことに気が付き、ソースに戻り、識別子RELEACEをRELEASEと訂正、識別子NEWの定義箇所を削除、識別子OLDの定義箇所を削除した後、再度出力される識別子一覧である。図12を参照すると、エラーを暗示する行頭の「*」は無くなっている。この状態で図12に示されたとおり、ユーザが設定欄のチェックボックスをチェックすることにより、識別子一覧のテーブルの設定の値がONになる。また、定義の値がOff以外の識別子に関しては、設定の値は常にOffを取る。図12の例では、ユーザが、複数の識別子”CUSTUM”、”DEBUG2”、”VERSION”を使用するとして、設定欄にチェックが入れられている。従って、この状態から所定の操作を行うことで、コンパイラ15に対して、”−D CUSTUM −D DEBUG2 −D VERSION”のコマンドを発行することが可能となっている。
【0052】
以上説明したとおり、従来の方法では、条件付きコンパイルの識別子を指定する際に、多くの識別子の設定を手動で行う必要があり、ここでスペルミスが起こる可能性があるところ、本実施の形態によれば、ユーザは、識別子一覧の強調表示に促されて間違いを容易に検出することが可能となる。また、上記の識別子一覧から定義(有効状態)したい識別子を選択することにより、識別子の定義ミスによるエラーの確率を低減することが可能である。
【0053】
また上記した実施の形態では、強調表示をアスタリスクをもって行う例を挙げて説明したが、その他太字化、彩色変更、点滅等の強調表示を採用することができる。
【0054】
続いて、上記第1の実施の形態における類似識別子探索をより細かく行うこととした第2の実施の形態について説明する。本実施の形態は、図7のステップ9−5の類似識別子探索処理を詳細に行う点が異なるのみであるので、既に説明した内容と重複する部分は省略し、その相違点を中心に説明する。図13は、図7のステップ9−5の類似識別子探索処理として行われる詳細動作を表したフローチャートである。
【0055】
図13を参照すると、初めに、識別子一覧作成用のテーブルより、比較照合を行う識別子A(ID(x))と識別子B(ID(x+y))が取得される(ステップ14−1)。続いて、一文字タイプミス比較処理、識別子中のある特定の文字を一つ削除又は追加した場合残りの部分が一致するか?といった視点での判断を行う(ステップ14−2、14−3)。その具体的詳細は、後に図14を用いて説明する。
【0056】
ここで、一致(一文字多いか少ないかの相違に過ぎない)と判定した場合は、ステップ14−10に進み、類似識別子と判定される。
【0057】
一方、ステップ14−3で一致しないと判定した場合、続いて、識別子Aと識別子Bがアルファベットの大文字と小文字の相違に過ぎないかどうかという視点での判定を行う(ステップ14−4、14−5)。ここで、例えばDEBUGとdebug、RELEASEとReLEaSE等のように一致(大文字と小文字の相違に過ぎない)と判定した場合は、ステップ14−10に進み、類似識別子と判定される。
【0058】
一方、ステップ14−5で一致しないと判定した場合、続いて、識別子Aと識別子Bの各文字を順番に比較し、異なっている文字数をカウントする処理を行う(ステップ14−6)。そして、相違する文字数が所定値n個以下であるか否かを判定する(ステップ14−7)。例えば所定値nは、識別子の文字列の長さが3以下のときはn=2、文字列の長さが4以上の時はn=3とする等比較元の識別子の文字数を基準に変動させることが好ましい。例えばDEBUGとDABUG、RELEASEとRELEACE等のように一致(相違文字がそれぞれ1文字であり、所定値n以下である)と判定した場合は、ステップ14−10に進み、類似識別子と判定される。
【0059】
一方、ステップ14−7で一致しないと判定した場合、続いて、識別子Aと識別子Bを比較し、ある一定数以下の文字が置き換わったに過ぎない(各文字の出現回数が略一致する)かどうかという視点で判定を行う(ステップ14−8、14−9)ここで、例えばDEBUGとDABUG、RELEASEとRELEACE、REREASEとRELEASE、のように一致(各文字の出現回数の差が所定値以下)と判定した場合は、ステップ14−10に進み、類似識別子と判定される。
【0060】
図14は、図13のステップ14−2における詳細動作を表したフローチャートである。図14を参照すると、まず、文字列長の長い識別子にフラグをセットし(ステップ15−1)、両識別子の文字列長が同じ場合を除外した上で(ステップ15−2)、識別子Aと識別子Bを先頭より順番に比較し(ステップ15−3、15−4)、相違が発生しても最初の相違であれば、文字列長の長い方の比較文字を進める処理を行って(ステップ15−5)、比較を続行する(ステップ15−6、15−7)。最終的に、どちらか一方の識別子の特定の一文字を除外すれば、識別子A、Bが一致する場合には「一致」、一致しない場合には「不一致」と判断する。例えば、DEBUGとDEBG、RELEASEとRELEAASEは類似識別子と判断されることになる。
【0061】
上記各判定処理において類似識別子が存在すると判定されれば、第1の実施の形態で説明した強調処理ONが設定され(図7のステップ9−8)、ユーザにソースコードの確認を的確に促すことが可能となる。
【0062】
以上、2つの識別子が類似すると判定するための方法を各種説明したが、これらは、その一例を挙げたに過ぎず、その他の処理を加えても良いし、図13、図14に例示された判定処理の一部を省略しても良いし、順序を変えるなどしても良い。また、上記各判定処理で用いたしきい値も適宜変更可能である。いずれにしても、手入力時に誤りやすいミスを的確に検出できるようなロジックであることが望まれる。
【0063】
以上、本発明のいくつかの実施の形態を説明したが、その原理からも明らかなとおり、本発明の技術的範囲は、上述した実施の形態に限定されるものではなく、ソースコードから識別子一覧を生成表示しユーザに注意を喚起するとともに、該識別子一覧から識別子を設定可能とする構成という本発明の要旨を逸脱しない範囲で、各種の変形・置換をなしうることが可能であることはいうまでもない。
【0064】
また、上記した実施の形態では、C言語を用いた例を挙げて説明したが、その原理からして明らかなとおり、Java(登録商標)、C#など、おおよそ条件付コンパイルが可能な言語であれば、特に限定するものではないことはもちろんである。
【図面の簡単な説明】
【0065】
【図1】本発明に係るコンピュータプログラムの作成支援装置の概略構成図である。
【図2】識別子一覧のテーブル構成例を表した図である。
【図3】識別子一覧の定義状態を決定するためのマトリクスの一例である。
【図4】本発明を適用した場合のプログラム作成の基本的な流れを示したフローチャートである。
【図5】図4のステップ3−2における詳細動作を表したフローチャートである。
【図6】図5のステップ7−6における詳細動作を表したフローチャートである。
【図7】図5のステップ7−11における詳細動作を表したフローチャートである。
【図8】本発明の実施の形態を説明するためのサンプル・ソースコードである。
【図9】図8に示したサンプルソースファイルに基づいて生成される識別子一覧作成用のテーブルを表した図である。
【図10】別のソースファイルから生成された識別子一覧テーブルである。
【図11】視覚的にわかりやすい態様で構成した識別子一覧の例である。
【図12】識別子一覧の別の一例である。
【図13】本発明の第2の実施の形態の要点を説明するためのフローチャートである。
【図14】図13のステップ14−2における詳細動作を表したフローチャートである。
【図15】従来のプログラム作成手順を示したフローチャートである。
【図16】条件付きコンパイルのコマンド例である。
【符号の説明】
【0066】
11 記憶装置
12 識別子一覧出力部
13 識別子入力受付部
14 モニタ
15 コンパイラ
【技術分野】
【0001】
本発明は、プログラムソースコード(以下、ソースコードという)に含まれる条件付コンパイル用識別子の管理方法、コンピュータプログラムの作成支援装置及びプログラムに関し、特に、識別子のスペルミスを検出して条件付コンパイル(Conditional Compilation)を確実に行うことのできる識別子の管理方法、コンピュータプログラムの作成支援装置及びプログラムに関する。
【背景技術】
【0002】
近年、アプリケーションが多機能化・多品種化しているため、それに比例して、プリプロセッサ命令(コンパイル前にソースプログラムに対して行われる前処理命令であり、文字列の置き換えやプログラムの有効/無効部分の指定が可能である)を用いた前処理が多用され、また、ソースコードも大規模かつ複雑になっている。またそのため、デバッグ作業は複雑になり時間がかかっているのが現状である。特許文献1には、ソースコード中のプリプロセッサ命令を解析し、その結果をエディタ画面に視覚的に表示する機能を備えて、プリプロセッサ命令の間違いを検出できるようにしたプログラム・エディタが紹介されている。
【0003】
また、特許文献2、3には、ソースコード入力作業中に、入力ミスの可能性のある箇所を強調表示することのできるエディタが紹介されており、特許文献4には、プログラム中で使用されている変数の整合性チェックを行う変数データ処理装置が紹介されている。
【0004】
図15は、従来のプログラム作成手順を示したフローチャートである。図15を参照すると、まずエディタなどを用いてプログラムの作成・編集を行い(ステップ1−1)、必要な箇所に条件付きコンパイルの設定が手動で行われる(ステップ1−2)。この条件付きコンパイルの設定は、機種依存性がからむ場合やデバッグ時に多用され、プログラマがソースコードや設計書から判断して、必要な箇所に条件付コンパイル用プリプロセッサとその識別子を設定することによって行われる。
【0005】
続いて、コンパイルが行われる(ステップ1−3、1−4)。図16は、条件付きコンパイルのコマンド例であり、この場合、ソースコード中の条件付きコンパイル用プリプロセッサ命令に後続して用いられている識別子”DEBUG”、”TEST”が有効化され、例えば、ソースコード中の#ifdef DEBUGの行から、#endifまでの部分がコンパイルの対象となる。このコンパイルの過程で、エラーのチェックが行われるが、ここで文法上のエラーがある場合は、コンパイラがエラーを表示する(プリプロセッサ命令自体の入力ミス等の文法エラーも含む)。そして、エラーと表示された場合は、再びプログラムの修正に移る(ステップ1−1)。一方、エラーが無い場合にはデバッグ作業に移る。
【0006】
次のデバッグ作業では、さまざまな評価を行い、プログラムが仕様書通りに動いているか評価を行う(ステップ1−5、1−6)。ここで、誤作動に気が付けば、様々なツールを使用したり、実際にソースを読むことにより、プログラムの論理的なエラーなどを発見して、ソースコードの修正に移る(ステップ1−1)。エラーが発見されなかった場合は、プログラムの作成は終了になる。
【0007】
【特許文献1】特開2000−148508号公報
【特許文献2】特開平5−341976号公報
【特許文献3】特開平11−73305号公報
【特許文献4】特開平7−78072号公報
【発明の開示】
【発明が解決しようとする課題】
【0008】
条件付コンパイルで用いるプリプロセッサ命令に後続する「識別子」として、任意の文字を定義可能であって大変便利であるが、その反面、プリプロセッサ命令を含む行は文法的に独立したものと取扱われるため、以下のような負担が生じていたといえる。第1の問題点は、コンパイル時のエラーチェックでは、たとえ入力ミスであってもそのような識別子が設定されているものと判断され検出できないことにある。例えば、図16のように、コンパイルコマンドで「DEBUG」と指定したのに対し、ソースコードでは識別子「DEBAG」(入力ミス)が定義されていたとしても、コンパイラは誤りとせず識別子「DEBUG」の条件付きコンパイルを行う。このように、識別子の入力ミスは、デバッグ作業でしか発見することができず、条件付きコンパイルの識別子のスペルミスの不具合が発生すると、デバッグ作業を強いられることになり、大規模かつ複雑なソースコードではかなりの負担となっている。
【0009】
第2の問題点は、条件付きコンパイルの識別子を指定する際に、多くの識別子の設定を手動で行う必要があるため、同一の識別子が指定されるべきところ、別の識別子が設定されるなど、見落としや指定間違いが発生する危険性が常にあったことにある。大規模なソースコードは、複数の人間がプログラミングしており、更には、一つのソースコードで多くの品種・バージョンに対応するため、複雑に条件付きコンパイルのプリプロセッサ命令が指定されている場合もある。また、ソースコードが大規模で複雑であれば、条件付きコンパイルが正しく設定できているかどうかを検証することも困難となり、プログラム開発作業の効率化を阻害する要因ともなっている。
【0010】
この点、特許文献1は、プリプロセッサ命令の解釈結果を編集画面上に視覚的に表示するものであるから、デバッグ作業の軽減にはなったとしても、大規模かつ複雑なソースコードでは上記各問題点を根本的に解決するものとはならない。また、特許文献2、3の技術をもってしても、条件付コンパイル用の識別子の場合、何をもって入力ミスと判定するかどうかも一義的でなく適用が困難である。また、特許文献4に記載の技術も、インタプリタ系言語に特有の変数の整合性をチェックするためのものであり、この種の問題は、コンパイラ系言語では、コンパイル時に検出することが可能となっているものである。
【課題を解決するための手段】
【0011】
本発明の第1の視点によれば、少なくともコンパイルする前の段階で、コンピュータが、プログラムソースコードを走査して、少なくとも、条件付コンパイル用のプリプロセッサ命令に後続して用いられている識別子とその出現回数と、識別子が定義されているか否かを示した定義状態と、を併記した識別子一覧を生成表示し、ユーザに注意を喚起することのできる条件付コンパイル用の識別子の管理方法が提供される。
【0012】
本発明の第2の視点によれば、上記した条件付コンパイル用の識別子の管理方法において、少なくともコンパイルコマンド入力時に、前記コンピュータが、前記識別子一覧からユーザによって選択された識別子を、条件付コンパイル用の識別子として設定すること、を特徴とする条件付コンパイル用の識別子の管理方法が提供される。
【0013】
本発明の第3の視点によれば、上記したソースコード中の識別子の管理方法を実施するためのコンピュータプログラムの作成支援装置、及び、コンピュータに上記ソースコード中の識別子の管理方法を実施するためのコンピュータ・プログラム(チェッカ・プログラム、プログラム作成支援プログラム)が提供される。
【発明の効果】
【0014】
本発明によれば、少なくとも出現回数と定義状態を併記した識別子一覧を参照して、識別子のスペルミスや不整合を発見することが可能となる。
【発明を実施するための最良の形態】
【0015】
続いて、本発明を統合開発環境(Integrated Development Environment)に適用した本発明の好適な実施の形態について、図面を参照して詳細に説明する。図1は、本発明に係るコンピュータプログラムの作成支援装置の概略構成図である。図1を参照すると、コンピュータプログラムの作成支援装置には、ソースコードやオブジェクトコードを記憶保持する記憶装置11、後述する動作を行う識別子一覧出力部12及び識別子入力受付部13、コンパイラ15(これらは、コンピュータのハードウェア資源利用するコンピュータプログラムで構成され、前2者については後に詳述する。)、識別子一覧を表示するためのモニタ14とのほか、図示しないエディタ、デバッガ等プログラミングに必要なツールが統合して扱えるような環境が整えられている。
【0016】
図2は、識別子一覧出力部12で管理される識別子一覧作成用のテーブル構成を表した図である。図2を参照すると、ID(通し番号)、識別子名(文字列)、出現数(ソースファイル中の出現回数)、設定(使用=ON/不使用=OFF)、定義、強調表示(ON/OFF)といったフィールドが設けられ、IDで識別される識別子の情報を格納可能となっている。また、定義フィールドには、ソースファイル中にその識別子を定義している部分がないことを示す「OFF」、ソースファイル中にその識別子をプリプロセッサ命令#defineで定義していることを示す「ON(Define)」、ソースファイル中にその識別子をプリプロセッサ命令#undefで定義していることを示す「ON(Undef)」、ソースファイル中にその識別子をプリプロセッサ命令#define及び#undefで定義していることを示す「ON(DefineUndef)」が記述される。識別子一覧出力部12は、このテーブルの適宜項目を選択・表示してユーザに提供する。
【0017】
図3は、上記した識別子一覧のテーブル構成中の定義欄の4つの状態を求めるためのマトリクスである。図3を参照すると、ソースファイル中にその識別子が#defineで定義されている場合に、define_flagが1となり、#undefで定義されている場合に、undef_flagが1となり、これらの組合せによって、上記OFF〜ON(DefineUndef)までのいずれかの状態を求めることが可能となっている。
【0018】
図4は、本発明を適用した場合のプログラム作成の大まかな流れを示したフローチャートである。図4を参照すると、プログラムの作成・修正が終了したら(ステップ3−1)、識別子一覧出力部12がソースコードから条件付きコンパイルの識別子一覧を作成する処理を実行する(ステップ3−2)。
【0019】
次いで、モニタ14に出力された識別子一覧表(図11参照)より、適宜強調表示された識別子を確認して識別子にスペルミスや不整合があるかを確認し(ステップ3−3、3−4)、スペルミスが存在する場合は、再びプログラムの作成・修正に戻る(ステップ3−1)。一方、識別子にスペルミスがない場合には、識別子一覧表から、有効にする識別子を選択する(ステップ3−5)。例えば、図12のようにCUSTUM、DEBUG2、VERSIONが選択されている場合は、その設定欄に基づいて、識別子入力受付部13は(RELEASEはソースコード中で宣言されている;図11凡例参照)、コンパイラ15に対して、”−D CUSTUM −D DEBUG2 −D VERSION”のコマンドを発行する。
【0020】
続いて、本実施の形態における詳細動作(識別子一覧の生成)について説明する。図5は、上記図4のステップ3−2における詳細動作を表したフローチャートである。初めに、ソースファイルの最初の行へ移動する(ステップ7−1)。次に、ソースファイルより一行読み出す処理が行われる(ステップ7−2)。
【0021】
次に、読み出した行から#define又は#undefに後続する識別子が検出されたか否かの判断を行い(ステップ7−3)、該当する識別子が検出された場合は、後述する識別子新規登録処理を実行し(ステップ7−6)、ステップ7−9へ進む。
【0022】
一方、ステップ7−3で#define又は#undefに後続する識別子が検出されなかった場合は、次に条件付コンパイルで用いるプリプロセッサ命令♯ifdef、♯if define又は#elifに後続して用いられている識別子が検出されたか否かの判断を行う(ステップ7−4)。ここで、該当する識別子が検出されなかった場合は、ステップ7−9へ進む。
【0023】
一方、ステップ7−4で♯ifdef、♯if define又は#elifに後続する識別子が検出された場合は、次に、検出できた識別子と同じ名前の識別子が、識別子一覧のテーブルの識別子の列に既に存在するか否かの判断を行う(ステップ7−5)。ここで、当該識別子がテーブルに存在する場合は、既に過去に1回以上検出できたということなので、テーブルの一致した識別子の出現数に1を足し(ステップ7−7)、ステップ7−9へ進む。
【0024】
一方、ステップ7−5で検出できた識別子と同じ名前の識別子が、テーブルに存在しない場合は、テーブルの最後に一行を追加して、IDを付番し、識別子名を記述、出現数を1、設定、定義、強調表示の各要素をOFFに設定し(ステップ7−8)、ステップ7−9へ進む。
【0025】
そして、ステップ7−9で次の行に移動した時点で、ファイルの終了(EOF)に達したか否かを確認し、終了(EOF)ではない場合には、ステップ7−2に戻り、ソースファイルから一行読み取りフローを続行する。そして、ソースファイルの終了(EOF)に達している場合は、識別子一覧テーブルに含まれる識別子を強調すべきか否かの強調処理要否判定(図7参照;後述する)を実行し(ステップ7−11)、このフローを終了する。
【0026】
図6は、図5のステップ7−6における詳細動作を表したフローチャートである。図5のステップ7−3において読み出した行から#define又は#undefに後続する識別子が検出された場合、検出できた識別子と同じ名前の識別子が、テーブルに存在するか否かの判断を行う(ステップ8−1)。ここで、同じ識別子がすでにテーブルに存在する場合はステップ8−3へ進む。
【0027】
一方、同じ識別子がテーブルに存在しない場合は、テーブルの最後に一行を追加して、IDを付番し、識別子名を記述、出現数を0、設定、定義、強調表示の各要素をOFFに設定し(ステップ8−2)、ステップ8−3へ進む。
【0028】
ステップ8−3では、識別子の検出箇所は#defineでの定義であるか否かの判断を行い、識別子の定義が#defineであった場合には、図3のdefine_flagを1に設定する(ステップ8−4)。一方、識別子の定義が#undefであった場合には、図3のundef_flagを1に設定する(ステップ8−5)。
【0029】
その後このフローを終了し、図6のステップ7−6に制御を返す。このようにして、ソースファイルから#defineや#undefが検出されると、それぞれdefine_flagやundef_flagが更新され、最終的に当該識別子の定義状態が図3のマトリックスを用いて決定される。
【0030】
図7は、図5のステップ7−11における詳細動作(強調表示要否判定)を表したフローチャートである。図7を参照すると、初期化の後(ステップ9−1)、識別子一覧作成用のテーブルの識別子が順次評価される(ステップ9−2)。
【0031】
まず、その識別子の定義状態がON(DefineUndef)であるか否かの判断を行う(ステップ9−3)。ここで、定義状態がON(DefineUndef)である場合は、ソース中で一つの識別子を#define/#undefの両方で定義しているのは、誤りである可能性があるため、当該識別子の強調表示をONにする(ステップ9−8)。
【0032】
一方、定義状態がON(DefineUndef)でなかった場合は、識別子の定義がON(define)又はON(undef)であって、かつ、出現数が0であるか否かの判断を行う(ステップ9−4)。識別子の定義がON(define)又はON(undef)であって、かつ、出現数が0である場合は、識別子のスペルミスなどの可能性があるため、当該識別子の強調表示をONにする(ステップ9−8)。
【0033】
一方、定義状態がON(define)又はON(undef)であって、かつ、出現数が0でなかった場合は、大文字・小文字の違いに過ぎない、文字構成中所定字数が共通する等、当該識別子と文字構成上の特徴が一致する類似識別子が、テーブル内に存在するか判断する類似識別子探索処理を実行する(ステップ9−5、9−6)。ここで、類似識別子が存在しない場合には、ステップ9−8の強調処理ON設定を飛ばしてステップ9−9に進む。
【0034】
一方、類似識別子が存在する場合は、評価中(着目中)の識別子の出現数が設定値以下であるか否かを判断する(ステップ9−7)。ここで、評価中(着目中)の識別子の出現数が設定値より多い場合は、ステップ9−8の強調処理ON設定を飛ばしてステップ9−9に進む。
【0035】
一方、類似識別子があり、評価中(着目中)の出現数が設定値(例えば3を用いる。別途ユーザが設定できるものとする)以下である場合は、その識別子がスペルミスである可能性があるため、識別子の強調表示をONに設定する(ステップ9−8)。
【0036】
そして、上記一連の評価処理が終了すると、次の識別子が存在するか否かの判断が行われ(ステップ9−9)、次の識別子がある場合には、ステップ9−10(インクリメント処理)を経てステップ9−2に戻り、次の識別子の評価を続行する。一方、次の識別子がない場合には、この処理を終了する。
【0037】
図9は、図8に示したサンプルソースファイルについて、上記図5のフローチャートのステップ7−1から7−11までを実行した時点の識別子一覧作成用のテーブルを表した図である。図8を参照し、どのように判定されるかを説明すると、1行目の[#define RELEASE]が検出され、ID番号1/ 識別子RELEASE/ 出現数0/ 設定Off/ 定義On(define)/ 強調表示Offとしたデータがテーブルに追加される。
【0038】
次に、2行目の[#undef DEBUG3]が検出され、これもテーブルにないため、ID番号2/ 識別子DEBUG3/ 出現数0/ 設定Off/ 定義On(undef)/ 強調表示Offとしたデータがテーブルに追加される。
【0039】
次に、4行目の[#ifdef CUSTUM]が検出され、これもテーブルにないため、ID番号3/ 識別子CUSTUM/ 出現数1/ 設定Off/ 定義Off/ 強調表示Offとしたデータがテーブルに追加される。
【0040】
次に、8行目の[#ifdef DEBUG3]が検出されるが、これはテーブルに既に存在するため、テーブルのID番号2(DEBUG3)の出現数の値が加算される(0から1に変更)。
【0041】
次に、11行目の[#ifdef RELEASE]が検出されるが、これもテーブルに既に存在するため、テーブルのID番号1(RELEASE)の出現数の値が加算される(0から1に変更)。
【0042】
次に、13行目の[#ifdef DEBUG3]が検出されるが、これはテーブルに既に存在するため、テーブルのID番号2(DEBUG3)の出現数の値が加算される(1から2に変更)。
【0043】
次に、18行目の[#ifdef RELEACE]が検出されるが、これはテーブルにないため、ID番号4/ 識別子RELEACE/ 出現数1/ 設定Off/ 定義Off/ 強調表示Onとしたデータがテーブルに追加される。
【0044】
以上の各判定処理をまとめたものが図9であり、この短いソースファイルでも、RELEASEとRELEACEが互いに類似識別子(その判定詳細は後述する)となり、それぞれ出現数が少ないため、強調表示ON設定されることが了解される。
【0045】
図10は、別のソースファイルから生成された識別子一覧作成用のテーブルである。図10を参照すると、ID番号1乃至4、7、9の識別子は強調表示がOffであり、問題点がないことが判別できる。
【0046】
しかしながら、ソース中に6回記述されているID番号5、識別子”NEW”は、定義フィールドは、On(DefineUndef)となっている。これは、上述したようにソース中に#define/ #undefの両方の定義が検出されたためである。そのような不定状態は、識別子の定義ミス/スペルミスの可能性があると考えられるため、強調表示はONに設定される。
【0047】
また、ID番号6、識別子”OLD”は、#undefで定義はされており、また♯ifdef、♯if define又は#elifが見当たらない状態となっている(出現数が0)。この場合は、スペルミスの可能性があると考えられるため、強調表示はONに設定される。
【0048】
また、ID番号8、識別子”RELEACE”は、ソース中に1回記述されているが、定義(#define/ #undef)は無い。この場合は、類似する(一文字相違)スペルを有するRELEASEが存在し、かつ出現数が少ない(3回より少ない)ため、スペルミスの可能性があると判断され、強調表示はONに設定される。
【0049】
図11は、図10の識別子一覧作成用のテーブルを視覚的にわかりやすい態様に構成し直したものである。図10の識別子一覧作成用のテーブルをそのまま表示してユーザに注意を喚起しても良いが、図11の例では、出現数でソートしてあり、更に、定義と設定が設定欄にまとめて記号表示され、強調表示は行頭の「*」でもって表されている(NEW/ RELEACE/ OLD参照)。また、すでにソース中に明示的に宣言している識別子については、コマンドラインよりも優先的に設定されるため、凡例に示したように設定欄には状態(有効・無効)が示され、一覧表から変更できないように、適宜チェックボックスが変更不可状態にされている。
【0050】
また、この識別子一覧は、出現数(昇順/降順)又は識別子名(辞書順)でソートできるように構成され、識別子のスペルミスや不整合をそれぞれの視点から確認できるようになっている。そして、ユーザがその識別子を使用したい場合には、設定欄のボックスをチェックして選択状態とすることができる。但し、ここでは、RELEASEは既にソース中で#defineで定義されているので、選択状態で変更不可能であり、DEBUG3及びOLDは、ソース中で#undefで定義されているので、未選択状態で変更不可能になっている。またNEWは、ソース中で#defineかつ#undefで定義されているため、不定状態で変更不可能になっている。
【0051】
図12は、図11の一覧により、RELEACEが間違っていたことに気が付き、ソースに戻り、識別子RELEACEをRELEASEと訂正、識別子NEWの定義箇所を削除、識別子OLDの定義箇所を削除した後、再度出力される識別子一覧である。図12を参照すると、エラーを暗示する行頭の「*」は無くなっている。この状態で図12に示されたとおり、ユーザが設定欄のチェックボックスをチェックすることにより、識別子一覧のテーブルの設定の値がONになる。また、定義の値がOff以外の識別子に関しては、設定の値は常にOffを取る。図12の例では、ユーザが、複数の識別子”CUSTUM”、”DEBUG2”、”VERSION”を使用するとして、設定欄にチェックが入れられている。従って、この状態から所定の操作を行うことで、コンパイラ15に対して、”−D CUSTUM −D DEBUG2 −D VERSION”のコマンドを発行することが可能となっている。
【0052】
以上説明したとおり、従来の方法では、条件付きコンパイルの識別子を指定する際に、多くの識別子の設定を手動で行う必要があり、ここでスペルミスが起こる可能性があるところ、本実施の形態によれば、ユーザは、識別子一覧の強調表示に促されて間違いを容易に検出することが可能となる。また、上記の識別子一覧から定義(有効状態)したい識別子を選択することにより、識別子の定義ミスによるエラーの確率を低減することが可能である。
【0053】
また上記した実施の形態では、強調表示をアスタリスクをもって行う例を挙げて説明したが、その他太字化、彩色変更、点滅等の強調表示を採用することができる。
【0054】
続いて、上記第1の実施の形態における類似識別子探索をより細かく行うこととした第2の実施の形態について説明する。本実施の形態は、図7のステップ9−5の類似識別子探索処理を詳細に行う点が異なるのみであるので、既に説明した内容と重複する部分は省略し、その相違点を中心に説明する。図13は、図7のステップ9−5の類似識別子探索処理として行われる詳細動作を表したフローチャートである。
【0055】
図13を参照すると、初めに、識別子一覧作成用のテーブルより、比較照合を行う識別子A(ID(x))と識別子B(ID(x+y))が取得される(ステップ14−1)。続いて、一文字タイプミス比較処理、識別子中のある特定の文字を一つ削除又は追加した場合残りの部分が一致するか?といった視点での判断を行う(ステップ14−2、14−3)。その具体的詳細は、後に図14を用いて説明する。
【0056】
ここで、一致(一文字多いか少ないかの相違に過ぎない)と判定した場合は、ステップ14−10に進み、類似識別子と判定される。
【0057】
一方、ステップ14−3で一致しないと判定した場合、続いて、識別子Aと識別子Bがアルファベットの大文字と小文字の相違に過ぎないかどうかという視点での判定を行う(ステップ14−4、14−5)。ここで、例えばDEBUGとdebug、RELEASEとReLEaSE等のように一致(大文字と小文字の相違に過ぎない)と判定した場合は、ステップ14−10に進み、類似識別子と判定される。
【0058】
一方、ステップ14−5で一致しないと判定した場合、続いて、識別子Aと識別子Bの各文字を順番に比較し、異なっている文字数をカウントする処理を行う(ステップ14−6)。そして、相違する文字数が所定値n個以下であるか否かを判定する(ステップ14−7)。例えば所定値nは、識別子の文字列の長さが3以下のときはn=2、文字列の長さが4以上の時はn=3とする等比較元の識別子の文字数を基準に変動させることが好ましい。例えばDEBUGとDABUG、RELEASEとRELEACE等のように一致(相違文字がそれぞれ1文字であり、所定値n以下である)と判定した場合は、ステップ14−10に進み、類似識別子と判定される。
【0059】
一方、ステップ14−7で一致しないと判定した場合、続いて、識別子Aと識別子Bを比較し、ある一定数以下の文字が置き換わったに過ぎない(各文字の出現回数が略一致する)かどうかという視点で判定を行う(ステップ14−8、14−9)ここで、例えばDEBUGとDABUG、RELEASEとRELEACE、REREASEとRELEASE、のように一致(各文字の出現回数の差が所定値以下)と判定した場合は、ステップ14−10に進み、類似識別子と判定される。
【0060】
図14は、図13のステップ14−2における詳細動作を表したフローチャートである。図14を参照すると、まず、文字列長の長い識別子にフラグをセットし(ステップ15−1)、両識別子の文字列長が同じ場合を除外した上で(ステップ15−2)、識別子Aと識別子Bを先頭より順番に比較し(ステップ15−3、15−4)、相違が発生しても最初の相違であれば、文字列長の長い方の比較文字を進める処理を行って(ステップ15−5)、比較を続行する(ステップ15−6、15−7)。最終的に、どちらか一方の識別子の特定の一文字を除外すれば、識別子A、Bが一致する場合には「一致」、一致しない場合には「不一致」と判断する。例えば、DEBUGとDEBG、RELEASEとRELEAASEは類似識別子と判断されることになる。
【0061】
上記各判定処理において類似識別子が存在すると判定されれば、第1の実施の形態で説明した強調処理ONが設定され(図7のステップ9−8)、ユーザにソースコードの確認を的確に促すことが可能となる。
【0062】
以上、2つの識別子が類似すると判定するための方法を各種説明したが、これらは、その一例を挙げたに過ぎず、その他の処理を加えても良いし、図13、図14に例示された判定処理の一部を省略しても良いし、順序を変えるなどしても良い。また、上記各判定処理で用いたしきい値も適宜変更可能である。いずれにしても、手入力時に誤りやすいミスを的確に検出できるようなロジックであることが望まれる。
【0063】
以上、本発明のいくつかの実施の形態を説明したが、その原理からも明らかなとおり、本発明の技術的範囲は、上述した実施の形態に限定されるものではなく、ソースコードから識別子一覧を生成表示しユーザに注意を喚起するとともに、該識別子一覧から識別子を設定可能とする構成という本発明の要旨を逸脱しない範囲で、各種の変形・置換をなしうることが可能であることはいうまでもない。
【0064】
また、上記した実施の形態では、C言語を用いた例を挙げて説明したが、その原理からして明らかなとおり、Java(登録商標)、C#など、おおよそ条件付コンパイルが可能な言語であれば、特に限定するものではないことはもちろんである。
【図面の簡単な説明】
【0065】
【図1】本発明に係るコンピュータプログラムの作成支援装置の概略構成図である。
【図2】識別子一覧のテーブル構成例を表した図である。
【図3】識別子一覧の定義状態を決定するためのマトリクスの一例である。
【図4】本発明を適用した場合のプログラム作成の基本的な流れを示したフローチャートである。
【図5】図4のステップ3−2における詳細動作を表したフローチャートである。
【図6】図5のステップ7−6における詳細動作を表したフローチャートである。
【図7】図5のステップ7−11における詳細動作を表したフローチャートである。
【図8】本発明の実施の形態を説明するためのサンプル・ソースコードである。
【図9】図8に示したサンプルソースファイルに基づいて生成される識別子一覧作成用のテーブルを表した図である。
【図10】別のソースファイルから生成された識別子一覧テーブルである。
【図11】視覚的にわかりやすい態様で構成した識別子一覧の例である。
【図12】識別子一覧の別の一例である。
【図13】本発明の第2の実施の形態の要点を説明するためのフローチャートである。
【図14】図13のステップ14−2における詳細動作を表したフローチャートである。
【図15】従来のプログラム作成手順を示したフローチャートである。
【図16】条件付きコンパイルのコマンド例である。
【符号の説明】
【0066】
11 記憶装置
12 識別子一覧出力部
13 識別子入力受付部
14 モニタ
15 コンパイラ
【特許請求の範囲】
【請求項1】
コンピュータによるプログラムソースコードに含まれる条件付コンパイル用の識別子の管理方法であって、
前記コンピュータが、プログラムソースコードを走査し、
少なくとも、条件付コンパイル用のプリプロセッサ命令に後続して用いられている識別子とその出現回数と、識別子が定義されているか否かを示した定義状態と、を併記した識別子一覧を生成表示する工程を、含むこと、
を特徴とする条件付コンパイル用の識別子の管理方法。
【請求項2】
請求項1に記載の条件付コンパイル用の識別子の管理方法であって、更に、
少なくともコンパイルコマンド入力時に、前記コンピュータが、前記識別子一覧からユーザによって選択された識別子を、条件付コンパイル用の識別子として設定する工程を含むこと、
を特徴とする条件付コンパイル用の識別子の管理方法。
【請求項3】
コンピュータプログラムの作成支援装置であって、
プログラムソースコードを走査し、少なくとも、条件付コンパイル用のプリプロセッサ命令に後続して用いられている識別子とその出現回数と、識別子が定義されているか否かを示した定義状態と、を併記した識別子一覧を生成表示する識別子一覧出力部を備えたこと、
を特徴とするコンピュータプログラムの作成支援装置。
【請求項4】
請求項3に記載のコンピュータプログラムの作成支援装置であって、更に、
少なくともコンパイルコマンド入力時に、前記識別子一覧から任意の識別子を選択することによって、条件付コンパイル用の識別子の設定を受け付ける識別子入力受付部を備えたこと、
を特徴とするコンピュータプログラムの作成支援装置。
【請求項5】
請求項3又は4に記載のコンピュータプログラムの作成支援装置において、
前記識別子一覧は、識別子に使用された文字順でソートされていること、
を特徴とするコンピュータプログラムの作成支援装置。
【請求項6】
請求項3乃至5いずれか一に記載のコンピュータプログラムの作成支援装置において、
前記識別子一覧は、識別子の出現回数でソートされていること、
を特徴とするコンピュータプログラムの作成支援装置。
【請求項7】
請求項3又は6いずれか一に記載のコンピュータプログラムの作成支援装置において、
前記識別子一覧の識別子同士を照合し、着目する識別子と文字構成上の特徴が一致する類似識別子が存在し、かつ、着目する識別子の出現回数が所定値より少ない場合は、前記識別子一覧の該識別子の部分を強調表示すること、
を特徴とするコンピュータプログラムの作成支援装置。
【請求項8】
請求項3又は7いずれか一に記載のコンピュータプログラムの作成支援装置において、
着目する識別子の文字列から少なくとも1文字を削除して並べた文字列と、一致する識別子が検出された場合は、前記文字構成上の特徴が一致する類似識別子と判定すること、
を特徴とするコンピュータプログラムの作成支援装置。
【請求項9】
コンピュータプログラムの作成支援のためのチェッカプログラムであって、
チェック対象のプログラムソースコードを走査し、少なくとも、条件付コンパイル用のプリプロセッサ命令に後続して用いられている識別子とその出現回数と、識別子が定義されているか否かを示した定義状態と、を併記した識別子一覧を生成表示する処理をコンピュータに実行させるチェッカプログラム。
【請求項10】
請求項9に記載のチェッカプログラムにおいて、更に、
識別子に使用された文字順で各識別子をソートした識別子一覧を生成すること、
を特徴とするチェッカプログラム。
【請求項11】
請求項9又は10に記載のチェッカプログラムにおいて、
識別子の出現回数で各識別子をソートした識別子一覧を生成すること、
を特徴とするチェッカプログラム。
【請求項12】
請求項9乃至11いずれか一に記載のチェッカプログラムにおいて、更に、
前記識別子一覧の識別子同士を照合する処理と、
着目する識別子と文字構成上の特徴が一致する類似識別子が存在し、かつ、着目する識別子の出現回数が所定値より少ない場合は、前記識別子一覧の該識別子の部分を強調表示する処理と、を前記コンピュータに実行させるチェッカプログラム。
【請求項13】
請求項9乃至12いずれか一に記載のチェッカプログラムにおいて、更に、
着目する識別子の文字列から少なくとも1文字を削除して並べた文字列と、一致する識別子が検出された場合は、前記文字構成上の特徴が一致する類似識別子と判定すること、
を特徴とするチェッカプログラム。
【請求項14】
請求項9乃至13いずれか一に記載のチェッカプログラムを含み、
前記識別子一覧から任意の識別子を選択することで識別子の設定を受け付ける処理を、前記コンピュータに実行させるコンピュータプログラムの作成支援プログラム。
【請求項1】
コンピュータによるプログラムソースコードに含まれる条件付コンパイル用の識別子の管理方法であって、
前記コンピュータが、プログラムソースコードを走査し、
少なくとも、条件付コンパイル用のプリプロセッサ命令に後続して用いられている識別子とその出現回数と、識別子が定義されているか否かを示した定義状態と、を併記した識別子一覧を生成表示する工程を、含むこと、
を特徴とする条件付コンパイル用の識別子の管理方法。
【請求項2】
請求項1に記載の条件付コンパイル用の識別子の管理方法であって、更に、
少なくともコンパイルコマンド入力時に、前記コンピュータが、前記識別子一覧からユーザによって選択された識別子を、条件付コンパイル用の識別子として設定する工程を含むこと、
を特徴とする条件付コンパイル用の識別子の管理方法。
【請求項3】
コンピュータプログラムの作成支援装置であって、
プログラムソースコードを走査し、少なくとも、条件付コンパイル用のプリプロセッサ命令に後続して用いられている識別子とその出現回数と、識別子が定義されているか否かを示した定義状態と、を併記した識別子一覧を生成表示する識別子一覧出力部を備えたこと、
を特徴とするコンピュータプログラムの作成支援装置。
【請求項4】
請求項3に記載のコンピュータプログラムの作成支援装置であって、更に、
少なくともコンパイルコマンド入力時に、前記識別子一覧から任意の識別子を選択することによって、条件付コンパイル用の識別子の設定を受け付ける識別子入力受付部を備えたこと、
を特徴とするコンピュータプログラムの作成支援装置。
【請求項5】
請求項3又は4に記載のコンピュータプログラムの作成支援装置において、
前記識別子一覧は、識別子に使用された文字順でソートされていること、
を特徴とするコンピュータプログラムの作成支援装置。
【請求項6】
請求項3乃至5いずれか一に記載のコンピュータプログラムの作成支援装置において、
前記識別子一覧は、識別子の出現回数でソートされていること、
を特徴とするコンピュータプログラムの作成支援装置。
【請求項7】
請求項3又は6いずれか一に記載のコンピュータプログラムの作成支援装置において、
前記識別子一覧の識別子同士を照合し、着目する識別子と文字構成上の特徴が一致する類似識別子が存在し、かつ、着目する識別子の出現回数が所定値より少ない場合は、前記識別子一覧の該識別子の部分を強調表示すること、
を特徴とするコンピュータプログラムの作成支援装置。
【請求項8】
請求項3又は7いずれか一に記載のコンピュータプログラムの作成支援装置において、
着目する識別子の文字列から少なくとも1文字を削除して並べた文字列と、一致する識別子が検出された場合は、前記文字構成上の特徴が一致する類似識別子と判定すること、
を特徴とするコンピュータプログラムの作成支援装置。
【請求項9】
コンピュータプログラムの作成支援のためのチェッカプログラムであって、
チェック対象のプログラムソースコードを走査し、少なくとも、条件付コンパイル用のプリプロセッサ命令に後続して用いられている識別子とその出現回数と、識別子が定義されているか否かを示した定義状態と、を併記した識別子一覧を生成表示する処理をコンピュータに実行させるチェッカプログラム。
【請求項10】
請求項9に記載のチェッカプログラムにおいて、更に、
識別子に使用された文字順で各識別子をソートした識別子一覧を生成すること、
を特徴とするチェッカプログラム。
【請求項11】
請求項9又は10に記載のチェッカプログラムにおいて、
識別子の出現回数で各識別子をソートした識別子一覧を生成すること、
を特徴とするチェッカプログラム。
【請求項12】
請求項9乃至11いずれか一に記載のチェッカプログラムにおいて、更に、
前記識別子一覧の識別子同士を照合する処理と、
着目する識別子と文字構成上の特徴が一致する類似識別子が存在し、かつ、着目する識別子の出現回数が所定値より少ない場合は、前記識別子一覧の該識別子の部分を強調表示する処理と、を前記コンピュータに実行させるチェッカプログラム。
【請求項13】
請求項9乃至12いずれか一に記載のチェッカプログラムにおいて、更に、
着目する識別子の文字列から少なくとも1文字を削除して並べた文字列と、一致する識別子が検出された場合は、前記文字構成上の特徴が一致する類似識別子と判定すること、
を特徴とするチェッカプログラム。
【請求項14】
請求項9乃至13いずれか一に記載のチェッカプログラムを含み、
前記識別子一覧から任意の識別子を選択することで識別子の設定を受け付ける処理を、前記コンピュータに実行させるコンピュータプログラムの作成支援プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【公開番号】特開2006−215896(P2006−215896A)
【公開日】平成18年8月17日(2006.8.17)
【国際特許分類】
【出願番号】特願2005−29376(P2005−29376)
【出願日】平成17年2月4日(2005.2.4)
【出願人】(000232036)NECマイクロシステム株式会社 (72)
【Fターム(参考)】
【公開日】平成18年8月17日(2006.8.17)
【国際特許分類】
【出願日】平成17年2月4日(2005.2.4)
【出願人】(000232036)NECマイクロシステム株式会社 (72)
【Fターム(参考)】
[ Back to top ]