"任意のソフトウェアのプログラムソースについて所定の評価を行うためのコンピュータシステムにおいて、複数の機能より成るソフトウェアの機能間のアクセスに係る制限に従って、呼び出し元となる機能と呼び出し先となる任意の機能の関数種別/変数種別との組み合わせ毎に、違反の有無が登録された違反有無記憶手段と、評価対象のソフトウェアのプログラムソース文を順次参照して、任意の機能の任意の関数から他の機能の任意の関数/変数を呼び出す処理を検出する毎に、該呼び出し先の関数/変数の関数種別/変数種別を判別して、さらに前記違反有無記憶手段を参照して、該呼び出しが違反か否かを判定する違反判定手段と、前記違反判定手段による判定結果に基づいて、前記各機能毎または/及び前記評価対象のソフトウェア全体の違反件数を集計する集計手段と、該集計手段による違反件数の集計結果に基づいて、前記評価対象のソフトウェア全体または/及びその各機能毎の評価点数を算出する評価点数算出手段と、を有することを特徴とするプログラム構造評価システム。他の複数のソフトウェアについてそれぞれ前記評価点数が算出済みである場合に、前記評価対象のソフトウェアの評価点数も含む該複数の評価点数に基づいて、前記評価対象のソフトウェアの評価点数について偏差値を算出する偏差値算出手段を更に有することを特徴とする請求項1記載のプログラム構造評価システム。予め前記関数種別/変数種別毎に所定の重み値が登録された重み値記憶手段を更に有し、前記集計手段は、前記違反件数の集計の際に前記各関数種別/各変数種別毎の集計結果に対してそれぞれ該当する重み値を乗算して補正し、前記評価点数算出手段は、該補正後の集計結果に基づいて前記評価点数の算出を行うことを特徴とする請求項1または2記載のプログラム構造評価システム。前記評価点数算出手段は、前記各機能毎の評価点数を算出する際に、前記各関数種別/各変数種別毎の違反件数の集計結果に基づいて、単位ステップ数当りの違反件数を求め、該単位ステップ数当りの違反件数に基づいて前記評価点数を求めることを特徴とする請求項1~3の何れかに記載のプログラム構造評価システム。前記評価点数算出手段は、前記単位ステップ数当りの違反件数に対して予め設定される足きりの閾値を用いて足きりを行った後の値を用いて前記評価点数を求めることを特徴とする請求項4記載のプログラム構造評価システム。前記各機能は、それぞれ、1または複数のプログラムソースファイルによって実現され、前記各関数種別は、API関数、ローカル関数であり、前記各変数種別は、グローバル変数、ローカル変数であることを特徴とする請求項1~5の何れかに記載のプログラム構造評価システム。前記プログラムソース文における前記関数/変数の名称には、その関数/変数の属する機能を示す情報と、その関数/変数の関数種別/変数種別を示す情報とが含まれていることを特徴とする請求項1~6の何れかに記載のプログラム構造評価システム。前記複数の機能より成るソフトウェアは、該複数の機能が階層化されたソフトウェア構造となっており、該ソフトウェアに係る前記機能間のアクセスに係る制限事項は、少なくとも相対的に下位側の機能から上位側の機能を呼び出すことは違反であること、及び、任意の機能から他の機能の前記ローカル関数/ローカル変数を呼び出すことであることを特徴とする請求項6記載のプログラム構造評価システム。前記評価対象のソフトウェアは、組込みソフトウェアであり、前記階層化されたソフトウェア構造は、上位層がアプリケーション、中間層がミドルウェア、下位層がドライバであることを特徴とする請求項8記載のプログラム構造評価システム。任意のソフトウェアのプログラムソースについて所定の評価を行うためのコンピュータシステムにおいて、端末とサーバ装置とがネットワークに接続されたシステムであって、前記サーバ装置は、複数の機能より成るソフトウェアの機能間のアクセスに係る制限に従って、呼び出し元となる機能と呼び出し先となる任意の機能の関数種別/変数種別との組み合わせ毎に、違反の有無が登録された違反有無記憶手段と、前記端末から前記ネットワークを介して所定の点数化要求があると、評価対象のソフトウェアのプログラムソース文を順次参照して、任意の機能の任意の関数から他の機能の任意の関数/変数を呼び出す処理を検出する毎に、該呼び出し先の関数/変数の関数種別/変数種別を判別して、さらに前記違反有無記憶手段を参照して、該呼び出しが違反か否かを判定する違反判定手段と、前記違反判定手段による判定結果に基づいて、前記各機能毎または/及び前記評価対象のソフトウェア全体の違反件数を集計する集計手段と、該集計手段による違反件数の集計結果に基づいて、前記評価対象のソフトウェア全体または/及びその各機能毎の評価点数を算出する評価点数算出手段と、を有することを特徴とするプログラム構造評価システム。コンピュータを、複数の機能より成るソフトウェアの機能間のアクセスに係る制限に従って、呼び出し元となる機能と呼び出し先となる任意の機能の関数種別/変数種別との組み合わせ毎に、違反の有無が登録された違反有無記憶手段と、評価対象のソフトウェアのプログラムソース文を順次参照して、任意の機能の任意の関数から他の機能の任意の関数/変数を呼び出す処理を検出する毎に、該呼び出し先の関数/変数の関数種別/変数種別を判別して、さらに前記違反有無記憶手段を参照して、該呼び出しが違反か否かを判定する違反判定手段と、前記違反判定手段による判定結果に基づいて、前記各機能毎または/及び前記評価対象のソフトウェア全体の違反件数を集計する集計手段と、該集計手段による違反件数の集計結果に基づいて、前記評価対象のソフトウェア全体または/及びその各機能毎の評価点数を算出する評価点数算出手段、として機能させるためのプログラム。ここで、従来より、プログラム自体を品質特性に従って点数化するツールは存在する例えばオージス総研のAdquaアドクア;登録商標や、東陽テクニカ等のeXquto登録商標等。例えばAdquaアドクアは、組込みソフトウェアの品質を定量的に評価できるツールである。具体的には、ソフトウェアを信頼性効率性保守性移植性再利用性の5つの品質特性の観点で得点化する。ここで、上記ソフトウェア構造の規定として、例えば、複数の機能より成るソフトウェアにおける機能間のアクセス呼び出し等に係る制限事項が設けられたものがある。これは、例えば関数間のアクセスに係る制限や、関数から変数へのアクセスに係る制限等である。あるいは、上記複数の機能が階層構造になっている場合には、この様な階層に係る制限事項も含まれる。この様な意味でのソフトウェア構造の規定制限に従ってプログラムが作成する場合も、当然、何らかの理由で違反が生じることは有り得る。違反件数の多さは、品質に影響する。また、過去に作成されたプログラムを改造する場合には、少なくとも品質を落とさないようにすることが望まれる。例えば、オブジェクト指向プログラムの場合、クラス図などを作成して、これに従ってプログラム作成や継承等を行うが、古いソフトウェア等はこの様なモデル化設計思想ではなく旧来の構造化設計思想に基づいて作成されており、また、この様な古いソフトウェアレガシー資産を再利用するために改造を行い新規ソフトウェアとして作成する場合もある。この様な過去の古いソフトウェアに対して上記ソフトウェア構造に従った評価を行うと、違反件数が多数となる場合が少なくない。そして、この様な過去の古いソフトウェアから改造版等を作成する場合、違反であることが分かっていても修正することが困難な場合が少なくなく、現状維持それ以上違反を増やさないが出来ればよいとする場合がある。以上のことから、上述した意味でのソフトウェア構造に従ったプログラム作成が行われているか否か例えば、最低限、現状維持できているか等の判断を、プログラム全文をチェックして評価するような手間が掛かる作業を行う必要なく、行えるようにすることが望まれる。これは、例えば、上記違反に関して点数化を行うことで、客観的且つ的確な判断が行えるようにすることが望まれる。一方、上述したAdqua等の既存ツールや、特許文献1,2の従来技術では、上述した意味でのソフトウェア構造の規定、すなわち上記複数の機能より成るソフトウェアにおける機能間のアクセスに係る制限事項や階層に係る制限事項に関して、点数化して評価することは何等考えられていない。本発明の課題は、複数の機能より成るソフトウェアにおける機能間のアクセスに係る制限があるソフトウェア構造設計に従ったプログラム作成が行われたか否かについて、プログラムを解析点数化することで容易に評価可能とするプログラム構造評価システム等を提供することである。本発明のプログラム構造評価システムは、複数の機能より成るソフトウェアの機能間のアクセスに係る制限に従って、呼び出し元となる機能と呼び出し先となる任意の機能の関数種別/変数種別との組み合わせ毎に、違反の有無が登録された違反有無記憶手段と、評価対象のソフトウェアのプログラム文を順次参照して、任意の機能の任意の関数から他の機能の任意の関数/変数を呼び出す処理を検出する毎に、該呼び出し先の関数/変数の関数種別/変数種別を判別して、さらに前記違反有無記憶手段を参照して、該呼び出しが違反か否かを判定する違反判定手段と、前記違反判定手段による判定結果に基づいて、前記各機能毎または/及び前記評価対象のソフトウェア全体の違反件数を集計する集計手段と、該集計手段による違反件数の集計結果に基づいて、前記評価対象のソフトウェア全体または/及びその各機能毎の評価点数を算出する評価点数算出手段とを有する。上記システムによれば、任意の評価対象のプログラムに関して、上記複数の機能より成るソフトウェアの機能間のアクセスに係る制限に係る違反の有無を判定して点数化することによって、客観的な評価の為の数値が得られる。客観的な分かり易い評価基準が示されるので、容易に的確な評価判断を行うことができることになる。例えば、少なくとも過去の他製品に比べてレベルダウンしていないこと等を確認することができる。本発明のプログラム構造評価システム等によれば、複数の機能より成るソフトウェアにおける機能間のアクセスに係る制限があるソフトウェア構造設計に従ったプログラム作成が行われたか否かについて、プログラムを解析点数化することで容易に評価可能とすることができる。以下、図面を参照して本発明の実施の形態について説明する。図1は、本例のプログラム構造評価システム全体の構成図であって、特に管理サーバの機能構成を示す図である。図示のプログラム構造評価システムは、作業者が操作するための操作端末1と、任意のプログラムに関するソフトウェア構造に係る評価点数化等を実行する管理サ-バ10とが、ネットワーク2に接続された構成となっている。ネットワーク2は、例えばLANやインターネット等の一般的なネットワークであってよい。ネットワーク2を介して、操作端末1と管理サーバ10間でデータ/コマンド等を送受信する。但し、この例に限らない。例えば管理サ-バ10単体でプログラム構造評価システムを構成するものであってもよい。勿論、この場合、操作端末1の機能も管理サ-バ10が有することになる。例えば、後述する各種要求は、例えば管理サ-バ10のキーボード等を開発者等が操作して所望の指示を行うことで、管理サ-バ10自身がサーバメイン処理部11に対してこの指示に応じた要求を発行することになる。操作端末1は、例えば一般的なパソコン等であって、特に図示しないが作業者ユーザに任意のコマンドボタンを選択指定させる為の画面等を表示する機能や、ユーザが選択指定したコマンドボタンに応じた要求コマンドを、ネットワーク2を介して管理サーバ10へと送信する機能等を有する。上記要求の種類としては、たとえば後述する点数化要求や定義の登録要求等がある。管理サーバ10は、サーバメイン処理部11、点数化タスク部12、定義登録タスク部13の各種機能部を有する。これら各種機能部の処理機能は、不図示のCPU等が、不図示の記憶装置ハードディスク、メモリ等に予め記憶されている所定のアプリケーションプログラムを読出し実行することにより実現される。これら各種機能部や上記各種要求に応じた処理については、後に各種フローチャート図等を参照して説明するものとする。また、管理サーバ10は、上記記憶装置等に、偏差値計数ファイル14を記憶保持している。また、管理サーバ10は、上記記憶装置等に、各製品毎に対応する各種情報/プログラムを記憶している。すなわち、図示の例では製品Aと製品Bのそれぞれについて、階層定義テーブル15、動作情報定義テーブル16、アクセス違反計数ファイル17、アクセス違反点数化ファイル18、プログラムソース19等の各種情報/プログラムを記憶している。尚、図では製品Aについての各種情報/プログラムのみ示すが、製品Bについても略同様に、その製品に対応する各種情報/プログラムが記憶される。サーバメイン処理部11は、操作端末1からの何らかの要求を受け付けて、この要求に応じて点数化タスク部12、定義登録タスク部13の何れかを呼び出して処理実行させる。定義登録タスク部13は、操作端末1からの要求が上記定義の登録要求であった場合にサーバメイン処理部11から呼び出されて、当該登録要求された定義情報やプログラム等の登録を実行する。登録対象の定義情報やプログラム等は、上記階層定義テーブル15や動作情報定義テーブル16に格納すべき情報や、プログラムソース19等である。尚、プログラムソース19は、基本的に、複数のプログラムファイルから成る。これら登録対象の情報等は、例えば作業者が操作端末1側で任意に入力/作成したものであるが、この例に限らない。点数化タスク部12は、操作端末1からの要求が任意の製品のプログラムソース19に関する評価点数化等であった場合に、サーバメイン処理部11から呼び出されて、当該プログラムソース19の評価点数化等を行い、場合によっては更に偏差値を作成する。尚、点数化タスク部12の上記点数化等の処理に伴って、上記アクセス違反計数ファイル17、アクセス違反点数化ファイル18が生成される。詳しくは後述する。ここで、図2に、ソフトウェア構造階層と機能の一例を示す。図2のソフトウェア構造例は、複数の機能が階層構造となっているソフトウェア構造の一例であり、第一階層最下層、第二階層中間層、第三階層上位層の3階層あり、各階層毎に2つの機能が存在する。すなわち、第一階層には、機能1-1と機能1-2がある。同様に、第二階層には機能2-1と機能2-2があり、第三階層には機能3-1と機能3-2がある。図2のソフトウェア構造の具体例としては、例えばソフトウェアが何らかの所謂組込みソフトウェアである場合が考えられる。尚、よく知られているように、組込みソフトウェアとは、家電製品や産業機器に組み込まれた特定の機能を提供するためのコンピュータシステム組込みシステム上のソフトウェアである。上記Adqua等は、主に組込みソフトウェアの品質評価に用いられるものである。ここで、組込み用のプログラムに関するソフトウェア構造の一例として、機能が、例えばアプリケーション、ミドルミドルウェア、OSドライバに階層化分類される場合がある。つまり、階層としては、アプリケーションが上位層、ミドルが中間層、OSドライバが最下層下位層となっている。そして、基本的には任意の階層の任意の機能が、自己と同じ階層の他の機能または1段下の階層の他の機能を呼び出すことになる。このうち1段下の階層の呼び出しに関しては、上記の例では、アプリケーションがミドルを呼び出し、ミドルがOSドライバを呼び出すものとなる。上記のことは、換言すれば、2段下の階層の機能を呼び出すことは違反となる。つまり、アプリケーションがOSドライバを呼び出すことは違反となる。更に、上位側の機能を呼び出すことも違反となる。すなわち、ミドルがアプリケーションを呼び出すことや、OSドライバがミドルやアプリケーションを呼び出すことは、違反となる。尚、後述するように、任意の機能に係るローカル変数を他の機能が呼ぶ出すことも違反となる。尚、上記任意の機能から他の機能の呼び出しは、詳細には、例えば任意の機能の関数から他の機能の関数の呼び出しや、任意の機能の関数から他の機能の変数の呼び出し等となる。但し、これに限らず、自機能内での呼び出しも行われる。つまり、任意の機能の関数から同じ機能内の他の関数の呼び出しや、任意の機能の関数から同じ機能内の任意の変数の呼び出し等となる。但し、基本的に自機能内での呼び出しは違反とはならないので、本説明では自機能内での呼び出しに係る説明を省略する場合もあるものとする。上記各機能は、それぞれ、1以上のプログラムソースファイルから構成される。各プログラムソースファイルのプログラム記述に用いられる関数、変数の種類種別は、本例では図2に示すように、API関数、ローカル関数、グローバル変数、ローカル変数等であり、それぞれ下記の特徴と有する。1API関数;機能外からでもアクセスできる関数2ローカル関数;機能内でのみアクセスできる関数3グローバル変数;機能外からでもアクセスさせることを前提とした変数4ロ-カル変数;機能内でのみ使用する変数基本的に、任意の機能におけるローカル関数やローカル変数を、他の機能から呼び出すことは、上記階層構造に関係なく、違反となる。尚、上記APIApplicationProgramInterface関数やローカル関数は関数種別の一例、上記グローバル変数やローカル変数は変数種別の一例と言える。以上、図2を用いて説明したことが、上述した複数の機能より成るソフトウェアにおける機能間のアクセスに係る制限事項や階層に係る制限事項の具体例である。本システムでは、評価対象のソフトウェアプログラムソース19に関して、複数の機能より成るソフトウェアにおける機能間のアクセスに係る制限事項や階層に係る制限事項に係る評価のための点数化を行うことができる。後述するように、本例では、上記関数種別/変数種別毎に違反件数の集計や評価点数の算出等を行うものであるが、この例に限らない。尚、本例では全ての関数はAPI関数とローカル関数の何れかに属するものであり、全ての変数はグローバル変数とローカル変数の何れかに属するものとするが、この例に限らない。例えば開発者等が、事前に、上記図2に示すソフトウェア構造階層と機能に係る制限事項に従って、階層定義テーブル15を作成する。これは、例えば、操作端末1側で作成する特に図示説明はしないが、操作端末1には例えば開発者等が所望の階層定義テーブル15を作成するのを支援する機能等が存在する。階層定義テーブル15は、例えば、複数の機能が階層構造となっているソフトウェア構造に従って、呼び出し元となる任意の機能と、呼び出し先となる任意の機能の関数種別/変数種別との組み合わせペア毎に、違反の有無が登録されたテーブルである。図3に、階層定義テーブル15の具体例を示す図その1である。図示の例では、階層定義テーブル15には、呼び出し元25機能単位と呼び出し先24各機能毎の関数種別/変数種別のペア組み合わせ毎に、違反なしまたは違反内容ここでは図示のA,B,C,Dの4種類が、登録される。図示の例では、空白は違反なしを意味するこれは例えば‘NULL’や‘0’などが登録されるものであってもよい。呼び出し先24は、上記各機能その機能番号22毎に、その機能における上記4項目2種類の関数種別、2種類の変数種別;API関数、ローカル関数、グローバル変数、ローカル変数に分類されている。尚、上記機能番号とは、上記各機能毎に予め任意に割当てられている機能識別用番号であり、図示の例では図2に示した1-1~3-2の記号を用いている。また、各機能毎に、その機能に対して予め任意の機能番号1-1~3-2等や機能コードSCI、SYS等が割当てられており、本例においては機能コードがその機能に係わるプログラムソースファイル名や各関数/変数の名称に用いられることになっているものとする具体例は後述する。これより、図3に示すように、上記各機能番号22毎に、その機能に対応する機能コード23が登録されており、更にその機能が属する階層21が登録されている。尚、各機能は、一例としては例えば各々が複数のプログラムソースファイルから構成されるものであってよく、この例では任意の機能に係わる複数のプログラムソースファイルのファイル名全てに、その機能の機能コードが用いられることになる。詳しくは後に具体例を用いて説明する。上記違反内容を示す図3に示す記号A,B,C,Dは、例えば下記の意味を持つ。尚、図3に示す上記A~Dは、図2に示すソフトウェア構造の規定に従って、開発者等が例えば手作業等により入力設定したものである。A:階層を越えてAPI外部関数を呼び出した。B:外部に公開されていないローカル関数をアクセスした。C:階層を越えてグローバル外部アクセス用変数を呼び出した。D:外部に公開されていないローカル変数をアクセスした。尚、上記階層を越えてとは、上位側の階層、または下位側であっても2段以上下の階層の機能にアクセスした場合を意味する。但し、上記記号A~Dの代わりに、数値を設定するようにしてもよい。この数値設定値は、例えば‘0’と‘1’であり、‘0’が違反無し、‘1’が違反ありを意味するものであるが、この例に限らない。例えば、設定値が0,1,2、nn;任意の整数であり、これらの設定値は、例えば違反の許容範囲を示しており、例えば下記のように定義されるものであってもよい。0:異常として検出しない。1:違反が1個以上存在する場合、異常として検出する。2:違反が2個以上存在する場合、異常として検出する。3:違反が3個以上存在する場合、異常として検出する。n違反がn個以上存在する場合、異常として検出する。例えば、過去に作成されたプログラムレガシー資産に基づいて作成されたプログラムの場合、違反であることが分かっていても修正困難である箇所が存在する場合がある。よって、レガシー資産において任意のペアに関して違反が2個存在すると分かっているならば、違反2件は必ず生じるのでこれは除外して考えるものとして‘3’を設定することになるつまり、違反が3個以上存在する場合実質的に新たな違反が1個以上存在する場合に、新たな違反の分だけをカウントする。尚、上記例の場合、設定値が‘0’、‘1’以外の場合2以上の場合には、一旦、‘1’と同様にして違反ありとして違反件数をカウントしておき、後から違反件数を補正するようにしてもよい。すなわち、例えば補正後の違反件数=違反件数-設定値1を算出するようにしてもよい。例えば設定値が上記‘3’であるペアが3つ存在し、これら3つのペアについてカウントされた違反件数がそれぞれ3件、4件、5件の場合には、補正後の違反件数は、それぞれ、1件、2件、3件となる。尚、上記の通り、1つの機能が複数のプログラムソースファイルで構成される場合がある。例えば、一例として、3つのプログラムソースファイルこれらのファイル名を、仮に、Sci_fifo.c、Sci_send.c、Sci_rec.cとするによってRS232C通信機能機能コード=SCIが実現されるものとする。この例の場合、機能内でのやり取りに使用する関数/変数が存在する場合があり得る。例えば、Sci_fifo.c内の任意の関数からSci_send.c内の任意の関数/変数を呼び出す場合があり得る。これは、同一機能内での呼び出しであるので、呼び出し先の関数/変数がローカル関数/ローカル変数であっても問題ないことになる違反とはならない。しかし、上記のことは、任意のプログラムソースファイルの関数から他のプログラムソースファイルの関数/変数を呼び出すことになり、これが可能である以上、他の機能のプログラムソースファイルからもアクセスできてしまうことになる。ここで、任意のプログラムソースファイル内での呼び出しであれば、当該ファイル内でしか使用できない関数や変数の設定宣言等ができる。しかしながら、上記のように同一機能内での他のプログラムソースファイルからのアクセスを許可する場合には、この様な宣言が行えないため、結局、同一機能内だけでなく他の機能のプログラムソースファイルからもアクセスできてしまうことになる。しかしながら、上記の通り、本例では、この様なアクセスは、少なくともアクセス先がローカル関数/ローカル変数である場合には違反となり、上記違反内容を示す記号のうちBとCは、この様な違反を想定しているものである。既に述べたように、図2に示すソフトウェア構造の規定は、例えば下記の通りとなる。尚、逐一述べないが、任意の機能から他の機能の呼び出しは、詳細には既に述べた通り、任意の機能に属する関数から、他の機能に属する関数または変数の呼び出しを意味する。また、これも逐一述べないが、当然、同一機能内での呼び出し任意の関数から同じ機能内の他の関数や変数を呼び出すことは、基本的に全てOKである違反とはならない。第一階層の機能は、同一階層第一階層の機能または1段上の階層の機能から呼ばれる。換言すれば、第一階層の機能が、上位階層の機能を呼び出すことは違反となる。これより、呼び出し元25が第一階層の機能1-1または1-2であり、呼び出し先が第二階層または第三階層の機能である場合には、図示のように違反なしとなるペアは1つも存在しないことになる。尚、ローカル関数やローカル変数に関しては、階層等は関係なく、他の機能から呼び出すこと自体が違反となる。第二階層の機能は、同一階層第二階層の機能や1段下の階層である第一階層の機能を呼び出すことはできるが、上位側の階層である第三階層の機能を呼び出すことはできない。これより、違反か否かの判定は、例えば、後に図5、図6で示す例のようになる。すなわち、例えば第二階層の機能2-1は、同一階層の他の機能である機能2-2や、第一階層の機能1-1、1-2を呼び出すことは出来るが勿論、ローカル関数やローカル変数は呼び出せない、第三階層の機能3-1、3-2を呼び出すことはできない。第三階層の機能は、1段下の階層である第二階層の機能を呼び出すことはできるが、2段下の階層である第一階層の機能の呼び出しは、基本的には出来ない。これより、違反か否かの判定は、例えば、後に図5、図6で示す例のようになる。例えば第三階層の機能3-1は、同一階層の他の機能である機能3-2や、第二階層の機能2-1、2-2を呼び出すことは出来るが勿論、ローカル関数やローカル変数は呼び出せない、第一階層の機能1-1、1-2を呼び出すことはできない。但し、特殊な機能のみ呼び出しを許可することもあるので、開発者等の判断によって例外として特別に違反としないようにすることもできる。図3において‘0’で示すものがその一例である。尚、‘0’を設定する代わりに、違反なしを意味する空白ブランクとしてもよい。図3に示す例では、呼び出し元が機能3-1で呼び出し先が機能1-2のAPI関数であるペアに対して、上記例外として‘0’が設定されている。これは、第三階層の機能3-1が、第一階層の機能1-2そのAPI関数を呼び出すものであるので、上記の通り基本的には違反となるが、例外として違反なしを意味する設定がされていることになる。尚、上記階層定義テーブル15等のような定義ファイルを設けるのは、上記のように柔軟性を設け例外を認めることを目的としており、既存製品への適合や文字列変換などの階層を越えた共通ライブラリなどを想定している。尚、既存製品への適合とは、レガシー資産で構造評価を行うと多くのエラーが検出され、エラーを減らすことは困難なので、これ以上階層が壊れないようにすることを目的として、既存製品の違反件数1を設定することにより上記設定値;違反の許容範囲、既存製品よりも違反件数が増えた場合に評価点数が100点未満となるように定義ファイルを設定することで、簡単に判断評価できるようにすることを考慮している。ここで、図4に、階層定義テーブル15の具体例その2を示す。既に述べたように、上記図3のA,B,C,Dの代わりに、違反の有無や上記許容範囲等を示す数値が、設定されるものであってもよく、図4にはその一例を示している。一例としては、違反か否かだけを登録するようにしてもよい。すなわち、違反である場合には‘1’、違反なしの場合には‘0’を登録するようにしてもよい。但し、この例に限らず、本来であれば‘1’を設定すべきところを例外的に‘0’が登録されるようにしてもよい。図4に示す例では、呼び出し元が機能3-1で呼び出し先が機能1-2のAPI関数であるペアに対して、上記例外として‘0’が設定されている。更に、この例に限らず、図4に示すように、‘0’、‘1’以外の数値が例外的に登録されるようにしてもよいその意味の一例は既に説明した上記許容範囲等である。図示の例では呼び出し元が機能3-1で呼び出し先が機能1-1のAPI関数であるペアに対して、‘3’が設定されている。尚、図4が図3と異なる点は、基本的には図3に示す上記A,B,C,Dが全て‘1’になっており、図3に示す空白が全て‘0’になっていることであるので但し、上記例外としての‘0’や後述する例外‘3’が存在する、図3と略同様な部分についてはここでは特に説明しないものとする。ここで、上記例外的な設定値図4の例では‘3’について説明する。既に述べたように、この様な‘0’、‘1’以外の数値は、‘1’と同様に違反であることを示すと共に、更に違反の許容範囲を示すものとする。これより、後に一例を示すように、上記‘3’が設定されているペアに関する違反件数が例えば‘5’であった場合、上記設定値‘3’を用いて、違反件数を補正する。詳しくは後述する。上記点数化タスク部12は、評価対象のプログラムソース19と上記階層定義テーブル15を用いて、違反の判定や違反件数の集計を行う。この処理例やプログラムの具体例については後に示すが、基本的にはプログラムソース19を解析して、どの機能からどの機能のどの関数/変数を呼び出しているのかを認識して、これに基づいて階層定義テーブル15を参照して、その呼び出しアクセスが違反か否か等を判定し、違反件数をカウントしていくことになる。これに基づいて、点数化タスク部12は、更に、違反件数を集計し、この集計結果に基づいて評価点数を算出し、更に場合によってはこの評価点数と過去の他製品の評価点数に基づいて、評価対象のプログラムソース19の偏差値を算出する。違反件数のカウント集計結果はアクセス違反計数ファイル17に登録され、評価点数はアクセス違反点数化ファイル18に登録され、偏差値は偏差値計数ファイル14に登録される。尚、特に図示等しないが、上記点数化タスク部12は、例えば以下に記述する各処理部を有するものと見做すこともできる。すなわち、点数化タスク部12は、下記の違反判定処理部、集計処理部、評価点数算出処理部、偏差値算出処理部の各処理部を有するものということもできる。尚、これら各処理部は、管理サーバ10の不図示のCPU等が、不図示の記憶装置ハードディスク、メモリ等に予め記憶されている所定のアプリケーションプログラムを読出し実行することにより実現される。違反判定処理部は、評価対象のソフトウェアプログラムソース19のプログラムソース文を順次参照して、任意の機能の任意の関数から他の機能の任意の関数/変数を呼び出す処理を検出する毎に、該呼び出し先の関数/変数の関数種別/変数種別を判別して、これに基づいて上記階層定義テーブル15を参照して該呼び出しアクセスが違反か否かを判定する。集計処理部は、上記違反判定処理部による判定結果に基づいて、呼び出し元の各機能毎の違反件数を集計し、または/及び、評価対象のソフトウェア全体の違反件数を集計する。評価点数算出処理部は、該集計処理部による違反件数の集計結果に基づいて、上記評価対象のソフトウェア全体、または/及び、その呼び出し元の各機能毎の評価点数を算出する。また、偏差値算出処理部は、他の複数のソフトウェアについてそれぞれ評価点数が算出済みである場合に、上記評価対象のソフトウェアの評価点数も含む該複数の評価点数に基づいて、上記評価対象のソフトウェアの評価点数について偏差値を算出する。ここで、図5に、一例として、機能2-2からの各機能に対するアクセス例を示しているプログラム全体で機能2-2内のローカル変数から他の関数/変数に対するアクセスしたものを抽出した例を示している。図5に示す8本の矢印が、それぞれ、機能2-2内のローカル変数からの他の関数あるいは変数に対するアクセスを意味している。つまり、呼び出し元が機能2-2そのローカル変数であり、呼び出し先が各矢印の先に示す関数/変数である例を示している。これは、例えば機能2-2内には8個のローカル変数があり、これら各ローカル変数が、それぞれ、任意の他の関数あるいは変数に対するアクセス呼び出しを行っている場合が考えられるが、この例に限らない。図5に示す8本の矢印には、それぞれ、a~hの記号が付してあり、この記号を用いて各矢印を区別して説明するものとする。図5に示す8本の矢印には、図示のように、太い矢印と細い矢印がある。図3や図4に示す例の階層定義テーブル15を用いた場合、太い矢印で示すb、c、g、hの矢印が示すアクセスが、違反となる。一方、細い矢印で示すa、d,e,fの矢印が示すアクセスは、違反ではないと判定されることになる。そして、上記判定結果に応じてアクセス違反計数ファイル17の内容を更新する。そして、最後に集計結果を求める。これについて、図6~図8を参照して説明する。図6~図8は、アクセス違反計数ファイル17の具体例その1、その2、その3である。また、図7、図8には、集計結果の具体例も併せて示している。まず、図6を参照して説明する。図6に示すように、アクセス違反計数ファイル17のデータ構造自体は、上記図3や図4に示す階層定義テーブル15のデータ構造と略同様である。すなわち、アクセス違反計数ファイル17は、階層31、機能番号32、機能コード33、呼び出し先34、呼び出し元35から成る。これらは階層定義テーブル15の階層21、機能番号22、機能コード23、呼び出し先24、呼び出し元25と略同様であり、ここでは特に説明しないが、各呼び出し先34機能単位と各呼び出し元35関数種別/変数種別単位のペアに応じた計数欄が設定されている。初期状態では、全ての計数欄図では24×6=144個の計数欄には、カウント値の初期値=‘0’が設定されている。各計数欄のうち、上記図5に示す8つのアクセス8本の矢印a~hの何れかに該当する計数欄には、図示のように、a~hの何れかを記述し、これを用いて説明するものとする。尚、以下の説明では、呼び出し先に関しては、例えば呼び出し先が、機能番号32が機能1-1で呼び出し先34がAPI関数であることを、呼び出し先が機能1-1のAPI関数である等と表現するものとする。例えば、図5に示す矢印aを例にすると、この矢印aは機能2-2のローカル関数から機能1-1のAPI関数へのアクセスであるので、図6のアクセス違反計数ファイル17においては呼び出し元35が機能2-2であり、呼び出し先が機能1-1のAPI関数である計数欄が、矢印aのアクセスに該当する計数欄となる。上記の通り、矢印aのアクセスは違反ではないので、該当計数欄のカウント値は現在値のままとする例えば初期値=‘0’のままとなる。一方、例えば矢印bに関しては、図6のアクセス違反計数ファイル17においては、呼び出し元35が機能2-2であり、呼び出し先が機能1-1のローカル関数である計数欄が、矢印bのアクセスに該当する計数欄となる。そして、上記の通り、矢印bのアクセスは違反であるので、該当計数欄のカウント値を更新する。これは、例えば該当計数欄の現在のカウント値に対して1インクリメントとする例えば現在のカウント値が初期値=‘0’である場合には、01=1が新たなカウント値となる。このようにして、上述した例では、図6においてb、c、g、hが記述された計数欄について、それぞれ、例えば現在のカウント値に対して1インクリメントとする更新処理が行われることになる。例えば評価対象のプログラムソース19の各プログラムソースファイル毎に、そのファイルに記述されているプログラム文について先頭行から最終行まで順次参照しながら、任意の関数が他の関数あるいは変数を呼び出す箇所を見つける毎に、そのアクセスが違反か否かを階層定義テーブル15を参照して判定し、違反である場合には上記のようにアクセス違反計数ファイル17の該当計数欄の値を更新する。尚、上記の通り、階層定義テーブル15において‘0’以外の数値は全て違反であることを意味しているので、図4に示す‘3’が格納された呼び出し元25が機能3-1で呼び出し先が機能1-1のAPI関数であるアクセスも違反であると判定されて該当計数欄のカウント値が更新されることになる。そして、上記処理を評価対象のプログラムソース19に係わる全てのプログラムソースファイルについて実行した結果、最終的にはアクセス違反計数ファイル17の内容が、図7aに示すものとなったとする。以下、この例を用いて説明する。図7aにおいて、空白となっている計数欄は、初期値=‘0’のままであること違反が1件もなかったことを意味するものとする。そして、図7bには、図7aに示すアクセス違反計数ファイル17に基づいて所定の集計を行った結果を示す。尚、この様な集計結果もアクセス違反計数ファイル17の一部であると見做してよい。図示のように、この集計結果は、呼び出し元35の各機能毎に、それぞれ、上記4項目2種類の関数、2種類の変数;API関数、ローカル関数、グローバル変数、ローカル変数それぞれについての集計を行ったものである。ここで、特に呼び出し元35が機能3-1である場合の集計結果に関しては、上記例外があることから、特に図4に示す例の場合には、一旦、図7aの内容により図7bに示す集計結果が得られるが、その後、図8aの内容に更新させることによって図8bに示す集計結果が得られることになる。これについては、まず、呼び出し元35が機能3-1で、呼び出し先が機能1-2のAPI関数のペアに対応する計数欄は、図7aに示すように空白違反ゼロとなっている。これは、図3や図4に示すように、このペアのアクセスは基本的には違反となるが、例外的に違反ではないものとしている‘0’としているためである。また、呼び出し元35が機能3-1で、呼び出し先が機能1-1のAPI関数のペアに対応する計数欄のカウント値は、図7aに示す通り‘5’となっている。つまり、このペアに係わる記述が、プログラム全体で5件あったことになる。呼び出し元35が機能3-1で、呼び出し先がAPI関数である他のペアは、全て空白となっている。これより、図7bに示すように、呼び出し元が機能3-1で呼び出し先がAPI関数である場合に関する違反件数は、全体で5件となっている。この後、点数化タスク部12は、図4の階層定義テーブル15を参照して、設定値が‘0’でも‘1’でもないものを全て抽出する。図4に示す例では、該当するものは1つであり、呼び出し元25が機能3-1で、呼び出し先が機能1-1のAPI関数のペアに対して‘3’が設定されている。これよりこの設定値‘3’を取得すると共に、上記アクセス違反計数ファイル17において該当する違反件数上記の例では‘5’を取得する。ここで、上述したように本例では‘0’と‘1’以外の設定値は、違反ありの意味に加えて違反の許容範囲の意味も兼ねるものとしており、既に述べたように補正後の違反件数=違反件数-設定値1を算出するようにしてもよい。これより、上記の例では、補正後の違反件数=5-31=3が算出されることになる。よって、この例では違反件数‘5’が図8aに示すように‘3’に置き換わることになる。これより、呼び出し元が機能3-1で呼び出し先がAPI関数である場合に関する違反件数は、補正後は図8bに示すように全体で3件となっている。また、上記図7bや図8bに示す集計結果を、そのまま、最終的な集計結果としてもよいが、何らかの補正を行って最終的な集計結果としても良い。その為の情報が、上記動作情報定義テーブル16に予め設定される。これは、例えば開発者等が任意に決めて設定してよい。図9a、bに、動作情報定義テーブル16に設定される情報の一例を示す。図9aは重み付けに係わる情報であり、図9bは足きりの閾値である。尚、必ずしも図9a、bの両方が必要なわけではなく、どちらか片方のみであってもよい。当然、後述する処理も、それに応じた処理となる。1重み付けに関して図9aに示す重み係数は、上記アクセス対象呼び出し先に係わる4つの評価項目各関数種別/各変数種別;本例ではAPI関数、ローカル関数、グローバル変数、ローカル変数それぞれについて、任意の重み係数重み値が登録されたものである。これは、例えば開発者等が任意に決定設定するものである。図8b等に示す、各関数種別/各変数種別上記4つの評価項目;API関数、ローカル関数、グローバル変数、ローカル変数毎の違反件数の集計結果に対して、これら重み係数をそれぞれ乗算することで、集計結果を補正する。当然、API関数に係る集計結果に対しては、API関数に対する重み係数図示の例では‘1’を乗算することになる。他の評価項目についても略同様であり、例えばローカル変数に係る集計結果に対しては、ローカル変数に対する重み係数図示の例では‘4’を乗算することになる。図8bに示す集計結果例に対して、上記図9aに示す4つの評価項目毎の重み係数によって重み付け処理を行った場合、図10aに示す重み付け後の集計結果が得られることになる。そして、最後に、図10aに示すように、呼び出し元の各機能毎に、それぞれ、上記4つの評価項目それぞれの違反件数重み付け後の合計値を算出登録する。例えば、機能2-1に関しては、10412=17が、違反件数重み付け後の合計値となる。尚、このなかの‘12’は、元々は‘3’であったが上記ローカル変数に対する重み係数図示の例では‘4’を乗算したことで、違反件数重み付け後=3×4=12となったものである。同様に、‘4’は、元々は‘2’であったがグローバル変数に対する重み係数=2を乗算したことで、違反件数重み付け後=2×2=4となったものである。更に、これら各機能毎の違反件数重み付け後の合計値同士を加算して全体の総計値を求める図示の例では、9017142527=92。尚、更に図示のように4つの評価項目毎各関数種別/変数種別毎の違反件数重み付け後の合計値11,9,12,60を求めるようにしてもよい。尚、上記各重み係数は、4つの評価項目に対し、アクセス違反の重要度を示している。これは、4つの評価項目間での相対的な重要度を示すものと言える。本例では、重き係数の値が大きいほど重要度が高いものとなっている。従って、図示の例では、ローカル変数が最も重要度が高く、API関数が最も重要度が低い。これは、換言するならば、呼び出し先がAPI関数であるアクセス違反が多くても後述する評価点数にはそれほど影響しないさほど下がらないが、呼び出し先がローカル変数であるアクセス違反が多いと、後述する評価点数に大きく影響する点数が非常に低くなることを意味する。尚、重み係数の数値は、図9aに示す例に限るものではなく、例えば4つの評価項目の重み係数の合計が、100となるような重み付けでも良い。また、重み付けを細かく行う場合には、階層定義テーブルに対応した機能間で個別に設定ファイルを設けても良い。2足きりの閾値に関して評価単位当たりの例えば呼び出し元の各機能毎の違反件数の上限として足きりの閾値を設定するようにしてもよい。この足きりの設定値は、開発者等が任意に決定してよく、図9bに示す例では足きりの閾値=10.0となっている。以下の説明では、この一例を用いるものとするが、当然、この例に限るわけではない。違反項目は、システム製品によって数が異なることが予想されるため上限が分からない。そのため、点数に差が開きすぎて、違反が多い機能があると他の機能が相対的に点数が良くなり、見過ごしやすくなるので、上限を決める足きりの閾値を設定できるようにしている。点数化タスク部12は、上記図10aに示す重み付け後の集計結果と、これに基づく上記呼び出し元の各機能毎の違反件数重み付け後の合計値以下、合計点数と言う場合もあるを求めたら、この合計値と各機能毎のプログラムステップ数とを用いて、アクセス違反点数化ファイル18を生成する。図10bに、アクセス違反点数化ファイル18の一例を示す。図示の例では、アクセス違反点数化ファイル18には以下の項目があり、呼び出し元の各機能毎またはプログラムソース19全体に対して、以下の各項目に応じた数値が算出登録される。1ステップ数[LOC]機能単位のプログラムのステップ数である。図示のように、基本的には各機能1-1~機能3-2のプログラムステップ数は、それぞれ、異なるものであり、場合によっては大きく異なることになる。よって、上記違反件数が多いからといって単純に悪いものとは言えないプログラムステップ数が非常に多いために、その分、違反件数も多いのかもしれない。2単位当りの点数KLOC1000ステップ当たりの違反検出数である。上記のように機能毎にステップ数が異なるため、図10aに示す重み付け後の合計点合計点数を、プログラムのステップ数で除算し、単位1000LOC当りの点数を算出する。すなわち、上記合計点数と上記ステップ数[LOC]とを用いて、下記の式により算出されるものである。単位当りの点数=合計点数÷ステップ数[LOC]/1000=合計点数/ステップ数[LOC]×10003足きり後の点数単位当りの点数が足きりの閾値を越える場合に、足きりの閾値を単位当たりの点数とする。よって、図示の例では、機能3-2に関する単位当りの点数17.73のみが足きりの閾値10.0を越えているので、17.73を10.0に補正する。他の機能についてはそのままとする。そして、単位当りの点数を、0~閾値⇒0~100に正規化することで足きり後の点数とする。換言すれば、上記単位当りの点数を、上記足きりの閾値10.0を100点とする点数に置き換える。尚、これは、本例では閾値が10.0であることから、単純に、上記単位当りの点数を10倍することで10.0を乗算することで、足きり後の点数が算出できる。また、尚、機能3-2に関しては、上記足きりを行っているので、177.3点とはならずに、図示の通り100点となっている。4評価点数3の足きり後の点数のままでは、点数が0点の場合が、違反が無く、最も良い点数となるので、100点を最も良い点数とするように換算したものが、評価点数である。すなわち、評価点数=100-足きり後の点数によって評価点数を算出する。例えば、機能1-1の場合、足きり後の点数が38.6点であるので、機能1-1の評価点数=100-38.6=61.4点となる。但し、この例に限るものではなく、足きり後の点数を、そのまま、評価点数としてもよい評価の仕方が変わるだけである。すなわち、0点を最も良い点数とし、0点に近いほど評価が高いものとすることになる。また、全体としての評価点数を求めてよい。これは、例えば、上記プログラム全体の総違反件数=92と、プログラム全体の総ステップ数=30121とを用いて、上記機能毎の場合と略同様にして、まず、単位当りの点数を求め、必要に応じて足きりを行った後、評価点数へと換算する。図示の例では、単位当りの点数は3.05であり、足きりを行う必要なく、そのまま100点満点の点数系へと換算した後に10倍した後に評価点数へと換算した結果、全体の評価点数は‘69.5’となる。但し、この例に限るものではなく、例えば、機能1-1から機能3-2までの6つの各機能の評価点数を加算して合計値を求め、この合計値を機能数=6で除算することで、全体としての評価点数を求めるようにしてもよい。以上のコンピュータ処理結果を用いて、例えば一例としては、上記各評価点数や全体の評価点数によって、開発者等が評価対象のプログラムの評価を行うようにしてもよい。しかしながら、例えば組込み用のプログラムの場合、図2のソフトウェア構造階層と機能の規定に分かっていても違反せざるを得ないケースが頻繁に発生するケースも有り得るので、評価点数が低いから悪いと言い切れない場合がある。一方、プログラムを改良したりバージョンアップしたり流用する場合がある。また、この場合、最初のベースとなるプログラムが古い場合も有り得る。この様な古いプログラムの場合、図2のソフトウェア構造階層と機能の規定など意識することなく作りこんでいる場合も少なくない。この様なプログラムに係るバージョンアップ版等のプログラムの場合、評価点数が高いことは期待できず、評価点数が少なくとも以前よりも低くならなければそれでよいと言うことが最低でも現状維持とすることが、現実的な評価基準となる場合が少なくない。この様な観点から、上記評価点数を更に偏差値によって評価することが考えられる。図11に、その一例を示す。図11は、偏差値算出の具体例を示す図である。図11において、製品Aが、今回の評価対象のプログラムであるものとし、よって図示のように点数全体の評価点数は69.5点となっている。一方、製品B~製品Eは、製品Aに関連するプログラムであって過去に作成されていたプログラム等である。これらの製品B~製品Eについても、それぞれ、上記製品Aと同様の処理によって点数全体の評価点数が求められている。以上の5つの製品の点数全体の評価点数の平均値図示の例では38.7を算出し、この平均値に基づいて図示のように各製品A~製品Eそれぞれの偏差値を求める。偏差値の求め方は、よく知られているので、ここでは特に説明しないが、まず上記平均値と求め、これに基づいて標準偏差を求め、以って偏差値を求まることになる。そして、今回の評価対象の製品Aの偏差値によって、製品Aの評価を行う。図示の例では製品Aの偏差値は‘61.9’となり、過去の製品と比べて改善していることが分かる。以下、フローチャートを参照して、上記各種機能部の処理機能について説明する。図12は、上記サーバメイン処理部11の処理フローチャート図である。サーバメイン処理部11は、例えば随時、操作端末1からの任意の要求の受信待ち状態となっておりステップS11、ネットワーク2経由で操作端末1から何らかの要求が送られてくると、まず、この要求が点数化要求であるか、定義の登録要求であるか、それともこれら以外の要求であるかを判定するステップS12,S15。そして、操作端末1からの要求が点数化要求であればステップS12,YES、点数化タスク部12を呼び出しステップS13、点数化タスク部12に処理実行させて、実行完了を待ちその結果を操作端末1に通知するステップS14。尚、点数化タスク部12の処理フローは図14に示し後に説明する。一方、操作端末1からの要求が定義の登録要求であればステップS12がNOでステップS15がYES、定義登録タスク部13を呼び出しステップS16、要求があった定義情報やプログラム等の登録処理を実行させて、実行完了を待ちその結果を操作端末に通知するステップS17。尚、上記何れの要求でもない場合にはステップS15,NO、何も処理せずに終了する。図13は、定義登録タスク部13の処理フローチャート図である。ここで、操作端末1は、上記定義の登録要求を送信する場合には、登録対象の情報を付加して送信する。登録対象の情報は、例えば上記階層定義テーブル15、動作情報定義テーブル16、プログラムソース19等である。上記サーバメイン処理部11は、上記ステップS16の呼び出し処理の際に、上記定義の登録要求と共にこの要求に付加されている上記登録対象の情報を、定義登録タスク部13に渡す。これより、定義登録タスク部13は、設定対象の情報の種類を判定しステップS21、その情報を該当するテーブルファイルに書き込む処理を行う。すなわち、設定対象の情報が、階層定義テーブル、動作情報定義テーブル、プログラムソースファイル等の何れであるか、これら以外であるかを判定し、これら以外である場合には要求エラーと判定してステップS25、処理結果をエラーとする。設定対象の情報が何らかの製品に係る階層定義テーブルである場合には、この情報を該当製品に係る上記階層定義テーブル15として登録するステップS22。設定対象の情報が何らかの製品に係る上記重み計数や足きりの閾値等である場合には、この情報を該当製品に係る上記動作情報定義テーブル16に登録するステップS23。設定対象の情報が何らかの製品に係るプログラムソースファイルである場合には、この情報を該当製品に係る上記プログラムソース19として登録するステップS24。そして、上記ステップS22~S25の何れかの処理を実行完了したら、その処理結果をサーバメイン処理部11に返してステップS26、本処理を終了する。図14は、点数化タスク部12の処理フローチャート図である。尚、ここでは、上記点数化要求には、点数化対象の製品を指定する情報が含まれているものとし、図14の処理に係る各種情報/プログラムは、この指定製品に関する各種情報/プログラムであるものとする。図14aはメインフロー、図14bはステップS33の詳細フローを示す。1処理実行可能か否かの確認点数化タスク部12は、まず、点数化に必要な情報があるか否かを判定するステップS31。これは、例えば以下の2点を判定し、2点ともOKであれば点数化に必要な情報があると判定する階層定義テーブル15、動作情報定義テーブル16に定義が設定されている但し、動作情報定義テーブル16は必ずしも必要なものではない;必須ではない。プログラムソース19が登録済みである。点数化タスク部12は、点数化に必要な情報が無いと判定した場合にはステップS31,NOエラーとしてエラー内容をサーバメイン処理部11に返してステップS39、本処理を終了する。一方、点数化に必要な情報があると判定した場合にはステップS31,YES、ステップS32へ進み、点数化処理を実行する。2機能毎にプログラムステップ数を計数登録する。まず、プログラムソース19のプログラムステップ数を計数して例えば各機能毎に計数して、その結果をアクセス違反点数化ファイル18に登録するステップS32。既に図10bを参照して説明したように、アクセス違反点数化ファイル18には少なくとも評価点数算出処理の実行前には、各機能毎のステップ数LOCが記憶されている必要がある。ここで、プログラムソース19は、複数のプログラムソースファイルより構成される。各プログラムソースファイルのファイル名は、例えば開発者等が予め決められた所定のルールに従って付与している。これは、例えば、ファイル名を参照すれば、どの機能に対応するプログラムソースファイルであるのかを判別できるようになっている。すなわち、プログラムソース19を構成する各プログラムソースファイルと各機能との対応関係は、本例では下記のaの方法を想定して階層定義テーブル等に機能コードを登録している。但し、この例に限らず、他の方法例えば下記の、bcの方法を行っても良い。aファイル名に機能コードをつける。更に階層を示す情報も付加してもよい。一例としては例えば、xxxxyyyyabcdefcxxxx階層、yyyy機能コードのように、プログラムの命名規約を決定しておき、プログラムソース19を構成する各プログラムソースファイルのファイル名は、この命名規約に従って付与させるようにする。尚、規約に反するプログラムはエラーとするチェック機能を別途備えるようにしてもよい。これより、例えばプログラムソース19を構成する各プログラムソースファイル毎に、そのファイルのプログラムのステップ数行数等をカウントすると共に、そのファイルのファイル名から上記機能コードを取得して、これらに基づいて図10bに示すアクセス違反点数化ファイル18に各機能毎機能コード毎のステップ数を登録することができる。尚、1つの機能に対して複数のプログラムソースファイルが存在する場合には、上記ファイル名に含まれる機能コードが同一である複数のプログラムソースファイルについてまとめて上記プログラムステップ数のカウント処理を行って、これらの合計値をアクセス違反点数化ファイル18に登録することになる。また、階層定義テーブル15を参照する際や、アクセス違反計数ファイル17の該当計数欄を見つける際にも、上記ファイル名を参照してその階層や機能コードを取得することになる。bディレクトリ指定ディレクトリ構造をソフトウェア階層と同じにして、その中に各プログラムソースファイルを格納する例えばSCIというディレクトリに、機能コードがSCIである機能に係る全てのプログラムソースファイルを格納する。c定義ファイルに登録階層と機能とプログラムソースファイル名との対応関係を、定義ファイル不図示の定義マクロ、又は、定義テーブル等に登録する。すなわち、この定義ファイルを参照すれば、どのプログラムソースファイルが、どの階層のどの機能に対応するものであるか判別できるようにする。3アクセス違反を計数する。評価対象の製品のプログラムソース19について、階層定義テーブル15を参照してアクセス違反を判定して、アクセス違反の数をアクセス違反計数ファイル17上で計数するステップS33。これは、例えば上記4つの評価項目を対象とするものであるが、この例に限らない。これは、上記の通り、階層定義テーブル15には予め、呼び出し元25機能単位と呼び出し先24各機能毎の関数種別/変数種別単位のペア毎に、違反なしか違反ありが登録されている。一方、プログラムソース19に係わる機能コードや関数/変数の種類種別は、例えば後述する方法によって識別可能である。これより、プログラムソース19に関して呼び出し元の機能と呼び出し先の機能及び関数種別/変数種別とを認識し、階層定義テーブル15を参照することで、違反の有無を判別できる。尚、ステップS33の処理の詳細については、後に図14bに示す詳細フローを参照して説明するものとする。4違反の計数結果に対して重み付けを行う。動作情報定義テーブル16に含まれる上記4つの評価項目に対する重み係数を用いて、上記ステップS33によって得られた違反件数集計結果を補正することで、重み付け後の集計結果を求めるステップS34。つまり、例えば、アクセス違反計数ファイル17の集計値に、動作情報定義テーブル16の重み計数値を乗算した結果を、不図示の重み付け後の集計結果ファイルに登録する。5アクセス違反を点数化する。例えば上述した評価点数を算出するステップS35。評価点数の算出方法については、既に一例を用いて説明済みであるので、ここでは以下に簡単に説明するのみとする。すなわち、上記重み付け後の集計結果を、プログラムステップ数KLOCで除算して更に所定単位例えば1000を乗算することで、上記単位当たりの点数を求め、これを動作情報定義テーブル16の上記足きりの閾値で必要に応じて足きりした後に足きりの閾値を100点満点とする点数系に換算することで上記足きり後の点数を求め、100-足きり後の点数を上記評価点数とする。上記評価点数としては、呼び出し元となる各機能毎の評価点数や、プログラムソース19全体としての評価点数等を求めることになる。6偏差値を算出する上記算出した評価点数を記憶すると共に、過去に他の製品等に関して上記評価点数が算出されて記憶されていた場合には、当該評価点数が記憶登録されている製品数が、予め任意に設定されている所定値以上本例では5以上であればステップS36,YES、偏差値を算出するステップS37。尚、偏差値の算出処理については、既に説明済みであるので、ここでは説明しない。尚、評価点数算出登録済みの製品数が所定値未満5未満である場合にはステップS36,NO、そのままステップS38の処理へ移行する。7処理結果をサーバメイン処理に返す。上記算出結果すなわち評価点数や偏差値等を、サーバメイン処理部11に返すステップS38。プログラム開発担当者等は、任意のプログラムを作成すると、上記管理サーバ10によってそのプログラム構造を解析点数化させることで、その評価点数、偏差値等によって、プログラムがソフトウェア構造設計通りに作成できたか、あるいは少なくとも過去の他製品に比べてレベルダウンしていないこと等を確認することができる。これは、数値化点数化が行われたことで、客観的な分かり易い評価基準が示されるので、容易に的確な評価判断を行うことができることになる。そして、たとえば、もし、レベルダウンしていると判断されるならば、開発担当者等は、プログラムの見直しを行うことになる。尚、上記ソフトウェア構造設計とは、既に述べた通り、例えば、複数の機能より成るソフトウェアにおける機能間のアクセスに係る制限があるソフトウェア構造設計である。これに、更に、階層構造に係る制限も加わってもよい。階層構造に係る制限については、例えば一例を図2等で説明したように、複数の機能が階層化されたソフトウェア構造において、少なくとも相対的に下位側の機能から上位側の機能を呼び出すことは違反である、等の制限がある。これに加えて更に、上位側の機能から下位側の機能を呼び出す場合であっても、2段以上下層の機能を呼び出すことは違反となるようにしてもよい。また、管理者は評価点数が基準値過去の製品変更前の製品等の評価点数以上であることを確認するだけで、開発初期の構造が維持できる。さらに、偏差値を算出することにより、過去の製品と比較して向上を図れるようにする。点数化することで客観的に品質を評価できる。別の側面から言えば、本システムにより、以下の効果が得られるものといえる。プログラムそのものを見なくても、ソフトウェア構造を確認できる開発効率化。ソフトウェア構造が変わらないので、メンテナンス性を維持できる保守性維持。過去の製品の評価点数と比べて、点数が下がらない場合には、ソフトウェア構造が変わらない維持できている品質が下がらないと判断できる。尚、上記のようなソフトウェア構造設計の制限は、完全に守らなくても多少違反があっても、直ちにソフトウェアが正常に動作しないものとなるというものではない。例えば、一応は正常に動作するが、上記制限がある程度以上守られている少なくとも過去よりは悪くなっていないことを確認したい場合品質が下がらないことを確認したい場合等に、本システムが有効利用できることになる。以下、図14、図15を参照して、上記ステップS33の処理の詳細例について説明する。尚、この例では、機能や関数種別/変数種別4つの評価項目等を、名称プログラムソースファイル名、関数名、変数名によって識別可能とした場合を示すが、この例に限らない。ここでは、一例として、機能やプログラムソースファイル名や関数/変数の名称が、以下のルールに従って決められているものとする。また、このルールに基づくプログラム例を図15に示す。尚、ここでは機能コードがSCIである機能の例を示すが、勿論、この例に限らない。機能コードの判別各プログラムソースファイルのファイル名の一部に、それが関係する機能の機能コードが含まれるようにしている。すなわち、例えば、予め決めたルールに従って、各プログラムソースファイル名の先頭が機能コードを示す大文字アンダースコアとなっている。尚、ここでは、更に、機能コードは3文字であるという規定もあるものとする。具体例:プログラムソースファイル名=SCIDrivercよって、上記の例では、機能コード機能名と見做してもよいはSCIであると判定する。尚、必ずしも1つの機能に1つのプログラムソースファイルのみが対応するとは限らない。1つの機能に複数のプログラムソースファイルが対応しても構わない。換言すれば、機能コードは、複数のプログラムソースファイルをグループ化するもの複数のプログラムソースファイルから構成される機能に対して割当てられるものであってもよい。上記の例で言えば上記SCIDriverc以外にもファイル名の先頭3文字がSCIであるプログラムソースファイルが存在するかもしれないことになる。API関数の判別API関数である関数は、全て、その関数名の先頭が機能コードの大文字アンダースコアとなっている。具体例:SCIInitial;尚、図15には上記具体例を用いたプログラム例が示してある。ローカル関数の判別ローカル関数である関数は、全て、その関数名の先頭が機能コードの先頭1文字が大文字で残りが小文字アンダースコアとなっている。具体例:SciFifoSet尚、図15には上記具体例を用いたプログラム例が示してある。グローバル変数の判別グローバル変数である変数は、全て、その変数名の先頭がg機能コードの先頭1文字が大文字で残りが小文字となっている。具体例:gSciSendState尚、図15には上記具体例を用いたプログラム例が示してある。ローカル変数の判別ローカル変数である変数は、全て、その変数名の先頭がg機能コードの先頭1文字が大文字で残りが小文字となっている。具体例:gSciExpcntlUS尚、図15には上記具体例を用いたプログラム例が示してある。尚、上記の例では、機能コードに関するルールとして先頭にはgは使わないを追加することが望ましい。上記のように、本手法では、プログラムソース文における関数/変数の名称には、その関数/変数の属する機能を示す情報と、その関数/変数の関数種別/変数種別を示す情報とが含まれている。これらの情報は、例えば上記一例のような所定のルールに従ったものである。このように、本手法では、関数/変数の名称を参照することで、その関数/変数の属する機能や、その関数/変数の関数種別/変数種別等を判別できる。このように、本例では、名称によって機能及び関数種別/変数種別等を区別できるため、static変数等のようなソース内でのみ区別可能なものとは異なり、例えばある機能のグローバル変数と他の機能のグローバル変数とを区別することや、ある機能の変数と、これと同一の変数名の他の機能の変数とを区別できる。以下、上記一例を用いながら、図14bに示す詳細フローチャート図について説明する。図14bにおいて、評価対象のプログラムソース19を構成する全てのプログラムソースファイルを、順次、解析対象としてステップS41、解析対象のプログラムソースファイルについてステップS42~S46の解析処理を行うことを繰り返す。そして、全プログラムソースファイルについて解析処理が完了したら、ステップS47の処理を行って、本処理は終了する。以下、まず、ステップS42~S46の処理について説明する。まず、解析対象のプログラムソースファイルのファイル名に基づいて、その機能コード機能名を判定するステップS42。上記一例の場合、プログラムソースファイル名=SCIDrivercであることから、機能コード機能名はSCIであると判定する。また、図3に示す例では、機能コード23がSCIの機能の機能番号22は、機能1-1となっている。つまり、これが、上記階層定義テーブル15における呼び出し元25の機能番号となる。そして、解析対象のプログラムソースファイルについて、例えば1行目~最終行までを順次参照して、任意の関数が任意の他の関数または変数の呼び出しを行う箇所を見つける毎に、当該呼び出し先の関数または変数の名称に基づいて、その関数種別/変数種別と呼び出し先の機能とを判別する。すなわち、例えば、名称の先頭部分が、gで始まり、且つ、gの次がアンダースコアである場合には、グローバル変数であると判定し、gの次がではない場合にはローカル変数と判定する。更に、またはgに続く3文字を抽出して、これを全て大文字にしたものを呼び出し先の機能の機能コードと認識する。また、例えば、名称の先頭部分がg以外で始まる場合には、アンダースコアを見つけてより前の文字列を抽出し、抽出した文字全てが大文字である場合には、API関数であると判定する。また、抽出した文字列のうち先頭の文字のみが大文字である場合には、ローカル関数であると判定する。また、何れに場合でも、抽出した文字列を全て大文字にしたものを呼び出し先の機能の機能コードと認識する。以上の処理により、呼び出し元25の機能番号と、呼び出し先の機能コード23及び種別呼び出し先24に示す4つの評価項目の何れか;関数種別/変数種別のペアを判別できるので、このペアに基づいて上記階層定義テーブル15を参照して違反の有無を判定でき、更に違反であればアクセス違反係数ファイル17の該当計数欄に計数することができるステップS43,S44,S45,S46。尚、その際、呼び出し先が自機能である場合には、階層定義テーブル15を参照することなく、違反なしと判定するようにしてもよい図3で説明した通り。これより、例えば、呼び出し先が他機能のグローバル変数であれば、階層定義テーブル15を参照して違反の有無を判定し、違反であればアクセス違反係数ファイル17の該当計数欄に計数するステップS43。同様に、呼び出し先が他機能のローカル変数であれば、階層定義テーブル15を参照して違反の有無を判定し、違反であればアクセス違反係数ファイル17の該当計数欄に計数するステップS44。呼び出し先が他機能のAPI関数であれば、階層定義テーブル15を参照して違反の有無を判定し、違反であればアクセス違反係数ファイル17の該当計数欄に計数するステップS45。呼び出し先が他機能のローカル関数であれば、階層定義テーブル15を参照して違反の有無を判定し、違反であればアクセス違反係数ファイル17の該当計数欄に計数するステップS46。以上の処理を解析対象のプログラムファイルの全呼び出し処理に関して実行したら、未解析のプログラムファイルがある場合にはそれを次の解析対象として同様の処理を実行し、全てのプログラムファイルについて処理実行完了したらループを抜けてステップS47の処理へと移行する。ステップS47では、階層定義テーブル15の設定に従って、場合によっては、上記計数済みのアクセス違反係数ファイル17の内容を補正する。これは既に述べたように例えば図4の例において‘0’、‘1’以外の値例えば‘3’が設定されている場合には、これを許容範囲等とする上述した補正を行う。既に述べた例では図7aに示す内容が図8aに示す内容へと補正されて、結果、図8bに示す補正後の集計結果が得られることになる。ステップS34では、この様な補正後の集計結果を用いて、例えば上述した重み付けを行うことになる。尚、上記図12、図13、図14に示すフローチャートの処理は、既に述べたように、管理サーバ10の不図示のCPU等が、不図示の記憶装置ハードディスク、メモリ等に予め記憶されている所定のアプリケーションプログラムを読出し実行することにより実現される。"