JP5073767B2 - Cobolソースコードチェックプログラム、cobolソースコードチェックシステム - Google Patents

Cobolソースコードチェックプログラム、cobolソースコードチェックシステム Download PDF

Info

Publication number
JP5073767B2
JP5073767B2 JP2010027222A JP2010027222A JP5073767B2 JP 5073767 B2 JP5073767 B2 JP 5073767B2 JP 2010027222 A JP2010027222 A JP 2010027222A JP 2010027222 A JP2010027222 A JP 2010027222A JP 5073767 B2 JP5073767 B2 JP 5073767B2
Authority
JP
Japan
Prior art keywords
source code
cobol source
cobol
statement
code check
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.)
Expired - Fee Related
Application number
JP2010027222A
Other languages
English (en)
Other versions
JP2011164954A (ja
Inventor
正人 武市
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
EXA CO Ltd
Original Assignee
EXA CO Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by EXA CO Ltd filed Critical EXA CO Ltd
Priority to JP2010027222A priority Critical patent/JP5073767B2/ja
Publication of JP2011164954A publication Critical patent/JP2011164954A/ja
Application granted granted Critical
Publication of JP5073767B2 publication Critical patent/JP5073767B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

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

Description

本発明は、COBOL言語で記述されたプログラムソースコードをチェックする技術に関するものである。
ソフトウェア開発では常に高品質な成果物が求められており、品質向上のために様々な点検活動が行われている。開発の期間は限られているため、品質点検を素早く高精度に実施する必要がある。
開発下流工程の成果物であるソースコードの品質点検に目を向けると、大きくテストと目視点検の2つの方法がある。このうちテストではソフトウェアに要求される仕様を確認し、目視点検では仕様確認に加えてテストで発見しにくい誤作動、非効率な記述、保守性などの品質も確認する。このように多くの内容を確認する目視点検は品質確保の活動として重要であるが、時間がかかる割に見落としが発生しやすく、さらに属人的で精度がばらつくという問題を含んでいる。
近年Java(登録商標)やCなどのオープン系言語では目視点検をサポートするツールとしてFindBugs(非特許文献1)やSplint(非特許文献2)のようなツールが登場して、様々なプロジェクトで利用されている。しかしホスト系での開発案件が多いCOBOLについてはこういったツールが活用されておらず、未だ目視点検に係る上記課題を抱えている。
下記特許文献1では、コーディング規約に反するキーワードとソースコードを比較することにより、ソースコードがコーディング規約に沿っているか否かをチェックする技術が記載されている。
下記特許文献2では、実行頻度の高低によってソースコード内の各部をランク付けし、実質的にエラーとしてカウントすべきものとそうでないものを識別し易くする技術が記載されている。
特開平11−73328号公報 特開2007−179488号公報
URL:http://findbugs.sourceforge.net/ URL:http://www.splint.org/
上記特許文献1に記載の技術では、キーワードに合致した部分がエラーとして検出されるため、プログラムの動作上は必ずしもエラーではない部分がエラーとして大量に検出される可能性を否定できない。
上記特許文献2に記載の技術では、実行頻度を基準としてエラー可能性を識別しているため、実行頻度は低いが明らかにエラーである部分が、チェック対象から外れてしまう可能性がある。
本発明は、上記のような課題を解決するためになされたものであり、COBOL言語の特性に適した、エラー検出精度の高いソースコードチェックプログラムを提供することを目的とする。
本発明に係るCOBOLソースコードチェックプログラムは、COBOL言語のテーブルサイズを超えてそのテーブルにアクセスする処理がソースコード内に存在するか否かをチェックする。
本発明に係るCOBOLソースコードチェックプログラムによれば、テーブルに対するサイズ制限に違反する不正アクセス処理を精度良く検出することができる。
実施の形態1に係るCOBOLソースコードチェックプログラム110を実行するコンピュータ100および関連するデータの入出力を示す図である。 テーブルを使用するCOBOLソースコード200の1例を示す。 図2に示すCOBOLソースコード200の構文木を示す図である。 複数項目を有するデータ変数を探索する様子を示す図である。 条件文を探索する様子を示す図である。 テーブル定義に合致する条件文を探索する様子を示す図である。 実施の形態2に係るCOBOLソースコードチェックシステム1000の構成図である。
<実施の形態1>
図1は、本実施の形態1に係るCOBOLソースコードチェックプログラム110を実行するコンピュータ100および関連するデータの入出力を示す図である。コンピュータ100は、COBOLプログラムのチェック作業を行うために用いるコンピュータである。
コンピュータ100は、チェック対象であるCOBOLソースコード200と、チェック規則を定義するチェック規則データ300を入力として受け取り、COBOLソースコード200のチェック結果を出力する。これらのデータは、必要に応じてコンピュータ100が備える記憶装置に格納される。
コンピュータ100は、COBOLソースコードチェックプログラム110を格納するHDD(Hard Disk Drive)などの記憶装置と、COBOLソースコードチェックプログラム110を実行するCPU(Central Processing Unit)などの演算装置を備える。また、各データを入出力するインタフェース、メモリなどを適宜備える。以下では説明の便宜上、COBOLソースコードチェックプログラム110を動作主体として説明する場合があるが、実際にCOBOLソースコードチェックプログラム110を実行するのはCPUなどの演算装置であることを付言しておく。
チェック規則データ300は、COBOLソースコードチェックプログラム110がCOBOLソースコード200をチェックする際の基準となるチェック規則を1以上定義する。例えば以下のようなチェック規則が例として挙げられる。
(チェック規則その1:テーブルの件数超過を避ける)
COBOL言語では、複数のデータを配列状に格納する変数の一種として、テーブルと呼ばれるものが用いられる。このテーブルは、はじめに最大サイズを指定しておき、その最大サイズ内でデータを保持する変数である。最大サイズを超えてテーブルにアクセスすることは、不正な処理として禁止される。
(チェック規則その2:END−IFを必ず記述する)
COBOL言語では、IFステートメントに対応するEND−IFステートメントを記述しなくても、ピリオドによりIFステートメントの終端を記述することができる。しかし、ピリオドは見落としやすいため、ソースコードのメンテナンス担当者がソースコードを誤読したり、誤修正したりする要因となる。そこで本発明に係るCOBOLソースコードチェックプログラム110は、IFステートメントに対応するEND−IFステートメントが存在しているか否かをチェックすることとした。
COBOLソースコードチェックプログラム110は、以下の手順でCOBOLソースコード200をチェックする。
(COBOLソースコードチェック手順:ステップ1)
COBOLソースコードチェックプログラム110は、COBOLソースコード200の構文を解析し、木構造のデータ(構文木)に変換して、メモリまたはHDDなどの記憶装置上に記憶する。1つのCOBOLソースコード200に対して1つの構文木が生成される。構文木の各構成要素には、COBOLソースコード200を構成する構文要素が格納される。
(COBOLソースコードチェック手順:ステップ2)
COBOLソースコードチェックプログラム110は、ステップ1で生成した構文木の構成要素が保持しているCOBOLソースコード200の構文要素を走査する。COBOLソースコードチェックプログラム110は、チェック規則データ300が定義しているチェック規則とCOBOLソースコード200の構文要素を照らし合わせながら、COBOLソースコード200の記述エラーをチェックする。
(COBOLソースコードチェック手順:ステップ2:補足)
本ステップでは、構文木の個々の構成要素に対してエラーチェックを行うのみならず、複数の構成要素の組み合わせが適切であるか否かなど、複数の構成要素に対してエラーチェックを行う場合もある。
(COBOLソースコードチェック手順:ステップ3)
COBOLソースコードチェックプログラム110は、ステップ2の結果を、例えばCSV(Comma Separated Value)などの形式で出力する。
以下では、「チェック規則その1:テーブルの件数超過を避ける」を例として、COBOLソースコードチェックプログラム110の具体的な動作を説明する。
図2は、テーブルを使用するCOBOLソースコード200の1例を示す。図2の4行目において、テーブル「TABLE01」が、「OCCURS」ステートメントで最大サイズ「100」のテーブルとして定義されている。一方、8〜9行目において、変数「COUNTER」の値が200になるまでテーブルにアクセスしており、テーブルの最大サイズを超過したアクセスが発生している。以下、COBOLソースコードチェックプログラム110が図2のソースコードをチェックする過程を説明する。
(ステップ1:構文木を生成する)
図3は、図2に示すCOBOLソースコード200の構文木を示す図である。ここでは記載の都合上、「PROCEDURE」DIVISIONの構文木のみを示した。COBOLソースコードチェックプログラム110は、COBOLソースコード200の構文要素と階層構造を解析し、図3に示すような構文木を生成する。構文木はメモリなどの一時記憶装置内にプログラム処理上のオブジェクトとして記憶してもよいし、構文木の内容を記述した構文木データをHDDに格納してもよい。
(ステップ1:構文木を生成する:補足)
COBOLソースコードチェックプログラム110は、COBOLソースコード200の構文要素をソースコードのまま構文木に格納するのではなく、必要に応じて構文要素をカテゴリ分けする。例えば、IFステートメント、EVALUATEステートメントなどの、条件文を持つステートメントに、「CONDITION」という構成要素を付与し、その配下に実際の条件文を格納する。ここでいう条件文とは、例えば不等式や等式が成立するか否かを判定する際の条件式に相当する。
(ステップ2:複数項目を有するデータ変数を探索する)
図4は、複数項目を有するデータ変数を探索する様子を示す図である。COBOLソースコードチェックプログラム110は、構文木を走査し、複数項目を有するデータ変数を探索する。具体的には、括弧()を添えているデータ項目を探索する。また、()内の添字もデータ項目とセットにして記録しておく。なお、データ項目を部分参照する構文要素は、本ステップの対象外とする。図4に示す例では、データ項目「DATA01」とその添字「COUNTER」が本ステップの探索対称となる。
(ステップ2:複数項目を有するデータ変数を探索する:補足)
本ステップは、サイズ制限のあるデータ項目を探索し、サイズ超過アクセスの問題を引き起こす可能性のあるソースコードを探し出す起点とする意義がある。
(ステップ3:テーブル定義を探索する)
COBOLソースコードチェックプログラム110は、COBOLソースコード200の「DATA」DIVISIONの構文木(図示せず)を走査し、ステップ2で探索したデータ項目(ここではDATA01)の定義を探索する。
(ステップ4:テーブルサイズを取得する)
COBOLソースコードチェックプログラム110は、ステップ3で探索したデータ項目自身の定義、またはデータ項目が属する集団項目に、「OCCURS」ステートメントが宣言されているか否かをチェックする。「OCCURS」ステートメントが宣言されている場合は、その数値とデータ項目名を記録する。図2に示したCOBOLソースコード200の例では、「DATA01」が所属する集団項目「TABLE01」に「OCCURS」ステートメントが宣言されているので、その数値「100」と「DATA01」をセットにして記憶する。
(ステップ5:条件文を探索する)
図5は、条件文を探索する様子を示す図である。COBOLソースコードチェックプログラム110は、COBOLソースコード200の「PROCEDURE」DIVISIONの構文木を、ステップ2で探索したデータ項目(ここではDATA01)から遡って走査し、条件文を探索する。ステップ1で説明した通り、条件文を持つ構成要素は必ず「CONDITION」構成要素を持つので、「CONDITION」を親ノードから順に探索すればよい。
(ステップ5:条件文を探索する:補足)
本ステップは、データ項目の最大サイズを超えてそのデータ項目にアクセスする処理を引き起こす可能性のある条件文を洗い出す意義がある。
(ステップ6:テーブル定義に合致する条件文を探索する)
図6は、テーブル定義に合致する条件文を探索する様子を示す図である。COBOLソースコードチェックプログラム110は、ステップ5で探索した条件文の構文木のうち、ステップ2で記録した()内の添字に合致するものを探索する。図6に示した例では、ステップ2で記録した添字「COUNTER」が、「CONDITION」配下の「COUNTER>200」として見つかる。
(ステップ7:テーブル定義と条件文を比較する)
COBOLソースコードチェックプログラム110は、ステップ4で取得したテーブルサイズと、ステップ5で取得した条件文とを比較し、テーブルサイズを超過するアクセスが生じるか否かを検証する。ここでは、ステップ4で取得した「OCCURS」ステートメントが指定するテーブルサイズが「100」であるのに対し、ステップ5で取得した条件文は「200」を指定している。したがって、COBOLソースコードチェックプログラム110は、「COUNTER>200」が記述エラーであるものとみなす。
以上、COBOLソースコードチェックプログラム110が図2のソースコードをチェックする過程を説明した。
以上のように、本実施の形態1によれば、COBOLソースコードチェックプログラム110は、テーブルにアクセスする処理をCOBOLソースコード200の構文木から探索し、テーブルサイズを超過するアクセス処理が存在するか否かを検証する。これにより、不正なテーブルアクセス処理を事前に検出することができる。
具体的には、COBOLソースコードチェックプログラム110は、複数項目を有するデータ項目(上記例ではDATA01)を起点として構文木を探索し、そのデータ項目の条件文(上記例ではCOUNTER>200)とテーブルサイズ定義(上記例ではOCCURS 100)を比較する。データ項目を起点として構文木を探索することにより、データ項目のサイズを基準として不正アクセスを検出することができるので、検出漏れを確実に防ぐことができる。
<実施の形態2>
図7は、本発明の実施の形態2に係るCOBOLソースコードチェックシステム1000の構成図である。COBOLソースコードチェックシステム1000は、実施の形態1で説明したコンピュータ100、ホスト400、共有サーバ500を有する。
COBOLソースコードチェックプログラム110は、開発作業用コンピュータであるコンピュータ100上で実行される一方、チェック対象であるCOBOLソースコード200は、ホスト(汎用機)400上に置かれていることが多い。この場合、ソースコードをチェックするためには、COBOLソースコード200をホスト400からコンピュータ100にダウンロードする必要がある。
ところが、チェックを完全にするためには、COBOLソースコード200から参照している外部ソースコード(図7の参照先ソースコード210)を併せてダウンロードする必要がある。この参照先ソースコード210は、膨大な量になることが多く、ダウンロード時間もその分だけ多くかかる。したがって、チェック作業を開始するまでの準備作業に時間がかかってしまう。
そこで本実施の形態2では、ホスト400とコンピュータ100の間に共有サーバ500を設置し、共有サーバ500がホスト400から参照先ソースコード210を定期的にダウンロードすることとした。
ホスト400が開発作業を行う場所から離れた遠隔に設置されているような場合には、ホスト400と共有サーバ500の間のダウンロード処理は時間がかかるものの、共有サーバ500とコンピュータ100の間のダウンロードは、例えば共有サーバ500を開発作業場所に設置しておけば、ごく短時間で済む。共有サーバ500は、時間のかかるダウンロード処理を例えば夜中にあらかじめ行っておく。これにより、COBOLソースコードチェックプログラム110が参照先ソースコード210を必要とする場合は、即座に必要な参照先ソースコード210を取得することができ、チェック作業にかかる時間を大幅に低減することができる。
100:コンピュータ、110:COBOLソースコードチェックプログラム、200:COBOLソースコード、210:参照先ソースコード、300:チェック規則データ、400:ホスト、500:共有サーバ、1000:COBOLソースコードチェックシステム。

Claims (3)

  1. COBOLソースコードのエラーをチェックする処理をコンピュータに実行させるプログラムであって、前記コンピュータに、
    COBOLソースコードを読み込むステップと、
    前記COBOLソースコードの構文を解析し、前記COBOLソースコードの構文要素を構成要素として保持する構文木を生成するステップと、
    前記構文木の構成要素が保持している前記COBOLソースコードの構文要素をチェックするチェックステップと、
    を実行させ、
    前記チェックステップでは、前記コンピュータに、
    COBOL言語のテーブルを参照し、またはデータを書き込むテーブルアクセス処理が前記構文木内に存在するか否かをチェックするステップと、
    前記テーブルアクセス処理が存在する場合には、前記テーブルのサイズを超えて前記テーブルにアクセスするステートメントが存在するか否かをチェックするステップと、
    前記テーブルのサイズを超えて前記テーブルにアクセスするステートメントが存在する場合は前記COBOLソースコードにエラーがあると判定するステップと、
    を実行させることを特徴とするCOBOLソースコードチェックプログラム。
  2. 前記チェックステップでは、前記コンピュータに、
    PERFORMステートメント内にある括弧が付与されたデータ項目を探索するステップと、
    前記構文木内から前記データ項目に対応するOCCURSステートメントとそのOCCURSステートメントが宣言する前記テーブルのサイズを探索するステップと、
    前記構文木内の前記データ項目から遡って、前記テーブルに前記データ項目をセットするステートメントの繰返し条件を探索するステップと、
    前記繰返し条件が前記テーブルのサイズを超過しているか否かをチェックするステップと、
    前記テーブルのサイズを超過している場合は前記COBOLソースコードにエラーがあると判定するステップと、
    を実行させることを特徴とする請求項1記載のCOBOLソースコードチェックプログラム。
  3. 請求項1または請求項2記載のCOBOLソースコードチェックプログラムを実行するコンピュータと、
    前記COBOLソースコードが参照している他のCOBOLソースコードを、前記COBOLソースコードまたは前記他のCOBOLソースコードが配置されているホストから定期的に取得するサーバと、
    を有することを特徴とするCOBOLソースコードチェックシステム。
JP2010027222A 2010-02-10 2010-02-10 Cobolソースコードチェックプログラム、cobolソースコードチェックシステム Expired - Fee Related JP5073767B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010027222A JP5073767B2 (ja) 2010-02-10 2010-02-10 Cobolソースコードチェックプログラム、cobolソースコードチェックシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010027222A JP5073767B2 (ja) 2010-02-10 2010-02-10 Cobolソースコードチェックプログラム、cobolソースコードチェックシステム

Publications (2)

Publication Number Publication Date
JP2011164954A JP2011164954A (ja) 2011-08-25
JP5073767B2 true JP5073767B2 (ja) 2012-11-14

Family

ID=44595561

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010027222A Expired - Fee Related JP5073767B2 (ja) 2010-02-10 2010-02-10 Cobolソースコードチェックプログラム、cobolソースコードチェックシステム

Country Status (1)

Country Link
JP (1) JP5073767B2 (ja)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3029368B2 (ja) * 1993-11-30 2000-04-04 株式会社東芝 プログラム誤り検出方法および誤り検出装置
JPH1173328A (ja) * 1997-08-29 1999-03-16 Nec Corp コーディング規約チェックシステム
JP3414319B2 (ja) * 1999-04-28 2003-06-09 日本電気株式会社 データ検索装置、方法及び記録媒体
JP2005190330A (ja) * 2003-12-26 2005-07-14 Matsushita Electric Ind Co Ltd ソースプログラムのレビュー支援システム
JP4818652B2 (ja) * 2005-07-22 2011-11-16 株式会社沖データ 端末管理システム
JP4914609B2 (ja) * 2005-12-28 2012-04-11 富士通株式会社 ソースコード問題予測プログラム

Also Published As

Publication number Publication date
JP2011164954A (ja) 2011-08-25

Similar Documents

Publication Publication Date Title
Zhong et al. Squirrel: Testing database management systems with language validity and coverage feedback
US12093389B2 (en) Data traffic characterization prioritization
CN109992970B (zh) Java反序列化漏洞检测系统和方法
Ocariza et al. An empirical study of client-side JavaScript bugs
EP2420931B1 (en) Solving hybrid constraints to generate test cases for validating a software module
He et al. Sofi: Reflection-augmented fuzzing for javascript engines
US9529662B1 (en) Dynamic rule-based automatic crash dump analyzer
EP2407887B1 (en) Solving hybrid constraints to validate specification requirements of a software module
US20120072988A1 (en) Detection of global metamorphic malware variants using control and data flow analysis
US9256519B2 (en) Using linked data to determine package quality
US20250013753A1 (en) Systems and methods for reverse engineering-based detection of vulnerabilities
JP6817469B2 (ja) コンピュータシステムの脅威検出を改善するためのアプリケーション間依存性分析
US9087137B2 (en) Detection of custom parameters in a request URL
Jaeger et al. Normalizing security events with a hierarchical knowledge base
Mrad et al. Babeltrace: A collection of transducers for trace validation
JP5073767B2 (ja) Cobolソースコードチェックプログラム、cobolソースコードチェックシステム
Manthey et al. Spybug: Automated bug detection in the configuration space of SAT solvers
Mariano et al. Analyzing graph-based algorithms employed to generate test cases from finite state machines
Borzykh et al. Detecting Code Security Breaches by Means of Dataflow Analysis
Tsfaty et al. Malicious source code detection using a translation model
CN119249436A (zh) 大型项目代码库代码审计方法及工具
US10157049B2 (en) Static analysis with input reduction
Kuliamin A survey of software dynamic analysis methods
CN119848841A (zh) 一种代码分析方法及相关设备
CN102053909A (zh) 测试程序生成装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120528

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

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120822

R150 Certificate of patent or registration of utility model

Ref document number: 5073767

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20150831

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees