JP2658065B2 - プログラムの評価方法 - Google Patents

プログラムの評価方法

Info

Publication number
JP2658065B2
JP2658065B2 JP62180700A JP18070087A JP2658065B2 JP 2658065 B2 JP2658065 B2 JP 2658065B2 JP 62180700 A JP62180700 A JP 62180700A JP 18070087 A JP18070087 A JP 18070087A JP 2658065 B2 JP2658065 B2 JP 2658065B2
Authority
JP
Japan
Prior art keywords
program
module
execution
executions
segment
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 - Lifetime
Application number
JP62180700A
Other languages
English (en)
Other versions
JPS6423346A (en
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.)
Yokogawa Electric Corp
Original Assignee
Yokogawa Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Yokogawa Electric Corp filed Critical Yokogawa Electric Corp
Priority to JP62180700A priority Critical patent/JP2658065B2/ja
Publication of JPS6423346A publication Critical patent/JPS6423346A/ja
Application granted granted Critical
Publication of JP2658065B2 publication Critical patent/JP2658065B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Description

【発明の詳細な説明】 <産業上の利用分野> この発明は、C言語等で書かれたプログラムの評価を
行う方法に関し、特に効率的な評価を実行することがで
きるプログラムの評価方法に関するものである。
<従来技術> プログラムのデバックやテストおよび性能や信頼性の
評価方法の一つとして、プログラムを複数のセグメント
に分割し、プログラムを実行したときにこれらのセグメ
ントの実行回数を測定することが有効な方法として用い
られている。すなわち、プログラムはその内部で合流ま
たは分岐が無い単位であるセグメントに分割され、実行
される。このプログラムにはプログラムの実行中にその
セグメントを実行したかどうかを検出するプロープが仕
込まれ、このプロープにより各セグメントの実行回数が
測定される。プログラムは異なるデータあるいは条件の
下で多数回実行され、実行回数のデータが蓄積される。
この蓄積されたデータをもとにして各セグメントごとの
実行回数を表わしたものをプロファイルと呼び、性能ネ
ックの検出に使用される。また、1回以上実行されたセ
グメントの数とセグメントの総数の比をカバレジとよ
び、評価が充分であるかの指標とされる。すなわち、カ
バレジが低いと実行されていないセグメントが多く残っ
ていることになり、評価が不十分であることになる。カ
バレジを上げる為には種々の条件の下で評価を行う必要
があり、そのためには長い時間を要するのが普通であ
る。
<発明が解決すべき問題点> しかしながら、この様なプログラムの評価方法には次
のような問題点があった。すなわち評価の途中でバグが
発見されるとそのバグを修正し、また仕様の変更等があ
るとプログラムを変更しなければならない。プログラム
が変更されるとその構造が変わるのでセグメントの構成
も変化し、プログラムの変更以前と条件が異なってく
る。従ってプログラムの修正、変更がいかに微細であっ
てもそれまでのプロファイルは使用することが出来なく
なる為、改めて最初から評価をやり直す必要があった。
従ってもともと長い時間を要する評価がさらに長時間を
要することになり、能率的でないという欠点があった。
<発明の目的> この発明の目的は、プログラムの評価が効率的に出来
るプログラムの評価方法を提供することにある。
<問題点を解決するための手段> 前記問題点を解決するために、本発明ではプログラム
をその内部で合流または分岐の無い複数のセグメントに
分割して、プログラムの実行時にこのセグメントの実行
回数を測定してこの実行回数により前記プログラムを評
価するプログラムの評価方法において、プログラムをサ
ブルーチン等の単位でモジュールに分割してこのモジュ
ールをさらにセグメントに分割し、プログラム修正また
は変更が行われたときに、モジュール構成およびモジュ
ール内のセグメント構成が変化しないモジュールについ
てはプログラムの修正または変更が行われる前に測定し
た当該モジュール内の各セグメントの実行回数をプログ
ラムの修正または変更を行った後に測定する実行回数に
加算するようにしたものである。また、プログラムが修
正または変更されたときに、プログラムの変更前に測定
した各セグメントの実行回数をプログラムの変更後に測
定した実行回数に加算するか否かをモジュール単位で指
定することが出来るようにしたものである。
<実施例> 第1図に本発明に係るプログラムの評価方法の一実施
例のブロック図を示す。プログラムはモジュール/セグ
メント分割器10でサブルーチンまたは関数を単位とする
モジュールに分割され、このモジュールはさらにその内
部に合流、分岐のないセグメントに分割される。この分
割された結果はプログラム実行イメージファイル11とモ
ジュール/セグメント構成情報12として格納され、また
プログラム13にロードされる。このプログラム13は実行
モニタ14の下で実行される。実行モニタ14はプログラム
13の実行を監視し、1回のプログラム実行における各セ
グメントの実行回数を実行情報バッファ15に格納する。
プログラム実行が終了すると実行モニタ14は加算器16を
起動して実行情報バッファ15の実行回数データを実行情
報累積ファイル17のデータに加算する。プログラム13は
種々の条件の下で多数回実行され、これらの実行におけ
る各セグメントの実行回数が実行情報累積ファイル17に
累積されていく。プログラムの修正、変更がなされると
モジュール/セグメント分割器10は新たなモジュール、
セグメントの割付けを行い、プログラム実行イメージフ
ァイル11およびモジュール/セグメント構成情報12に格
納する。実行モニタ14はプログラム更新チェック器18を
起動し、新たなプログラム実行イメージに基づいて新規
実行情報累積ファイル19を作成すると共に修正、変更し
た前後の割付けを比較し、継承禁止モジュール情報20を
作成する。すなわち、セグメントの個数が変化したモジ
ュールおよびモジュール名が変更されたモジュール、削
除されたモジュールを継承禁止モジュール情報20として
リストアップする。またユーザ指定継承禁止モジュール
情報21が作成される。ユーザ指定継承禁止モジュール21
は使用者が独自の判断で継承の禁止を宣言したモジュー
ルをリストアップしたものである。これら継承禁止モジ
ュール情報20、ユーザ指定継承禁止モジュール情報21は
継承器22に入力される。継承器22は実行情報累積ファイ
ル17に格納された各セグメントの実行回数のうち、継承
禁止モジュール情報20およびユーザ指定継承禁止モジュ
ール情報21にリストアップされていないモジュール内の
セグメントの実行回数データを新規実行情報累積ファイ
ル19にコピーする。継承禁止モジュール情報20およびユ
ーザ指定継承禁止モジュール情報21でリストアップされ
たモジュール内のセグメントの実行回数データはゼロと
される。プログラム実行イメージファイル11、モジュー
ル/セグメント構成情報12はプログラム13にロードさ
れ、また実行情報累積ファイル17は新規実行情報ファイ
ル19とおきかえられ、プログラム13の実行が再開されて
実行情報が累積される。
第2図に実行情報累積ファイル17の構成を示す。プロ
グラムはコンパイルの単位でブロックに分けられ、各ブ
ロックはサブルーチン、関数の単位でモジュールに分け
られる。ファイルの最初にデフォルト情報領域サイズ、
デフォルト指定の数、デフォルト情報のデフォルトに関
するデータおよびlog情報が格納されている。これらの
情報は本発明には直接関係しないので、説明を省略す
る。次にプログラム名、プログラムの実行イメージの生
成日付、プログラムに含まれているブロックの数のプロ
グラム情報が格納されている。この生成日付とプログラ
ムの作成日付からプログラムが更新されたかどうかを判
断する。次に各ブロックに関するブロック情報が格納さ
れる。ブロック情報はブロックの数だけ作られる。ブロ
ック情報の中にはブロック名、モジュール数、モジュー
ル情報が含まれる。モジュール情報はモジュールの数だ
け作られる。モジュール情報の中にはモジュール名、セ
グメント数、各セグメントの実行回数が含まれる。また
ファイルの最後にはプロセスID番号が格納される。実行
回数の継承はモジュール単位で行なわれる。すなわち、
セグメント数が変化したモジュール、モジュール名が変
化したモジュールおよびユーザが指定したモジュールに
含まれるセグメントの実行回数の継承は禁止される。新
規実行情報累積ファイル19も同じ構成である。
第3図に実行の手順を示す。ユーザのソースプログラ
ムはまず実行解析用コンパイラCOにかけられる。この実
行解析用コンパイラCOは以下の4つの処理を実行する。
(1)実行解析のために実行を解析するプローブ関数を
ソースプログラムに自動的に挿入する。プローブ関数は
セグメントを感知するものであり、プログラムスター
ト、関数スタート、プログラム終了、関数終了、条件実
行ブロックの先頭、繰返し実行ブロックの先頭等に挿入
される。
(2)ユーザのソーステキストの行頭にプローブ番号を
示したデバッグ用リストを出力する。
(3)ユーザのソーステキストに改行や段付け処理を行
い、デバックしやすいフォーマットに変換したプリティ
プリントを出力する。
(4)コンパイルを行ってプローブ付きオブジェクトモ
ジュールを生成する。
次に実行解析用リンクCXによりタスクモジュール情
報、実行解析汎用モジュールと解析対象モジュールをリ
ンクし、実行解析用イメージを生成する。この実行解析
用イメージは実行解析ysdbによりその実行が解析され、
各セグメントの実行回数が実行情報累積ファイルに書き
こまれる。またプログラムが修正、変更されたときは新
規実行情報累積ファイルが生成され、所定のモジュール
内のセグメントの実行回数が継承される。
第4図にysdbの動作を示す。ysdbが起動されると実行
情報累積ファイルがあるかどうかが判定される。実行情
報累積ファイルが無いと新規実行情報累積ファイルが生
成され、実行情報累積ファイルがあるとプログラムが更
新されたかどうかが判定される。更新されたか否かはプ
ログラムおよび実行情報累積ファイル内の日付によって
行う。プログラムが変更されると新規実行情報累積ファ
イルが生成される。次に継承禁止モジュールを決定す
る。決定はユーザの指示によるものと固定的なものすな
わちモジュール内のセグメントの個数が変化したものお
よび前のモジュール/セグメント構成情報に存在しない
ものがある。ユーザの指示によるもの以外は非継承関数
名出力コマンドによって知ることが出来る。次に継承禁
止を決定したモジュール以外のモジュール内のセグメン
トの実行回数が新規実行情報累積ファイルにコピーされ
る。次に実行情報を収集し、実行情報累積ファイルに累
積する。また最初に実行情報累積ファイルが無くて新規
実行情報累積ファイルが作られたときおよびプログラム
の変更が無いときはただちに実行情報が収集され、実行
情報累積ファイルに累積される。実行情報の収集は評価
が終了するか、プログラムの修正、変更が行なわれるま
で行なわれる。
なお、このプログラムの評価方法は特定の言語の特質
を利用したものでは無いので、C言語だけでなく、FORT
RAN、BASIC、COBOL、PROLOG、LISP等の言語にも用いる
ことが出来る。
<発明の効果> 以上実施例に基づいて具体的に説明したように、この
発明ではプログラムを複数のモジュールに分割し、この
モジュールをさらにセグメント分割して、修正または変
更が行なわれなかったモジュール内の各セグメントの実
行回数をプログラムの変更を行った後に測定した実行回
数に加算するようにした。そのため、継続的に実行情報
が累積出来るので、評価の為の時間を大幅に短くするこ
とが出来る。特にプログラムの修正、変更が小さい場合
に効果が大きい。
また、ユーザがプログラムの修正、変更前の実行回数
を修正、変更後の実行回数に加算するかをモジュール単
位で指定出来るようにしたので、加算してはいけないモ
ジュールの実行回数を加算することがなくなり、実行情
報の信頼性を高くすることが出来る。そのため、評価が
確実に行えるようになるという効果もある。
【図面の簡単な説明】
第1図は本発明に係るプログラムの評価方法の一実施例
を示すブロック図、第2図は実行情報累積ファイルの構
成を示す図、第3図は本発明の実行の手順を示す構成
図、第4図はysdbの動作を示すフローチャートである。 10……モジュール/セグメント分割器、11……プログラ
ム実行イメージファイル、14……実行モニタ、15……実
行情報バッファ、16……加算器、17……実行情報累積フ
ァイル、18……プログラム更新チェック器、19……新規
実行情報累積ファイル、20……継承禁止モジュール情
報、21……ユーザ指定継承禁止モジュール情報、22……
継承器。
フロントページの続き (72)発明者 平田 陽一郎 東京都武蔵野市中町2丁目9番32号 横 河電機株式会社内 (56)参考文献 特開 昭63−317851(JP,A)

Claims (2)

    (57)【特許請求の範囲】
  1. 【請求項1】プログラムをその内部で合流または分岐の
    無い複数のセグメントに分割し、プログラムの実行時に
    前記セグメントの実行回数を測定してこの実行回数によ
    り前記プログラムを評価するプログラムの評価方法にお
    いて、 プログラムを、サブルーチンまたは関数を単位とするモ
    ジュールに分割し、さらに各モジュールをその内部に合
    流または分岐のないセグメントに分割し、 プログラムの修正または変更が行われたときに、モジュ
    ール構成およびモジュール内のセグメント構成が変化し
    ないモジュールについてはプログラムの修正または変更
    が行われる前に測定した当該モジュール内の各セグメン
    トの実行回数をプログラムの修正または変更を行った後
    に測定する実行回数に加算するようにしたことを特徴と
    するプログラムの評価方法。
  2. 【請求項2】各セグメントについて、プログラムが修正
    または変更されたときに、プログラムの修正または変更
    前に測定した各セグメントの実行回数をプログラムの修
    正または変更後に測定する実行回数に加算するか否かを
    モジュール単位で指定することが可能であるようにした
    ことを特徴とする特許請求の範囲第1項記載のプログラ
    ムの評価方法。
JP62180700A 1987-07-20 1987-07-20 プログラムの評価方法 Expired - Lifetime JP2658065B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP62180700A JP2658065B2 (ja) 1987-07-20 1987-07-20 プログラムの評価方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP62180700A JP2658065B2 (ja) 1987-07-20 1987-07-20 プログラムの評価方法

Publications (2)

Publication Number Publication Date
JPS6423346A JPS6423346A (en) 1989-01-26
JP2658065B2 true JP2658065B2 (ja) 1997-09-30

Family

ID=16087783

Family Applications (1)

Application Number Title Priority Date Filing Date
JP62180700A Expired - Lifetime JP2658065B2 (ja) 1987-07-20 1987-07-20 プログラムの評価方法

Country Status (1)

Country Link
JP (1) JP2658065B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07210424A (ja) * 1994-01-14 1995-08-11 Toshiba Corp ソフトウェアテスト支援システム
JP4840318B2 (ja) 2007-09-28 2011-12-21 トヨタ自動車株式会社 自動変速機の制御装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63317851A (ja) * 1987-06-20 1988-12-26 Fujitsu Ten Ltd プログラム内容解析装置

Also Published As

Publication number Publication date
JPS6423346A (en) 1989-01-26

Similar Documents

Publication Publication Date Title
US11609840B2 (en) Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction
Gambi et al. Practical test dependency detection
EP1130518B1 (en) Software analysis system having an apparatus for selectively collecting analysis data from a target system executing software instrumented with tag statements and method for use thereof
US5987250A (en) Transparent instrumentation for computer program behavior analysis
US9535823B2 (en) Method and apparatus for detecting software bugs
US4910663A (en) System for measuring program execution by replacing an executable instruction with interrupt causing instruction
US20040268315A1 (en) System and method for processing breakpoint events in a child process generated by a parent process
CA2179553C (en) Determining dynamic properties of programs
US6311324B1 (en) Software profiler which has the ability to display performance data on a computer screen
US7530057B2 (en) Program code coverage
US20090248721A1 (en) System And Method for Stack Crawl Testing and Caching
JPH11316696A (ja) コンピュ―タプログラムをテストし、デバッグするための再配置可能計測タグ
US8448147B2 (en) Heterogenic Coverage Analysis
JPH0748182B2 (ja) プログラム・エラー検出方法
Morgan et al. Profiling large-scale lazy functional programs
JP2658065B2 (ja) プログラムの評価方法
US5956511A (en) Program development support apparatus, program development support method, and storage medium therefor
Stratan et al. Diagnosing Violations of Time-based Properties Captured in iCFTL
JPH06202905A (ja) クリティカルスライス・プログラムデバッグシステム
Bran Detecting software performance anti-patterns from profiler data
Jarvis et al. The results of: profiling large-scale lazy functional programs
JPS62216047A (ja) リグレツシヨン防止用テストケ−スの決定方式
Hurst A source language performance monitoring facility for the B1800 Modula Interpreter
Arora et al. iProbe: A Lightweight User-Level Dynamic Instrumentation Framework
Schilling Fail-safe programming in compiler optimization