JP2014059775A - プログラム構造評価システム、プログラム - Google Patents
プログラム構造評価システム、プログラム Download PDFInfo
- Publication number
- JP2014059775A JP2014059775A JP2012205081A JP2012205081A JP2014059775A JP 2014059775 A JP2014059775 A JP 2014059775A JP 2012205081 A JP2012205081 A JP 2012205081A JP 2012205081 A JP2012205081 A JP 2012205081A JP 2014059775 A JP2014059775 A JP 2014059775A
- Authority
- JP
- Japan
- Prior art keywords
- function
- violation
- hierarchy
- access
- program
- 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
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
【解決手段】解析対象のプログラムソース28に対する(2)プログラム解析処理と、その後の(3)階層登録などや、(4)アクセス違反抽出などや、(5)アクセス違反例外登録などの処理によって、階層定義テーブル(作成中)21、アクセス違反例外登録ファイル(作成中)26を、作成・更新していく。最後に、アクセス違反例外登録ファイル(作成中)26にして任意の階層違反の許容の情報を登録させることで、アクセス違反例外登録ファイル(登録)27を生成すると共に、これと階層定義テーブル(作成中)21を用いて階層定義テーブル(登録)22を生成する。
【選択図】図10
Description
新規開発では、ソフトウェア構造に従って作成したものが作られるが、担当者によっては構造を無視して安直に他の機能の変数を書き換えたりすることがある。また、仕様書どおりの構造で作成されたプログラムが、派生開発や障害発生時の緊急対応などにより、担当者が全体構造を理解しないままその場しのぎでプログラムを修正し、その変更内容のレビューすることもなくソフトウェアを提供してしまうことがある。その結果、いわゆるスパゲッティプログラムとなることで、修正の影響範囲が分からなくなり、想定外機能の不具合が発生し、品質保証のための作業工数の増大が発生する。最悪の場合は、顧客の信用を失墜し大きな損害を与えることがある。
・開発メンバーの入替りで、全体構造(初期の設計思想)を十分理解できていない
・短納期により、有識者によるレビューをしていない
・レビューアが忙しく、レビューができない
ここで、プログラムを解析管理または点数評価する技術として、例えば特許文献1、2に記載の従来技術が知られている。
図1は、本例のプログラム構造評価システム全体の構成図であって、特に管理サーバの機能構成を示す図である。
管理サーバ10は、サーバメイン処理部11、点数化タスク部12、定義アクセスタスク部13、定義生成タスク部14の各種機能部を有する。これら各種機能部の処理機能は、不図示のCPU等が、不図示の記憶装置(ハードディスク、メモリ等)に予め記憶されている所定のアプリケーションプログラムを読出し・実行することにより実現される。これら各種機能部や上記各種要求に応じた処理については、後に各種フローチャート図等を参照して説明するものとする。
また、管理サーバ10は、上記記憶装置等に、各製品(ソフトウェア)毎に対応する各種情報/プログラムを記憶する(尚、この記憶には、一時的に生成される情報等の記憶も含まれる)。
サーバメイン処理部11は、操作端末1からの何らかの要求を受け付けて、この要求に応じて点数化タスク部12、定義アクセスタスク部13、定義生成タスク部14の何れかを呼び出して処理実行させる。但し、以下の説明では、サーバメイン処理部11については逐一述べずに、省略する場合もあるものとする。
定義生成タスク部14は、操作端末1からの要求などに応じて、該当する処理(プログラム)を読み出すなどして、設定のチェックや設定データの自動生成等を実行・管理する。
また、上記各種テーブル/ファイルは、例えば下記のように分類される。
(a) 作業用ファイル
・階層定義テーブル(作成中)21
・アクセス違反例外登録ファイル(作成中)26
(b) 階層評価時に定義されているテーブル
・階層定義テーブル(登録)22
・動作情報定義テーブル23
(c) 階層評価を行なうために作成されるファイル
・アクセス違反例外登録ファイル(登録)27
・アクセス違反計数ファイル24
・アクセス違反点数化ファイル25
・偏差値計数ファイル15
ここで、図2に、ソフトウェア構造(階層と機能)の一例を示す。
図2のソフトウェア構造の具体例としては、例えばソフトウェアが何らかの所謂“組込みソフトウェア”である場合が考えられる。尚、よく知られているように、“組込みソフトウェア”とは、家電製品や産業機器に組み込まれた特定の機能を提供するためのコンピュータシステム(組込みシステム)上のソフトウェアである。上記Adqua等は、主に組込みソフトウェアの品質評価に用いられるものである。
尚、上記任意の機能から他の機能の呼び出しは、詳細には、例えば任意の機能の関数から他の機能の関数の呼び出しや、任意の機能の関数から他の機能の変数の呼び出し等となる。但し、これに限らず、自機能内での呼び出しも行われる。つまり、任意の機能の関数から同じ機能内の他の関数の呼び出しや、任意の機能の関数から同じ機能内の任意の変数の呼び出し等となる。但し、基本的に自機能内での呼び出しは違反とはならないので、本説明では自機能内での呼び出しに係る説明を省略する場合もあるものとする。
(i)API関数 ;機能外からでもアクセスできる関数
(ii)ローカル関数 ;その機能内でのみアクセスできる関数
(iii)グローバル変数 ;機能外からでもアクセスさせることを前提とした変数
(iv)ロ−カル変数 ;その機能内でのみ使用する変数
基本的に、任意の機能におけるローカル関数やローカル変数を、他の機能から呼び出すことは、上記階層構造に関係なく、違反となる。
以上、図2を用いて説明したことが、上述した「複数の機能より成るソフトウェアにおける機能間のアクセスに係る制限事項や階層に係る制限事項」の具体例である。本システムでは、評価対象のソフトウェア(プログラムソース28)に関して、「複数の機能より成るソフトウェアにおける機能間のアクセスに係る制限事項や階層に係る制限事項」に係る評価のための点数化を行うことができる。
また、尚、本例においては機能コード34がその機能に係わるプログラムソースファイル名や各関数/変数の名称に用いられることになっているものとする。
図4には、数値が入力される例を示しており、数値は例えば上記違反有無を示す‘0’と‘1’であり、ここでは‘0’が“違反無し”、‘1’が“違反あり”を意味するものであるが、この例に限らない。例えば、設定値が0,1,2、・・・n(n;任意の整数)であり、これらの設定値は、例えば階層違反の有無や違反の許容数(「階層違反の有無や許容情報(許容登録数というものとする)」と呼ぶ場合もあるものとする)を示しており、例えば下記のように定義されるものであってもよい。
『 0:異常として検出しない。
2:違反が2個以上存在する場合、異常として検出する。
3:違反が3個以上存在する場合、異常として検出する。
・
・
n:違反がn個以上存在する場合、異常として検出する。 』
例えば、過去に作成されたプログラム(レガシー資産)に基づいて作成されたプログラムの場合、違反であることが分かっていても修正困難である箇所が存在する場合がある。よって、レガシー資産において任意のペアに関して違反が2個存在すると分かっているならば、違反2件は必ず生じるのでこれは除外して考えるものとして‘3’を設定することになる(つまり、違反が3個以上存在する場合(実質的に新たな違反が1個以上存在する場合に)、新たな違反の分だけをカウントする)。
B:外部に公開されていないローカル関数をアクセスした。
C:階層を越えてグローバル(外部アクセス用)変数を呼び出した。
更に、これらA〜Dだけでなく更に数値を設定してもよい。設定する値は、例えば下記の通り、違反の許容範囲(許容数)を示している。
『 0:異常として検出しない。
2:違反が2個以上存在する場合、異常として検出する。
・
・
・
n:n個以上存在する場合、異常として検出する。』
尚、上記のことは下記のように表現することもできる。
1:エラーを検出する。(許容するエラーなし)
2以上:エラーの許容数+1
なお、B,Dは、機能内で複数のプログラムソースファイルが分かれている場合は、機能間でのやり取りに使用する変数が存在するために、他の機能からアクセスできてしまう関数や変数、また、プログラムソースファイル内であれば、そこでしか使用できない関数や変数の設定ができるが、その宣言がされていない場合にアクセスできてしまうために、他の機能が使われることを想定している。
第一階層が最下位階層、第三階層が最上位階層である。
第二階層は、第一階層を呼び出すが、第三階層を呼び出すことはできない。
第三階層は、第二階層を呼び出すが、基本的には第1階層は呼び出しができない。但し、特殊な機能のみ呼び出しを許可することもあるので、設定により許可された場合は、その機能のみ呼び出すことができる。例えば図4に示す例では、呼び出し元が“機能3−1”で呼び出し先が機能1−2のAPI関数である場合には、上記ルールでは呼び出し不可(よって‘1’が設定されるはず)であるが、開発者等の判断により図示の通り‘0’が設定されている。尚、この設定は、最初から手作業で行っても良いが、半自動で生成されたものに対して、手作業で修正するものであってもよい。
尚、上記の通り、アクセス違反例外登録ファイル(作成中)26は作成途中、アクセス違反例外登録ファイル(登録)27は完成済みの状態を示すので、フォーマット自体は同じである。尚、アクセス違反例外登録ファイル(登録)27は、アクセス違反を例外的に許容するものを登録したファイルである。
1 : API関数 ;SCI_INITIAL
2 : ローカル関数 ;Sci_FifoSet
3 : グローバル変数 ;g_SciExpcntlUS
4 : ローカル変数 ;gSciSendState
0 :判定不能(ソース名規約違反などの他のエラーにより判定できない)
−1 :API関数に係るアクセス違反
−2 :ローカル関数に係るアクセス違反
−3 :グローバル変数に係るアクセス違反
−4 :ローカル変数に係るアクセス違反
−5 :規約を満たさない関数 ;例えばDebugFuncなど
−6 :規約を満たさない変数 ;例えばWorkArea、WORKCounterUSなど
また、上記例外アクセス許可フラグ46には、‘0’または‘1’が設定される。その意味は下記の通りである。尚、これらの設定は、基本的にはユーザ(管理者など)が手作業で行うものである。
1:アクセス違反を許容する。
例外アクセス許可フラグ46に関して、詳しくは後述する。
尚、逐一述べないが、任意の機能から他の機能の呼び出しは、詳細には既に述べた通り、任意の機能に属する関数から、他の機能に属する関数または変数の呼び出しを意味する。また、これも逐一述べないが、当然、同一機能内での呼び出し(任意の関数から同じ機能内の他の関数や変数を呼び出すこと)は、基本的に全てOKである(違反とはならない)。
図6(a)に示すように、アクセス違反計数ファイル24のデータ構造自体は、上記図4に示す階層定義テーブル(登録)22のデータ構造と略同様である。すなわち、アクセス違反計数ファイル24は、機能名51、階層番号(レイヤ)52、機能番号53、機能コード54、呼び出し先55、呼び出し元56から成る。これらは階層定義テーブル(登録)22の機能名31、階層番号(レイヤ)32、機能番号33、機能コード34、呼び出し先35、呼び出し元36と略同様であり、ここでは特に説明しないが、各呼び出し元56(機能単位)と各呼び出し先55(関数種別/変数種別単位)のペアに応じた違反計数欄が設定されている。
そして、図6(a)に示すアクセス違反計数ファイル24に基づいて、呼び出し先を各関数/変数単位で集計したものが、図6(b)に示す集計結果である。尚、この様な集計結果もアクセス違反計数ファイル24の一部であると見做してよい。
また、例えば呼び出し元56が機能3−1で、呼び出し先が“機能1−1のAPI関数”である場合には、違反が5回検出されたことになるが、図6(b)に示す集計結果は3回となっている。これは、このペアに関しては図4に示す例では‘3’(=違反許容数)が設定されている為に、違反2回までは許容されており、3回目以降から違反としてカウントされるためである。
図7(a)は重み付けに係わる情報であり、図7(b)は足きりの閾値である。
尚、必ずしも図7(a)、(b)の両方が必要なわけではなく、どちらか片方のみであってもよい。当然、後述する処理も、それに応じた処理となる。
(I)重み付けに関して
図7(a)に示す重み係数は、上記アクセス対象(呼び出し先)に係わる4つの評価項目(各関数種別/各変数種別;本例ではAPI(関数)、ローカル関数、グローバル変数、ローカル変数)それぞれについて、任意の重み係数(重み値)が登録されたものである。これは、例えば開発者等が任意に決定・設定するものである。
また、重み付けを細かく行う場合には、「階層定義テーブル」に対応した機能間で個別に設定ファイルを設けても良い。
(II)足きりの閾値に関して
評価単位当たりの(例えば呼び出し元の各機能毎の)違反件数の上限として“足きりの閾値”を設定するようにしてもよい。この足きりの設定値は、開発者等が任意に決定してよく、図7(b)に示す例では“足きりの閾値”=10.0となっている。以下の説明では、この一例を用いるものとするが、当然、この例に限るわけではない。
図示の例では、アクセス違反点数化ファイル25には以下の項目があり、呼び出し元の各機能毎またはプログラムソース28全体に対して、以下の各項目に応じた数値が算出・登録される。
(i)ステップ数[LOC]
機能単位のプログラムのステップ数である。図示のように、基本的には各機能1−1〜機能3−2のプログラムステップ数は、それぞれ、異なるものであり、場合によっては大きく異なることになる。よって、上記違反件数が多いからといって単純に悪いものとは言えない(プログラムステップ数が非常に多いために、その分、違反件数も多いのかもしれない)。
(ii)単位当りの点数
KLOC(1000ステップ)当たりの違反検出数である。
単位当りの点数=合計点数÷(ステップ数[LOC]/1000)
={合計点数/ステップ数[LOC]}×1000
(iii)足きり後の点数
単位当りの点数が足きりの閾値を越える場合に、足きりの閾値を単位当たりの点数とする。よって、図示の例では、機能3−2に関する単位当りの点数(17.73)のみが足きりの閾値(10.0)を越えているので、17.73を10.0に補正する。他の機能についてはそのままとする。
(iv)評価点数
(3)の足きり後の点数のままでは、点数が0点の場合が、違反が無く、最も良い点数となるので、100点を最も良い点数とするように換算したものが、評価点数である。
によって評価点数を算出する。
例えば、機能1−1の場合、足きり後の点数が38.6点であるので、
機能1−1の評価点数=100−38.6=61.4点
となる。
図9に、その一例を示す。
図9において、製品Aが、今回の評価対象のプログラムであるものとし、よって図示のように点数(全体の評価点数)は69.5点となっている。
図示の例では製品Aの偏差値は‘61.9’となり、過去の製品と比べて改善していることが分かる。
また、図11に、プログラムソース28を構成するプログラムファイルの内容例を示す。
(1)新規プログラムの登録
まず、任意の担当者(プログラム登録者)が、作成済みのプログラムソース28(または、各機能の雛形プログラム)を、管理サーバ10に登録する。管理サーバ10の不図示の記憶装置(ハードディスク等)に、プログラムソース28が記憶される。
(2)プログラム解析処理
システム全体を管理している管理者(設計者)は、例えば操作端末1を操作して、ネットワーク2を介して管理サーバ10にアクセスして、以下に説明する様々な要求を管理サーバ10に送って、要求に応じた処理実行させる。尚、以下の管理サーバ10の処理の説明においては、管理者による操作端末1の操作については逐一述べない場合もあるものとする。尚、この例に限らず、管理者は管理サーバ10を直接操作して、所望の処理を実行させるものであっても構わない。また、上記要求などに対する管理サーバ10の各種処理実行は、基本的にはサーバメイン処理部11の管理の元に行われ、サーバメイン処理部11が要求に応じた処理を直接または間接的に呼び出すと共に、処理結果はサーバメイン処理部11に返されて、サーバメイン処理部11から操作端末1に返信されるものであるが、これについても逐一述べない場合もあるものとする。
・ 抽出データ : 抽出元
・機能コード :プログラムファイル名
・機能名 :プログラムヘッダ
2)アクセス違反例外登録ファイル(作成中)26
・ 抽出データ : 抽出元
・参照元機能コード :プログラムファイル名
・ソース名 :プログラムファイル名
・参照先機能コード :参照している関数名、変数名から機能コードを抽出
・検出対象名称 :参照している関数名、変数名
・検出種別コード :参照している関数名、変数名によって判断する。尚、ここで抽出する検出種別コードは、>0(正の値)、あるいは−5や−6である(換言すれば、−1〜−4以外である)。
(3)階層登録&入力チェック;
システム全体を管理している管理者(設計者など)が、操作端末1を操作して、管理サーバ10と連携して以下のデータ登録や処理を実行させる。
管理サーバ10は、例えば、操作端末1からの所定の要求に応じて、階層定義テーブル(作成中)21(上記“(2)プログラム解析処理”後の状態)を所定の記憶領域から読み出し、これを操作端末1側で表示させると共に、ユーザ(設計者など)に任意のデータを入力させる。これより、ユーザは、階層番号32、又は/及び、機能番号33を任意に入力する。
管理サーバ10は、上記操作端末1側での階層番号32/機能番号33の入力内容を、自己が保持・管理している階層定義テーブル(作成中)21に反映させる(テーブル21を更新する)。例えば、後述する図12(a)に示す状態から、図12(b)または図12(d)の状態へと更新する。
サーバメイン処理部11は、定義生成タスク部14を介して階層登録チェック処理(図19)を呼び出し、当該処理(例えば図19に示す処理)を実行させる。この処理によって定義エラー(整合エラー等)の有無が判定される。また、ユーザが階層番号32/機能番号33の何れか一方のみを入力した場合には、他方を自動生成する。更に、レコードの自動整列等を行うものであってもよい。詳しくは後に図19などで説明する。
(11)ユーザが機能番号を入力するケース;
図12(a)に示す状態の階層定義テーブル(作成中)21が読み出されて表示され、ユーザが手作業で図12(b)に示すように機能番号33を入力した場合は、サーバが自動的に、機能番号33に含まれる階層番号を階層番号(レイヤ)32を反映すると共に、各レコードを機能番号順に整列する。これによって、図12(c)に示す状態となる。つまり、このケースではユーザが機能番号33を入力すると、階層番号(レイヤ)32は自動的に生成・登録されると共に、機能番号33に基づくレコード整列が行われる。これより、階層定義テーブル(作成中)21は図12(c)に示す状態へと更新される。
(12)ユーザが階層番号(レイヤ)を入力するケース;
図12(a)に示す状態の階層定義テーブル(作成中)21が読み出されて表示され、ユーザが手作業で図12(d)に示すように階層番号(レイヤ)32を入力した場合は、下記のように処理することで、階層定義テーブル(作成中)21は、例えば図12(e)、(f)に示す状態を経て、図12(c)に示す状態へと更新される。
・ユーザが階層番号(レイヤ)32を入力した場合は、各機能のレイヤ内の位置(順番;通番)が未定なので、下記のように通番の決定やテーブル32の各レコードの整列を行って、機能番号33を自動生成する。
(二)各レイヤ毎に、機能コード34の先頭文字のアルファベット順にレコードを整列する。
・ユーザが各機能のレイヤ内の位置を設計時に決めていない場合は、上記(一)〜(三)で自動的に整列・生成したものを、そのまま登録する(ケースA)。
・ユーザが各機能のレイヤ内の位置を設計時に決めている場合には、上記のように自動的に整列したものが、自己が決めているものと異なる場合には、自己が決めていたものと合うように調整し(手作業で入力等し)、再度自動的に整列した後に登録する(ケースB)。尚、当然、上記のように自動的に整列したものが、自己が決めているものと同じとなっている場合には、ケースAと同様に、上記のように自動的に整列・生成したものを、そのまま登録する。
ユーザが例えば図12(d)に示すように階層番号32を手作業で入力すると、上述した処理が開始される。すなわち、まず、上記(一)に従ってテーブル12のレコードを整列することで、階層番号(レイヤ)32が小さいもの(ここでは‘1’が最も小さい)から順に整列される。更に、レイヤ内の順番を決定・整列する。これは、階層番号(レイヤ)32が同じレコード同士の順番を、例えば上記(二)に従って機能コード34のアルファベット順に整列する。これらの処理を行うことで、階層定義テーブル(作成中)21は、レコードの順番に関しては、図12(d)に示す状態から図12(e)に示す状態となる(但し、この段階では未だ機能番号33は未登録である)。
次に、以下、図10に示す“(4)アクセス違反抽出&正常を削除”の処理・作業について説明する。
(4)アクセス違反抽出&正常を削除
システム全体を管理している管理者(設計者など)は、操作端末1を操作して、定義生成タスク部14を介して階層違反例外検出処理(図20)を呼び出す。この処理では、上記(3)で更新後の階層定義テーブル(作成中)21を参照して、アクセス違反例外登録ファイル(作成中)26における各レコードのうちアクセス違反であるアクセス(ペア)が記録されたレコードを検出し、その検出種別コード45を書き換える(検出種別コード45の1〜4を、アクセス違反がある場合は−1〜−4にする)。さらに、正常である(アクセス違反ではない)レコードを削除する。
尚、アクセス違反例外登録ファイル(作成中)26は、本処理の開始時には、上記(2)の処理(図18の処理等)によって例えば図13(a)に示す状態になっている場合、本処理によって図13(b)の状態を経て図13(c)の状態がアクセス違反例外登録ファイル(作成中)26の更新版として保存されることになる。
(21)アクセス違反を抽出
階層定義テーブル(作成中)21を参照して、アクセス違反例外登録ファイル(作成中)26の登録されている各レコードに記録される各アクセス(ペア)のアクセス違反の有無を判定し、アクセス違反のレコードはその検出種別コード45をマイナスの値(−1〜−4)にする(処理フローは図20のS201参照)。
(22)正常を削除
検出種別コード45が正常(>0)であるレコードを全て削除する(処理フローは図20のS202参照)。
(5)アクセス違反例外の許可登録
システム全体を管理している管理者(設計者など)は、アクセス違反例外の許可登録を行うために、操作端末1で以下の指示操作を行うことで、管理サーバ10のアクセス違反例外登録ファイル(作成中)26を更新させる。尚、本処理については特にフローチャート図等は作成していない。
上記のように、アクセス違反例外登録ファイル(作成中)26に登録された各アクセス違反のなかで、管理者等の判断により例外扱い(違反としない)するものが手作業で登録される。そして、この様な例外登録済みのアクセス違反例外登録ファイル(作成中)26を用いて、図10に示す下記の(6)の処理を行うことで、階層定義テーブルの半自動作成が完了することになる(階層定義テーブル(登録)22として保存する)。その後は、保存された階層定義テーブル(登録)22を用いて、上述した点数化・評価処理が行われることになる。
(6)階層違反許容の登録
システム全体を管理している管理者(設計者)は、操作端末1を操作して、定義生成タスク部14を介して階層違反許容の登録処理(図21)を呼び出す。この処理では、アクセス違反例外登録ファイル(作成中)26から上記例外的にアクセス許可されたもの以外のレコード(例外アクセス許可フラグ46=‘0’のレコード)を全て削除して、これをアクセス違反例外登録ファイル(登録)27として保存する。
そして、アクセス違反例外登録ファイル(登録)27を用いて、階層定義テーブル(作成中)21における未登録部分の自動設定、すなわち「階層違反の有無や許容情報(許容登録数)」の自動設定を行うことで、階層定義テーブルを完成させる(階層定義テーブル(登録)22として保存する)。
上述したように、この様な処理によって、新規に発生したアクセス違反を見過ごすことが無くなる(保守性維持)という効果が得られる。あるいは、機能の追加/削除が正しくされているのかユーザが確認できるという効果も得られる。
(31)テーブル作成
今回の解析対象のプログラムソース28に対する上記プログラム評価処理に伴って、階層定義テーブル21または22と、アクセス違反例外登録ファイル26または27を作成する。尚、これらのテーブルの作成は、上述した(2)〜(6)の処理によって実現できるので、ここでは説明を省略する。
(32)機能コードの差分抽出
今回の処理対象プログラムについて上記(31)の処理で作成された階層定義テーブル(作成中)21(但し、階層定義テーブル(登録)22であっても構わない)と、前回のプログラム評価の際に作成してあった階層定義テーブル(登録)22との比較処理を行い、両者の機能コードの違い(差分)を検出する。例えば、比較処理のプログラム(階層定義テーブル比較処理(図22))を呼び出し、上記差分の検出結果(機能コードの追加/削除)を格納するテーブル(階層定義テーブル(差分)29”))を作成する。
(33)アクセス違反の差分抽出
今回の処理対象プログラムのプログラム評価で作成されたアクセス違反例外登録ファイル(作成中)26と、前回のプログラム評価の際に作成されていたアクセス違反例外登録ファイル(作成中)26との比較処理(アクセス違反例外登録ファイル比較処理(図23))を起動する。
図15は、サーバメイン処理部11のフローチャート図である。
・点数化要求 :“点数化タスク12”
・定義設定要求 :“定義アクセスタスク13”
・定義生成要求 :“定義生成タスク14”
すなわち、サーバメイン処理部11は、操作端末1からの任意の要求待ち状態で(ステップS11)任意の要求を受信したら、当該要求が点数化要求である場合には(ステップS12,YES)、点数化タスク部12を起動し(ステップS15)、点数化タスク部12の処理完了を待ち(ステップS16)、処理完了したら処理結果を操作端末1に返信する。
また、受信した要求が、テーブル/ファイル等に対するアクセス(リード/ライト)に係る要求(まとめて、定義設定要求というものとする)である場合には(ステップS13,YES)、定義アクセスタスク部13を起動し(ステップS17)、定義アクセスタスク部13の処理完了を待ち(ステップS18)、処理完了したら処理結果を操作端末1に返信する。
本処理では、受信した上記要求(コマンド)に基づいて、定義内容(例えば、リード/ライト対象のデータの種類やファイル名やテーブル名など)を判定し、この定義内容に該当するテーブル/ファイルにアクセス(読み書き)する処理を行うものである。
例えば、定義内容が“階層定義テーブル”であれば、階層定義テーブル(21or22)にアクセスする(ステップS32)。例えば、定義内容が“重み計数”や“足きりの閾値”であれば、動作情報定義テーブル23にアクセスする(ステップS33)。尚、ここでは、これらの判定のために必要な情報(特に説明しない)が、予め記憶されているものとするが、この例に限らない。
構造評価用のテーブルやファイルを作成するために、操作端末1側から管理サーバ10側に対して要求を行なう場合の処理であり、本実施例では、管理サーバ10側で実行しているが、操作端末1側で処理してもかまわない。
・プログラム解析処理(ステップS42;例えば図18の処理を実行するプログラム)
・階層登録チェック処理(ステップS43;例えば図19の処理を実行するプログラム)
・階層違反例外検出処理(ステップS44;例えば図20の処理を実行するプログラム)
・階層違反許容の登録処理(ステップS45;例えば図21の処理を実行するプログラム)
・階層定義テーブル比較処理(ステップS46;例えば図22の処理を実行するプログラム)
・アクセス違反例外登録ファイル比較処理(ステップS47;例えば図23の処理を実行するプログラム)
そして、上記何れかの処理を実行完了したら、処理完了をサーバメイン処理部11に通知する(ステップS49)。
以下、上記ステップS42〜S47の各処理について、図18〜図23のフローチャート図を参照して説明する。
図18(b)は、ステップS61の“検出種別コードの作成処理”の詳細フローチャート図である。
尚、例えば、階層定義テーブル21(作成中)とアクセス違反例外登録ファイル(作成中)26の雛形(各データ項目はあるが、データは一切無い状態)が、予め記憶されており、上記ステップS51の処理は、これら各テーブルをコピーすると共に、解析対象のプログラムファイル名に基づくテーブル識別番号(または名称)を生成・付与するものである。これによって、解析対象のプログラムソース28に応じた階層定義テーブル21(作成中)とアクセス違反例外登録ファイル(作成中)26のデフォルト版(初期状態)が、新規に作成されることになる。
すなわち、まず、参照先(アクセス先)の変数/関数が、機能内共通(ローカル)の変数/関数、又は、グローバルな変数/関数であるか否か判定する(ステップS56)。これは、例えば後述する図18(b)の処理説明で示す各種関数/変数の判定方法により、何れかに該当する場合には、ステップS56の判定はYESであるものとする。
上記ステップS61の詳細を、図18(b)に示す。
*各関数/変数の規約例
尚、下記の具体例は、機能コードが“SCI”の例を示す。
(a)機能コードの判定
本例では、プログラムファイル名の先頭部分が、機能コードの大文字+“_”(アンダースコア)となっているものとする。よって、この例では“_”の前の部分を機能コードと認識することになる。
(b)API関数(グローバル関数)
関数名の先頭が、機能コードの大文字+“_”(アンダースコア)
例: SCI_Initial(void);
(c)ローカル関数
関数名の先頭が、機能コードの先頭1文字が大文字で残りが小文字+“_”(アンダースコア)
例: Sci_FifoSet(void);
(d)グローバル変数
“g_”+ 機能コードの先頭1文字が大文字で残りが小文字
例:g_SciSendState;
(e)ローカル変数
“g”+ 機能コードの先頭1文字が大文字で残りが小文字
例: gSciExpcntlUS;
図18(b)において、まず、関数か否かを判定する(ステップS71)。これは、そのプログラム言語のルールに従って判断処理を作成しておけばよい。例えばC言語の場合には、仮に関数Aを記述する場合には「A(・・・)」というように後ろに必ず括弧が付くので、後ろに括弧がある場合には関数であるものと判定する。但し、この例に限らず、例えば上記(b)、(c)に示すAPI関数(グローバル関数)またはローカル関数の規約に該当する場合に、関数であると判定するようにしてもよい。
また、上記機能コードが全て大文字ではなく(ステップS72,NO)、先頭1文字のみが大文字である場合には(ステップS74,YES)、ローカル関数であるものと判定し(ステップS75)、当該判定結果に応じた検出種別コード(上記の例ではローカル関数は‘2’)を、ファイル26の検出種別コード45のフィールドに格納する(ステップS82)。
この処理では、操作端末1から要求(チェック指示)された階層定義テーブル(作成中)21を読み出して、その機能番号/階層番号を下記のようにチェック/自動生成して、階層定義テーブル(作成中)21を更新する。異常があれば操作端末1へ通知する。
まず、上記のように階層定義テーブル(作成中)21を読み出して(ステップS91)、その全機能分(全レコード)について順次、下記の処理を実行する(ステップS92−S92’間のループ処理)。
矛盾例:機能番号33(階層番号 ― 階層内の通番): 階層番号32
( 2 ― 2 ): 1(2でない)
( 2 ― 1 ): 3(2でない)
( 1 ― 1 ): 2(1でない)
一方、機能番号のみが登録されている場合、すなわち機能番号33は登録されているが階層番号32は未登録である場合には(ステップS93がYESでステップS94がNO)、機能番号33から階層番号を抽出してこれを階層番号32のフィールドに格納する(ステップS97)。尚、上記の通り、機能番号は「階層番号−階層内の通番」であるので、階層番号の部分(−(ハイフン)より前の部分)を抽出すればよい。
整列前
SYS ; 2 ― 2
COM ; 2 ― 1
SCI ; 1 ― 1
整列後
SCI ; 1 ― 1
COM ; 2 ― 1
SYS ; 2 ― 2
尚、機能番号33と階層番号32の両方とも入力無しの場合には(ステップS93、S98がNO)、未入力エラーを操作端末1に通知する(ステップS101)。
図20の処理は、階層定義テーブル(作成中)21を参照して、作成途中のアクセス違反例外登録ファイル(作成中)26を更新させるものである。
そのレコードの検出種別コード45を参照して、関数種別/変数種別を認識して(ステップS113)、それに応じてアクセス違反があるか否かを判定する。
参照元機能コード41と参照先機能コード43と階層定義テーブル(作成中)21とに基づいて、参照元の階層と参照先の階層とを認識し、参照元の階層と同一階層/1階層下をアクセスしている場合が正常であるが、参照元の階層と同一階層/1階層下以外をアクセスしている場合には(参照先が参照元より上の階層、または2階層以上下(した)の階層である場合)、アクセス違反と判定される。
他の機能がアクセスしている場合(参照元機能コード41と参照先機能コード43とが同一ではない場合)、アクセス違反と判定される。ローカル変数/ローカル関数は、同一機能内でのアクセスのみしか許されないからである。
2(ローカル関数) ⇒ −2(ローカル関数 アクセス違反)
3(グローバル変数)⇒ −3(グローバル変数 アクセス違反)
4(ローカル変数) ⇒ −4(ローカル変数 アクセス違反)
上述した処理(後述するS201の処理など)によって、アクセス違反例外登録ファイル(作成中)26は、例えば図13(a)の状態から図13(b)の状態になる。
全て完了したら(上記ループ処理を抜けたら)、そのときの状態でアクセス違反例外登録ファイル(作成中)26を保存する(ステップS126)。つまり、例えば図13(c)の状態で保存されることになる(ファイル26が更新されることになる)。
1:アクセス違反を許容する。
更に、ユーザは、可否判定者47に、任意の氏名(基本的にはユーザ自身の指名)等を入力することになる。
図21は、“階層違反許容の登録処理”のフローチャート図である。
まず、アクセス違反例外登録ファイル(作成中)26(例えば図13(d)に示す状態)を読み出す(ステップS131)。そして、当該ファイル(作成中)26の各レコードを順次処理対象として、ステップS133〜S135の処理を実行する)(ステップS132−S132’間のループ処理)。
そして、呼び出し元と呼び出し先の各機能の組み合わせ(ペア)全てについて(但し、呼び出し先については更に各検出種別について)、それぞれ、ステップS140〜S144の処理を実行することで(ステップS138−S138’間のループ処理、及び、ステップS139−S139’間のループ処理)、これら全ての組み合わせについて「階層違反の有無や許容情報(許容登録数)」が自動的に登録される。
一方、アクセス違反と判定された場合には(ステップS140,NO)、処理対象のペアについて許可の登録があるか否かを判定する(ステップS142)。これは、例えば、上記アクセス違反例外登録ファイル(登録)27に含まれる、上記“アクセス違反の許容数”の登録情報を参照して判定する。上記のように、この登録情報は、アクセス違反が許容されるペア毎に“アクセス違反の許容数”が登録されているので、これらのペアの中に処理対象のペアがある場合には、許可の登録があると判定する(ステップS142,YES)。そして、この場合には、処理対象のペアに対応する上記“アクセス違反の許容数”を取得して、「“アクセス違反の許容数”+1」を、階層定義テーブル(作成中)21における処理対象のペアに対応する「階層違反の有無や許容情報(許容登録数)」の欄に設定する(ステップS143)。
階層評価時に、前回のプログラム評価処理(旧バージョンのプログラム等)の際に登録された階層定義テーブル(登録)22(前回階層定義テーブルというものとする)と、今回の評価対象プログラムについて新規作成した階層定義テーブル(登録)22(今回階層定義テーブルというものとする)を読み込み、両者の差分情報を以下の手順で検出して通知する。
図23は、“アクセス違反例外登録ファイル比較処理”のフローチャート図である。
まず、上記前回アクセス違反例外登録ファイルと今回アクセス違反例外登録ファイルとを読み込む(ステップS161)。そして、両者を比較して差分をとり(ステップS162)、変更があるか否か(例えば削除されたレコードまたは追加されたレコードがあるか否か)を判定する(ステップS163)。
図24は、点数化タスク部12の処理フローチャート図である。
図24(a)に示すように、概略的には点数化処理を実行し(ステップS171)、正常終了した場合には(ステップS172,YES)算出結果をサーバメイン処理に通知し(ステップS173)、正常終了ではない場合には(ステップS172,NO)エラー内容をサーバメイン処理に通知する(ステップS174)。
(1)処理実行可能か否かの確認
点数化タスク部12は、まず、点数化に必要な情報があるか否かを判定する(ステップS181)。これは、例えば以下の2点を判定し、2点ともOKであれば点数化に必要な情報があると判定する
・階層定義テーブル(登録)22と動作情報定義テーブル23に定義が設定されている(但し、動作情報定義テーブル23は必ずしも必要なものではない;必須ではない)。
・プログラムソース28が登録済みである。
(2)機能毎にプログラムステップ数を計数・登録する。
一例としては例えば、“xxxx_yyyy_abcdef.c”(xxxx:階層、yyyy:機能コード)のように、プログラムの命名規約を決定しておき、プログラムソース28を構成する各プログラムソースファイルのファイル名は、この命名規約に従って付与させるようにする。尚、規約に反するプログラムはエラーとするチェック機能を別途備えるようにしてもよい。
ディレクトリ構造をソフトウェア階層と同じにして、その中に各プログラムソースファイルを格納する(例えばSCIというディレクトリに、機能コードがSCIである機能に係る全てのプログラムソースファイルを格納する。
階層と機能とプログラムソースファイル名との対応関係を、定義ファイル(不図示の定義マクロ、又は、定義テーブル等)に登録する。すなわち、この定義ファイルを参照すれば、どのプログラムソースファイルが、どの階層のどの機能に対応するものであるか判別できるようにする。
(3)アクセス違反を計数する。
(4)違反の計数結果に対して重み付けを行う。
(5)アクセス違反を点数化する。
評価点数の算出方法については、既に一例を用いて説明済みであるので、ここでは以下に簡単に説明するのみとする。
(6)偏差値を算出する
上記算出した評価点数を記憶すると共に、過去に他の製品等に関して上記“評価点数”が算出されて記憶されていた場合には、当該評価点数が記憶(登録)されている製品数が、予め任意に設定されている所定値以上(本例では5以上)であれば(ステップS186,YES)、偏差値を算出する(ステップS187)。
尚、評価点数算出・登録済みの製品数が所定値未満(5未満)である場合には(ステップS186,NO)、そのままステップS188の処理へ移行する。
(7)処理結果をサーバメイン処理に返す。
プログラム開発担当者等は、任意のプログラムを作成すると、上記管理サーバ10によってそのプログラム構造を解析・点数化させることで、その評価点数、偏差値等によって、プログラムがソフトウェア構造設計通りに作成できたか、あるいは少なくとも過去の他製品に比べてレベルダウンしていないこと等を確認することができる。これは、数値化・点数化が行われたことで、客観的な分かり易い評価基準が示されるので、容易に的確な評価・判断を行うことができることになる。そして、たとえば、もし、レベルダウンしていると判断されるならば、開発担当者等は、プログラムの見直しを行うことになる。
・プログラムそのものを見なくても、ソフトウェア構造を確認できる(開発効率化)。
・ソフトウェア構造が変わらないので、メンテナンス性を維持できる(保守性維持)。
尚、上記のようなソフトウェア構造設計の制限は、完全に守らなくても(多少違反があっても)、直ちにソフトウェアが正常に動作しないものとなるというものではない。例えば、一応は正常に動作するが、上記制限がある程度以上守られている(少なくとも過去よりは悪くなっていない)ことを確認したい場合(品質が下がらないことを確認したい場合)等に、本システムが有効利用できることになる。
*機能コードの判別
各プログラムソースファイルのファイル名の一部に、それが関係する機能の機能コードが含まれるようにしている。すなわち、例えば、予め決めたルールに従って、各プログラムソースファイル名の先頭が「機能コードを示す大文字+“_”(アンダースコア)」となっている。尚、ここでは、更に、機能コードは3文字であるという規定もあるものとする。
よって、上記の例では、機能コード(機能名と見做してもよい)は“SCI”であると判定する。尚、必ずしも1つの機能に1つのプログラムソースファイルのみが対応するとは限らない。1つの機能に複数のプログラムソースファイルが対応しても構わない。換言すれば、機能コードは、複数のプログラムソースファイルをグループ化するもの(複数のプログラムソースファイルから構成される機能に対して割当てられるもの)であってもよい。上記の例で言えば上記“SCI_Driver.c”以外にもファイル名の先頭3文字が“SCI”であるプログラムソースファイルが存在するかもしれないことになる。
*API関数の判別
API関数である関数は、全て、その関数名の先頭が「機能コードの大文字+“_”(アンダースコア)」となっている。
尚、図25には上記具体例を用いたプログラム例が示してある。
*ローカル関数の判別
ローカル関数である関数は、全て、その関数名の先頭が「機能コードの先頭1文字が大文字で残りが小文字+“_”(アンダースコア)」となっている。
尚、図25には上記具体例を用いたプログラム例が示してある。
*グローバル変数の判別
グローバル変数である変数は、全て、その変数名の先頭が「“g_”+ 機能コードの先頭1文字が大文字で残りが小文字」となっている。
尚、図25には上記具体例を用いたプログラム例が示してある。
*ローカル変数の判別
ローカル変数である変数は、全て、その変数名の先頭が「“g”+ 機能コードの先頭1文字が大文字で残りが小文字」となっている。
尚、図25には上記具体例を用いたプログラム例が示してある。
尚、上記の例では、機能コードに関するルールとして「先頭にはgは使わない」を追加することが望ましい。
図24(b)において、評価対象のプログラムソース28を構成する全てのプログラムソースファイルを、順次、解析対象として(ステップS191)、解析対象のプログラムソースファイルについてステップS192〜S196の解析処理を行うことを繰り返す。そして、全プログラムソースファイルについて解析処理が完了したら、ステップS197の処理を行って、本処理は終了する。
まず、解析対象のプログラムソースファイルのファイル名に基づいて、その機能コード(機能名)を判定する(ステップS192)。上記一例の場合、プログラムソースファイル名=SCI_Driver.cであることから、機能コード(機能名)は“SCI”であると判定する。また、図4に示す例では、機能コード34が“SCI”の機能の機能番号33は、「機能1−1」となっている。つまり、これが、上記階層定義テーブル(登録)22における呼び出し元36の機能番号となる。
尚、上記図15〜図24に示すフローチャートの処理は、管理サーバ10の不図示のCPU等が、不図示の記憶装置(ハードディスク、メモリ等)に予め記憶されている所定のアプリケーションプログラムを読出し・実行することにより実現される。
また、上述したように、旧ソフトウェア(レガシー資産)を利用して改造等を行って新規ソフトウェアとして作成する場合もあるが、レガシー資産における違反は、違反であることが分かっていても修正することが困難な場合が少なくなく、現状維持(それ以上違反を増やさない)が出来ればよいとする場合がある。しかしながら、新規ソフトウェア作成の際に、違反の削除と追加が同時に発生すると、追加の違反が見過ごされる可能性がある。例えば、違反が1つ増えて1つ減った場合には、トータルの違反数は変化がないので、新規違反発生を見逃す可能性がある。
(1)階層定義テーブルの半自動生成を実現できる。例えばユーザが階層定義や違反の許容の有無を設定するだけで、階層定義テーブル(登録)22が自動的に作成される(開発効率化)。
(2)新規に発生したアクセス違反を見過ごすことが無くなる。(保守性維持)
尚、上述した管理サーバ10の各種処理機能は、換言すれば、管理サーバ10は下記の各種処理機能部(不図示)を有するものと言うこともできる。
違反有無情報記憶部は、複数の機能より成るソフトウェアの機能間のアクセスに係る制限に従って、呼び出し元となる機能と呼び出し先となる機能の関数種別/変数種別との組み合わせである機能ペア毎に、違反の有無、または/及び、違反許容数が格納された違反有無情報を記憶する。
評価点数算出部は、該集計部による違反件数の集計結果に基づいて、上記評価対象のソフトウェア全体または/及びその各機能毎の評価点数を算出する。
また、例えば、上記違反有無情報生成部は、
上記評価対象のソフトウェアから各機能に係る所定のデータ項目のデータを抽出して、これを初期状態の違反有無情報に格納するプログラム解析部と、
上記プログラム解析部の処理後の上記違反有無情報に対して、階層に係るデータ項目のデータを設定させる階層データ設定部とを有するものであってもよい。
上記アクセス違反例外情報を参照して、上記記憶された機能ペア毎にアクセス違反か否かを判定し、アクセス違反ではないと判定された機能ペアは上記アクセス違反例外情報から削除し、アクセス違反であると判定された機能ペアに対して違反種別を記憶するアクセス違反判別部を更に有するものであってもよい。
上記アクセス違反判別部による処理後の上記アクセス違反例外情報の上記機能ペア毎に、そのアクセス違反を許容するか否かを任意に設定させる違反許容設定部を更に有するものであってもよい。
上記違反許容設定部による設定後の上記アクセス違反例外情報を用いて、上記階層データ設定部による設定後の上記違反有無情報に対して、当該違反有無情報における上記機能ペア毎の違反の有無または/及び違反許容数を自動的に設定する違反有無情報設定部を更に有するものであってもよい。
2 ネットワーク
10 管理サーバ
11 サーバメイン処理部
12 点数化タスク部
13 定義アクセスタスク部
14 定義生成タスク部
15 偏差値計数ファイル
21 階層定義テーブル(作成中)
22 階層定義テーブル(登録)
23 動作情報定義テーブル
24 アクセス違反計数ファイル
25 アクセス違反点数化ファイル
26 アクセス違反例外登録ファイル(作成中)
27 アクセス違反例外登録ファイル(登録)
28 プログラムソース
31 機能名
32 階層番号(レイヤ)
33 機能番号
34 機能コード
35 呼び出し先
36 呼び出し元
41 参照元機能コード
42 ソース名
43 参照先機能コード
44 検出対象名称
45 検出種別コード
46 例外アクセス許可フラグ
47 可否判定者
51 機能名
52 階層番号(レイヤ)
53 機能番号
54 機能コード
55 呼び出し先
56 呼び出し元
Claims (20)
- 任意のソフトウェアについて所定の評価を行うためのコンピュータシステムにおいて、
複数の機能より成るソフトウェアの機能間のアクセスに係る制限に従って、呼び出し元となる機能と呼び出し先となる機能の関数種別/変数種別との組み合わせである機能ペア毎に、違反の有無、または/及び、違反許容数が格納された違反有無情報を記憶する違反有無情報記憶手段と、
評価対象のソフトウェアのプログラムソース文を順次参照して、任意の機能から他の機能の任意の関数/変数を呼び出す処理を検出する毎に、該呼び出し先の関数/変数の関数種別/変数種別を判別して、さらに前記違反有無情報を参照して、該呼び出しが違反か否かを判定する違反判定手段と、
前記違反判定手段による判定結果に基づいて、前記各機能毎または/及び前記評価対象のソフトウェア全体の違反件数を集計する集計手段と、
該集計手段による違反件数の集計結果に基づいて、前記評価対象のソフトウェア全体または/及びその各機能毎の評価点数を算出する評価点数算出手段と、
予め、前記評価対象のソフトウェアに基づいて、前記違反有無情報を生成して前記違反有無情報記憶手段に記憶させる違反有無情報生成手段と、
を有することを特徴とするプログラム構造評価システム。 - 前記違反有無情報生成手段は、
前記評価対象のソフトウェアから各機能に係る所定のデータ項目のデータを抽出して、これを初期状態の違反有無情報に格納するプログラム解析手段と、
前記プログラム解析手段の処理後の前記違反有無情報に対して、階層に係るデータ項目のデータを設定させる階層データ設定手段とを有する、
ことを特徴とする請求項1記載のプログラム構造評価システム。 - 前記違反有無情報は、任意の機能の識別情報である機能名または/及び機能コードと、該機能の階層を示す階層番号、または/及び、該階層番号が含まれる機能番号の各データ項目を有し、
前記抽出される、各機能に係る所定のデータ項目は、前記機能名または/及び前記機能コードであり、
前記設定させる、前記階層に係る任意のデータ項目は、前記階層番号または/及び前記機能番号であることを特徴とする請求項2記載のプログラム構造評価システム。 - 階層データ設定手段は、
前記階層番号と前記機能番号の両方が設定された場合には、両者が整合するか否かをチェックし、
前記階層番号と前記機能番号の何れか一方が設定された場合には、該設定データに基づいて他方のデータを生成することを特徴とする請求項3記載のプログラム構造評価システム。 - 前記プログラム解析手段は、更に、前記評価対象のソフトウェアから、前記機能ペアを示すデータを抽出して、該機能ペアデータを初期状態のアクセス違反例外情報に記憶することを特徴とする請求項2記載のプログラム構造評価システム。
- 前記違反有無情報生成手段は、
前記アクセス違反例外情報を参照して、前記記憶された機能ペア毎にアクセス違反か否かを判定し、アクセス違反ではないと判定された機能ペアは前記アクセス違反例外情報から削除し、アクセス違反であると判定された機能ペアに対して違反種別を記憶するアクセス違反判別手段を更に有することを特徴とする請求項5記載のプログラム構造評価システム。 - 前記違反有無情報生成手段は、
前記アクセス違反判別手段による処理後の前記アクセス違反例外情報の前記機能ペア毎に、そのアクセス違反を許容するか否かを任意に設定させる違反許容設定手段を更に有することを特徴とする請求項6記載のプログラム構造評価システム。 - 前記違反有無情報生成手段は、
前記違反許容設定手段による設定後の前記アクセス違反例外情報を用いて、前記階層データ設定手段による設定後の前記違反有無情報に対して、当該違反有無情報における前記機能ペア毎の違反の有無または/及び違反許容数を自動的に設定する違反有無情報設定手段を更に有することを特徴とする請求項7記載のプログラム構造評価システム。 - 前記評価対象のソフトウェアに対応する前記アクセス違反例外情報と、該評価対象のソフトウェアに関連する別のソフトウェアに対応して生成済みであった前記アクセス違反例外情報である前回アクセス違反例外情報とを相互に比較して、相違がある場合には相違点を抽出する違反増減検出手段を更に有することを特徴とする請求項1〜8の何れかに記載のプログラム構造評価システム。
- 前記評価対象のソフトウェアに対応する前記違反有無情報と、該評価対象のソフトウェアに関連する別のソフトウェアに対応して生成済みであった前記違反有無情報である前回違反有無情報とを相互に比較して、登録されている機能に相違がある場合には相違点を抽出する機能変化検出手段を更に有することを特徴とする請求項1〜9の何れかに記載のプログラム構造評価システム。
- 他の複数のソフトウェアについてそれぞれ前記評価点数が算出済みである場合に、前記評価対象のソフトウェアの評価点数も含む該複数の評価点数に基づいて、前記評価対象のソフトウェアの評価点数について偏差値を算出する偏差値算出手段を更に有することを特徴とする請求項1〜10の何れかに記載のプログラム構造評価システム。
- 予め前記関数種別/変数種別毎に所定の重み値が登録された重み値記憶手段を更に有し、
前記集計手段は、前記違反件数の集計の際に前記各関数種別/各変数種別毎の集計結果に対してそれぞれ該当する重み値を乗算して補正し、
前記評価点数算出手段は、該補正後の集計結果に基づいて前記評価点数の算出を行うことを特徴とする請求項1〜10の何れかに記載のプログラム構造評価システム。 - 前記評価点数算出手段は、前記各機能毎の評価点数を算出する際に、前記各関数種別/各変数種別毎の違反件数の集計結果に基づいて、単位ステップ数当りの違反件数を求め、該単位ステップ数当りの違反件数に基づいて前記評価点数を求めることを特徴とする請求項1〜11の何れかに記載のプログラム構造評価システム。
- 前記評価点数算出手段は、前記単位ステップ数当りの違反件数に対して予め設定される足きりの閾値を用いて足きりを行った後の値を用いて前記評価点数を求めることを特徴とする請求項12記載のプログラム構造評価システム。
- 前記各機能は、それぞれ、1または複数のプログラムソースファイルによって実現され、
前記各関数種別は、API関数、ローカル関数であり、
前記各変数種別は、グローバル変数、ローカル変数であることを特徴とする請求項1〜14の何れかに記載のプログラム構造評価システム。 - 前記プログラムソース文における前記関数/変数の名称には、その関数/変数の属する機能を示す情報と、その関数/変数の関数種別/変数種別を示す情報とが含まれていることを特徴とする請求項1〜15の何れかに記載のプログラム構造評価システム。
- 前記複数の機能より成るソフトウェアは、該複数の機能が階層化されたソフトウェア構造となっており、
該ソフトウェアに係る前記機能間のアクセスに係る制限事項は、少なくとも相対的に下位側の機能から上位側の機能を呼び出すことは違反であること、及び、任意の機能から他の機能の前記ローカル関数/ローカル変数を呼び出すことであることを特徴とする請求項16記載のプログラム構造評価システム。 - 前記評価対象のソフトウェアは、組込みソフトウェアであり、
前記階層化されたソフトウェア構造は、上位層がアプリケーション、中間層がミドルウェア、下位層がドライバであることを特徴とする請求項17記載のプログラム構造評価システム。 - 任意のソフトウェアについて所定の評価を行うためのコンピュータシステムにおいて、
端末とサーバ装置とがネットワークに接続されたシステムであって、
前記サーバ装置は、
複数の機能より成るソフトウェアの機能間のアクセスに係る制限に従って、呼び出し元となる機能と呼び出し先となる機能の関数種別/変数種別との組み合わせである機能ペア毎に、違反の有無、または/及び、違反許容数が格納された違反有無情報を記憶する違反有無情報記憶手段と、
評価対象のソフトウェアのプログラムソース文を順次参照して、任意の機能から他の機能の任意の関数/変数を呼び出す処理を検出する毎に、該呼び出し先の関数/変数の関数種別/変数種別を判別して、さらに前記違反有無情報を参照して、該呼び出しが違反か否かを判定する違反判定手段と、
前記違反判定手段による判定結果に基づいて、前記各機能毎または/及び前記評価対象のソフトウェア全体の違反件数を集計する集計手段と、
該集計手段による違反件数の集計結果に基づいて、前記評価対象のソフトウェア全体または/及びその各機能毎の評価点数を算出する評価点数算出手段と、
予め、前記評価対象のソフトウェアに基づいて、前記違反有無情報を生成して前記違反有無情報記憶手段に記憶させる違反有無情報生成手段と、
を有することを特徴とするプログラム構造評価システム。 - コンピュータを、
複数の機能より成るソフトウェアの機能間のアクセスに係る制限に従って、呼び出し元となる機能と呼び出し先となる機能の関数種別/変数種別との組み合わせである機能ペア毎に、違反の有無、または/及び、違反許容数が格納された違反有無情報を記憶する違反有無情報記憶手段と、
評価対象のソフトウェアのプログラムソース文を順次参照して、任意の機能から他の機能の任意の関数/変数を呼び出す処理を検出する毎に、該呼び出し先の関数/変数の関数種別/変数種別を判別して、さらに前記違反有無情報を参照して、該呼び出しが違反か否かを判定する違反判定手段と、
前記違反判定手段による判定結果に基づいて、前記各機能毎または/及び前記評価対象のソフトウェア全体の違反件数を集計する集計手段と、
該集計手段による違反件数の集計結果に基づいて、前記評価対象のソフトウェア全体または/及びその各機能毎の評価点数を算出する評価点数算出手段と、
予め、前記評価対象のソフトウェアに基づいて、前記違反有無情報を生成して前記違反有無情報記憶手段に記憶させる違反有無情報生成手段、
として機能させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012205081A JP6076660B2 (ja) | 2012-09-18 | 2012-09-18 | プログラム構造評価システム、プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012205081A JP6076660B2 (ja) | 2012-09-18 | 2012-09-18 | プログラム構造評価システム、プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014059775A true JP2014059775A (ja) | 2014-04-03 |
JP6076660B2 JP6076660B2 (ja) | 2017-02-08 |
Family
ID=50616180
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012205081A Expired - Fee Related JP6076660B2 (ja) | 2012-09-18 | 2012-09-18 | プログラム構造評価システム、プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6076660B2 (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016110174A (ja) * | 2014-12-02 | 2016-06-20 | 株式会社東芝 | 情報処理システム、サーバ及びプログラム |
US11281566B2 (en) | 2018-07-23 | 2022-03-22 | Mitsubishi Electric Corporation | Scoring device, computer readable medium, and scoring method |
US11379224B2 (en) | 2017-02-16 | 2022-07-05 | Mitsubishi Electric Corporation | Scale calculation apparatus and computer readable medium |
KR102520579B1 (ko) * | 2022-11-11 | 2023-04-10 | 정희용 | 메타버스 기반 교육 시스템 |
KR102534785B1 (ko) * | 2022-11-11 | 2023-05-18 | 정희용 | 소프트웨어 교육 결과물에 대한 가상자산화 장치 |
KR20230111304A (ko) * | 2022-01-18 | 2023-07-25 | 정희용 | 메타버스 기반 교육 플랫폼 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008102831A (ja) * | 2006-10-20 | 2008-05-01 | Hitachi Ltd | 情報提供装置、プログラム及び情報提供方法 |
JP2008197731A (ja) * | 2007-02-08 | 2008-08-28 | Mitsubishi Electric Corp | 静的解析結果の分析表示装置 |
JP2010122907A (ja) * | 2008-11-19 | 2010-06-03 | Nec Corp | 層構造システム関連抽出装置、層構造システム関連抽出方法およびプログラム |
JP2012033017A (ja) * | 2010-07-30 | 2012-02-16 | Fujitsu Marketing Ltd | 規則検査装置、規則検査方法及び規則検査プログラム |
-
2012
- 2012-09-18 JP JP2012205081A patent/JP6076660B2/ja not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008102831A (ja) * | 2006-10-20 | 2008-05-01 | Hitachi Ltd | 情報提供装置、プログラム及び情報提供方法 |
JP2008197731A (ja) * | 2007-02-08 | 2008-08-28 | Mitsubishi Electric Corp | 静的解析結果の分析表示装置 |
JP2010122907A (ja) * | 2008-11-19 | 2010-06-03 | Nec Corp | 層構造システム関連抽出装置、層構造システム関連抽出方法およびプログラム |
JP2012033017A (ja) * | 2010-07-30 | 2012-02-16 | Fujitsu Marketing Ltd | 規則検査装置、規則検査方法及び規則検査プログラム |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016110174A (ja) * | 2014-12-02 | 2016-06-20 | 株式会社東芝 | 情報処理システム、サーバ及びプログラム |
US11379224B2 (en) | 2017-02-16 | 2022-07-05 | Mitsubishi Electric Corporation | Scale calculation apparatus and computer readable medium |
US11281566B2 (en) | 2018-07-23 | 2022-03-22 | Mitsubishi Electric Corporation | Scoring device, computer readable medium, and scoring method |
KR20230111304A (ko) * | 2022-01-18 | 2023-07-25 | 정희용 | 메타버스 기반 교육 플랫폼 |
KR102675332B1 (ko) * | 2022-01-18 | 2024-06-14 | 정희용 | 메타버스 기반 교육 플랫폼 |
KR102520579B1 (ko) * | 2022-11-11 | 2023-04-10 | 정희용 | 메타버스 기반 교육 시스템 |
KR102534785B1 (ko) * | 2022-11-11 | 2023-05-18 | 정희용 | 소프트웨어 교육 결과물에 대한 가상자산화 장치 |
WO2024101496A1 (ko) * | 2022-11-11 | 2024-05-16 | 정희용 | 메타버스 기반 교육 시스템 |
WO2024101497A1 (ko) * | 2022-11-11 | 2024-05-16 | 정희용 | 소프트웨어 교육 결과물에 대한 가상자산화 장치 |
Also Published As
Publication number | Publication date |
---|---|
JP6076660B2 (ja) | 2017-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6076660B2 (ja) | プログラム構造評価システム、プログラム | |
Fan et al. | Improving data quality: Consistency and accuracy | |
US8589884B2 (en) | Method and system for identifying regression test cases for a software | |
US20080120601A1 (en) | Information processing apparatus, method and program for deciding priority of test case to be carried out in regression test background of the invention | |
US20070214173A1 (en) | Program, method, and apparatus for supporting creation of business process model diagram | |
Flöck et al. | WikiWho: Precise and efficient attribution of authorship of revisioned content | |
CN109408385B (zh) | 一种基于缺陷规则和分类反馈的缺陷发现方法 | |
CN111694612A (zh) | 配置检查方法、装置、计算机系统及存储介质 | |
CN110991065B (zh) | 一种建筑信息模型中设计变更自动识别方法 | |
JP2016126552A (ja) | テスト選択プログラム、テスト選択方法、及びテスト選択装置 | |
CN114661423A (zh) | 集群配置检测方法、装置、计算机设备及存储介质 | |
JP2005301859A (ja) | コード検索プログラム及びコード検索装置 | |
KR100786261B1 (ko) | 메타데이터 저장소에의 메타데이터 자동적재 방법 | |
JP6668494B2 (ja) | データ分析装置およびデータ分析方法 | |
CN108804308B (zh) | 新版本程序缺陷检测方法及装置 | |
JP6451417B2 (ja) | デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム | |
CN114791865A (zh) | 一种基于关系图的配置项自洽性检测方法、系统和介质 | |
JP6217440B2 (ja) | シンボリック実行プログラム、シンボリック実行方法及びシンボリック実行装置 | |
JP2013131128A (ja) | プログラム構造評価システム、プログラム | |
JP6748357B2 (ja) | 解析装置、解析プログラムおよび解析方法 | |
CN106293897B (zh) | 组件自动化调度系统 | |
CN114925240B (zh) | 一种资源元数据构建方法、装置、控制设备及存储介质 | |
JP7542500B2 (ja) | 妥当性確認方法、妥当性確認システム及びプログラム | |
US20240160633A1 (en) | Computer-readable recording medium storing information processing program, information processing method, and information processing device | |
JP3104586B2 (ja) | 設計支援方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20150812 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20160520 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20160614 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160722 |
|
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: 20161220 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170111 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6076660 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |