• 検索結果がありません。

ソフトウェア評価技法とメトリックス

ドキュメント内 Sapidによるソフトウェア解析技法 (ページ 60-66)

第 4 章 ソフトウェア評価技法とメトリックス

I  ソ フ ト ウ ェ ア ・ メ ト リ ッ ク ス

ソフトウェア・メトリックスは、ソフトウェアの品質管理、品質評価の手法 の指標である。開発現場でも導入され、

ISO

JIS

によって標準化が行なわれ ている。しかし、ソフトウェア評価プログラムの作成には構文解析、字句解析 といった高度なプログラミング手法が必要であり、構文解析系からプログラム を作成するには多くの時間と労力が必要である。

S a p i d

は、そのようなプログ ラムを容易に実現する環境を提供する。

本章では、各種のメトリックスを求める

S a p i d

プログラムを作成し.ソフト ウェア評価を行うための技術を例示する。メトリックス計測値の

XML

データ による表現、ブラウザによる表示とハイパードキュメントの実現、メトリック ス 計 測 値 の 統 計 解 析 、 他 の ソ フ ト ウ ェ ア の 計 測 値 と の 比 較 分 析 な ど で あ る 。

S a p i d

プロジェクトでは、オープンソース・ソフトウェアのリポジトリ・デー

タベース

SDB

を解析し、公開している。

1.1 代表的なソフトウェア・メトリックス

ソースコードのメトリックスは、フログラム・メトリックス、ファイルメト リックス、関数メトリックスなどに分けられる。関数メトリックスのデータを 集計して、他のメトリックスを求めることができる。関数メトリックスは、関 数の引数の数、行数、コメント行数、制御構造の複雑さ、関数呼び出し情報と いった項目からなる。内部変数と変数の総数の比、制御構造や関数呼び出しの 複雑さ

( C y c l o m a t i c

数)といったメトリックスを求める。

56 

S a p i d

によるソフトウェア解析技法 1.

メトリックスの利用法と有効性

実際にメトリックスを計測し、ソフトウェアの品質評価を行う場合の問題点 を分析し、メトリックスによるソフトウェア品質評価の実効性、メトリックス を有効に利用するための条件を考察する。また、既存のメトリックス開発方法 を分析し、

S a p i d

を用いた場合の優位性を明らかにする。

S a p i d

プロジェクトでは、

S a p i d

XML

といった技術を用いて、標準メトリ ックスについては自動的に計測値を取得し、評価、比較を実現し、特別なメト リックスについてはプログラム開発環境の提供を行っている。

A.  メトリックス計測ソフトウェアの作成、利用上の問題点

多くのメトリックスは、プログラムの構造を参照し、それに基づいてデータ を解析する必要があり、構文解析や統計解析といった難解で手数の要求される テクニックが必要となる。

実際の開発現場では、ソフトウェア開発は大規模なプロジェクトとなり、パ ージョンごと、モジュールごとにメトリックスを求めて相互に比較する必要が ある。そのため

c v s

のようなパージョン管理ソフトとの連携が求められる。

い っ た ん 作 成 し た メ ト リ ッ ク ス 計 測 フ ロ グ ラ ム を 再 利 用 す る 環 境 も 必 要 で あ る。

メトリックス計測データの評価を行うためには、明確な規準や、標準的で比 較可能な指標データが必要である。標準的なメトリックスについては、ある程 度の指標が提供されているが、独自に定義・計測したメトリックスについては、

明確な基準比較データはない。

1.解析ソフトウェアの作成が困難である

2 .

パージョンごとの計測など、さまざまな点からの分析が必要である

3 .

比較対象データが必要である

4 .

計測プログラムを作成しでも再利用が難しい [メトリックス利用の問題点]

4章 ソフトウェア評価技法とメトリックス 57 

B .  

メトリックスの計測・評価方法

メトリックスを計測する初歩的な方法は手作業によるレビューである。コー ディング・ルールのチェックや、プログラミングが難しいメトリックスを求め るときに利用できる。変数や関数呼び出しの出現数を求めるといったパターン マ ッ チ ン グ の メ ト リ ッ ク ス は 、

perl

grep

と い っ た 簡 易 言 語 を 利 用 す る。

インターネットで公開されているオープンソース等のメトリックス計測・評 価 ア プ リ ケ ー シ ョ ン を 利 用 す る 方 法 も あ る 。 オ ー プ ン ソ ー ス で は

Cowan U n i v e r s i t y

CCCC

CodeCenter

、商用では

SquaredTechnologies.com

社の

Resource Standard M e t r i c s

などがあり、プログラムのサイズや制御の複雑さ

といったソースコードに基づくメトリックスを計測できる。

標準的なメトリックスについては、プログラムを作成する必要はないが、独 自にメトリックスを開発することはできない。

CodeCenter

を配布する

QAC

(東陽テクニカ)のみが比較データを提供するが、個別のソフトウェアについ ての計測値は公開されていない。

1.手作業によるレビュー 利用:限定

2 .   p e r l

g r e p

などの簡易言語による分析 利用:限定

3 .

専用アプリケーション 利用:標準的なもの

4 .

独自に開発 利 用 範 囲 : 大 作 成 : 灘

5 .

独自に開発

S

印刷の利用 利 用 範 囲 : 大 作 成 : 易

[メトリックス計測の利用方法]

C. 

Sapid

開発環境を用いたメトリックス利用との開発のメリット

Sapid

プロジェクトの一環として、

Sapid

を用いてメトリックスを効率的に 計測し、信頼性の高い品質評価を実現する技法と、関連ソフトウェアを開発し ている。既存のソフトウェア工学的手法を基礎として、効率性、拡張性といっ た点から開発を行なっている。

S a p i d

を用いる第

1

のメリットは、簡便性である。容易にメトリックス計測

58 

S a p i d

によるソフトウエア解析技法

プログラムを作成・利用することができる。第

2

は再利用可能性である。既存 の計測プログラムのコードを利用して、類似のメトリックスを容易に作成でき る (II、 E のサンプルプログラム参照)。また、オープンソースを計測・解析 したデータを規準データとして提供すること、

CVS

(パージョン管理システム) との連携、

XML

H τ

ML

SVG

等によるデータの表現・表示といった特徴を 持つ。例えば

Sapid

アプリケーションである

SPIE

は、ハイパードキュメント を簡単に実現する。

1 .  

ソフトウェア開発が容易である

2 .  

再利用可能性

3 .  

評価の基準値、比較対象データの提供

4 .  

パージョン管理システムとの連携

5 .  

表示の柔軟性(ハイパードキュメントなど) [我々の手法のメリット]

E  集 計 に よ る メ ト リ ッ ク ス

関数の呼び出し数、内部変数の総数といったメトリックスを求める。これら のデータを統計的に解析することで、多くの有用な情報を得ることができる。

関 数 や 変 数 に 関 す る 情 報 は 、 ク ラ ス

i d e n t i f i e r

を基点として取得する。

2 . 1  

内部変数に関する集計メトリックス

変数に関連する情報は変数名、型、有効範囲、出現位置、含まれる式などか らなる。変数名や型の取得は

2

章を参照のこと。内部、外部、静的といった変 数宣言の範囲の種類は

i d e n t i f i e r

の基本情報ではなく、

d e c l a r a t i o n

に含まれる。

変数宣言オブジェクトの属性

s t o r a g e

を参照して求める。変数の有効範囲や変 数を含む式を取得するためにはオブジェクト

e x p r e s s i o n

b l o c k

をといったク

ラスのオブジェクトを利用する。

4章 ソフトウェア評価技法とメトリックス 59 

STORAGE AUTO  auto 

STORAGE EXTERN  extern  STORAGE STATIC  static  STORAGE REGISTER  reglster  STORAGE 

1YP

EDEF  typedef 

[クラスdeclarationの属性storageJ

関数getVarNum ーあるオブジェクト内のローカル変数の個数

int getVarNum(SpdObjld 0id){ SpdCursordent̲r' int  count= 0;  SpdO ident̲occ;

idenCr= spdGetInc¥udedOcclnit(obLid, "identer"obLid);

whiIe ((idencocc = spdGetInc¥udedOcc(idenCcsr)).relationld !=SAPID̲NON̲ID)  if (spdGetAttrValIrit(ident̲oobjectId"sort") == ID̲VARlABLE) 

if(varSort(ident̲occ.objectId) == LOCAL)  count++; 

return count 

関数VarSort 変数の種類を求める

#define LOCAL 0 

#defineGLOVAL 1 

#define STATIC 2  int varSort(SpdObjld v'̲id){

SpdObjld  decUd, decr̲id; 

decr̲id = spdGetARelObj(var̲id

, 

"decUden!"

、 ,

ny");

decCid = sI>dGetARelObI(decr̲id, "decLdec

l " ;  

"c‑id");  if(spdGetAttrValInt(decUd, "storage") == STORAGE̲EXTERN) 

return EXTERN; 

else if (spdGetAttrValInt(decUd, "storage") == STORAGE̲STATIC)  return STATIC; 

else 

return LOCAL; 

サンプルプログラム

4‑1

オブジェクト内のローカル変数の総数

#inc¥ude <stdh>

#inc¥ude <Spid/Spid.h>

void  getProgldO; 

void  getFuncName(SpdObjld);  / / 1章を参照 int  getVarNum(SpdObjld); 

int  varSort(SpdObjld);  )前可

ac

‑‑

︐ nd

h J d w M

c n p  

ob

M

M M

N d

︒ ︒ ︒ ;

山凶凶川

s s h

nu e4

proιid= getProgldO; 

func̲array=spdGetOldArray("optionaldecl"NULL, NULL); 

for 

l i  

= 0;  i 

:   <

funcarray.size; i++) 

60 

S a p i d

によるソフトウェア解析技法

if(sdGetAttrValInt(func̲array.id[i)"sort") == DECL̲FUNCDEF) {  getFuncName(func̲array.id[i]); 

printf("Local Variable = %d¥n"getVarNum(func̲array.id[i))LOCAL); 

spdFreeObjldArray(func̲array);  return (EXIT̲SUCCESS); 

実行結果

FUNC NAME= add  FUNC NAME= dec  FUNC NAME= main 

Local Variable = 4  Local Variable = 2  Local Variable = 16 

2.

2 関数の集計メトリックス

関数の呼び出し数などを関数宣言ごとに求める。関数宣言オブジェクトのー 覧を、オブジェクト配列(クラス名

: d e c l a r a t i o n

SORT:DECL̲FUNCDEF) を

用いて取得し、 それを基点として情報を取得する。第

2

章のサンプルプログラ ムの関数

g e t F u n c C a l l

などを改良して関数呼び出しに関するメトリックスを求 める。

関数

g e t F u n c C a l l ( m e t r i c s 版)

#deneMAJCFUNC̲SIZE 100  void getFuncCall(SpdOIdfuncDeUd) { 

SpdOcc  funcocc; SpdCu問 。r*funcr' int  i=Qcount=E

関数呼び出しの数を求める

funほ 四r= spdGetIncludedOccInit(funcDecUd, "identifier'funcDUd);

w

i(f((fspduncGー 舵etAc=tstrp<ValIent(funcotIncludedO(funccsr)).relationId!=SAPID̲NON̲ID)

目。切目白d"sort") == ID̲FUNCTION)  count++ 

実行結果

FUNC NAME= main  Calling Function: 3  FUNC̲NAME= dec  Calling Function: 0  FUNC‑NAME= add  Calling Function: 1 

E  複 雑 さ を 表 現 す る メ ト リ ッ ク ス

プログラムの複雑さを計測する手段として、 制御構造のネスト数、 ブロック

4章

ソフトウェア評価技法とメトリックス

61 

ドキュメント内 Sapidによるソフトウェア解析技法 (ページ 60-66)