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

Sapid活用によるソフトウェア解析

文書情報

著者

山本晋一郎

instructor/editor 稲垣康善 教授
school/university 名古屋大学, 愛知県立大学, 和歌山大学, 南山大学
subject/major ソフトウェア工学
文書タイプ 書籍
言語 Japanese
フォーマット | PDF
サイズ 3.48 MB

概要

I.Sapidによるソフトウェア解析 概要

本書は、ソフトウェア工学ツールプラットフォームであるSapidを用いたソフトウェア解析手法を詳細に解説しています。Sapidは、CASEツールとして、ソフトウェア設計・開発からテスト・品質管理まで幅広く支援します。特に、下流プロセスの効率化に焦点を当て、ソフトウェア解析を容易にするためのツールです。本書では、Sapidの基本的な使い方から、ソフトウェアメトリックスの計測、ソフトウェアのリスク分析、さらにはビジネスモデリングへの応用までを網羅しています。C言語のプログラム解析を主軸としながら、UMLXMLといった標準技術との連携についても触れています。

1. CASEツールとSapidの位置づけ

本書で扱うSapidは、CASE(Computer Aided Software Engineering)ツールの1種です。従来のCASEツールがソフトウェア開発全般を支援するのに対し、Sapidは特に下流プロセスの効率的な解析に焦点を当てたツール・プラットフォームとして開発されました。 CASEツールは、ソフトウェアの設計・開発、プロジェクト管理、構成管理(CVSなど)、ドキュメント管理、テスト、品質管理といった様々な工程を支援しますが、その開発プロセスにおいてはソースプログラムの構文解析が不可欠です。Sapidは、この構文解析を効率的に行うことで、下流工程におけるソフトウェア解析を加速させることを目指しています。本書では、既存の論文を基にSapidの全体像を明らかにし、ユーザにとって分かりやすいように加筆・再構成されています。第1章ではSapidの基本的な使用方法を解説し、続く章ではソフトウェア工学ツール実現の例題プログラムを示すことで、実践的な理解を促進します。 Sapidは、ソフトウェア工学技術との連携も期待されており、現代のソフトウェア開発における様々な課題解決に貢献する可能性を秘めています。

2. Sapidの機能と応用範囲

Sapidは、ソフトウェア解析のための様々な機能を提供しています。具体的には、ソフトウェア評価の基礎技術であるソフトウェアメトリックスの計測、ソフトウェア解析のための専用モデルSDAの利用、そしてソフトウェアの脆弱性やリスク分析を支援する機能が含まれています。第2章から第6章にかけて、これらの機能を用いた具体的な例題プログラムが紹介されており、実践的な理解を深めるための手助けとなります。 さらに、近年のインターネット普及とWEBプログラミングの台頭、ビジネスモデリングへの関心の高まりを受けて、本書では経営情報システムや意思決定支援システムに関する研究成果も取り入れ、Sapidを中心としたソフトウェア工学研究の成果をより広い範囲に適用することを目指しています。第7章では、経営情報システムとビジネスモデリング技法について解説することで、ソフトウェア開発の上流工程から下流工程までを網羅した、包括的なソフトウェア開発支援を目指しています。 様々な方法論やツールを実際の開発現場に適用することを可能にし、関連する支援環境の実現を目指した、実践的な内容となっています。

3. Sapidを用いたソフトウェア開発における利点

Sapidは、ソフトウェア開発における様々な利点をもたらします。まず、下流プロセスの解析を効率化することで、開発期間の短縮やコスト削減に貢献します。複雑な構文解析を必要とするソフトウェア評価プログラムの作成も容易になり、開発者の負担を軽減します。 また、Sapidは既存のソフトウェアメトリックス計測プログラムのコードを再利用できるため、類似したメトリックスの開発も容易です。オープンソースソフトウェアの計測・解析データを提供することで、より客観的な評価基準を確立することも可能です。さらに、CVSなどのバージョン管理システムとの連携、XMLやHTML、SVGなどによるデータの表現・表示といった機能も備えています。 これらの機能によって、開発者はソフトウェアの品質向上、セキュリティ対策、そして効率的なビジネスモデリングを容易に行うことができます。Sapidは、単なる解析ツールではなく、ソフトウェア開発全体を支援するプラットフォームとしての役割を担います。

II.Sapidを用いたソフトウェアメトリックス計測

本書では、Sapidを用いて様々なソフトウェアメトリックスを計測する方法を説明します。複雑な構文解析や統計解析を必要とするメトリックスであっても、Sapidの機能を利用することで容易に計測プログラムを作成できます。 Cyclomatic Complexityなどの指標を用いたソフトウェア品質評価や、計測結果のXMLデータによる表現、ブラウザを用いた視覚化についても解説しています。CVS等のバージョン管理システムとの連携も可能です。

1. ソフトウェアメトリックス計測の課題とSapidの役割

ソフトウェアメトリックスは、ソフトウェアの品質管理・評価において重要な指標です。ISOやJISによる標準化も進められていますが、メトリックス計測プログラムの作成には、構文解析や字句解析といった高度なプログラミングスキルと、多くの時間と労力を要することが課題でした。Sapidはこの課題を解決するために開発されたツールです。Sapidは、これらの高度なプログラミング手法を必要とせずに、様々なソフトウェアメトリックスを容易に計測できる環境を提供します。 従来、メトリックスの計測は手作業によるレビューや、Perlやgrepといった簡易言語を用いたパターンマッチングに頼ることが多く、大規模なプロジェクトや、バージョン管理、モジュール間の比較などにおいては、効率性の面で大きな課題がありました。Sapidは、このような課題を克服し、効率的なソフトウェアメトリックス計測を実現する手段を提供します。 本書では、Sapidを用いて各種メトリックスを求めるプログラムを作成する方法を、具体的な例題を通して解説します。これにより、読者はSapidを活用したソフトウェア評価手法を習得できます。

2. Sapidを用いたメトリックス計測とデータ活用

Sapidを用いたメトリックス計測では、計測値をXMLデータとして表現し、ブラウザによる表示やハイパードキュメントの実現が可能です。さらに、統計解析や他のソフトウェアとの比較分析を行うための機能も提供しています。これにより、ソフトウェアの品質を多角的に評価し、客観的なデータに基づいた改善策を講じることが可能になります。 Sapidは、オープンソースソフトウェアのリポジトリデータとの連携にも対応しています。これにより、様々なオープンソースソフトウェアのメトリックス計測結果を基準データとして活用でき、自社開発ソフトウェアの品質を客観的に評価する上でのベンチマークとして役立ちます。また、CVSなどのバージョン管理システムとの連携も可能で、バージョンごとのメトリックス変化を分析することで、ソフトウェアの進化や劣化を把握することもできます。 メトリックス計測値の視覚化にも力を入れており、関数呼び出し関係図などのグラフを自動生成する機能も提供しています。これにより、複雑なソフトウェアの構造を視覚的に理解し、問題点を迅速に特定することが容易になります。これらの機能により、Sapidはソフトウェア開発における効率性と品質向上に大きく貢献します。

3. メトリックス計測プログラムの再利用性と高度な機能

Sapidの大きな利点の一つは、メトリックス計測プログラムの再利用性の高さです。既存のプログラムコードを流用することで、類似したメトリックスを容易に作成できます。これにより、開発期間の短縮と開発コストの削減につながります。 また、Cyclomatic Complexityといった、プログラムの複雑さを計測する高度なメトリックスにも対応しています。Sapidでは、ブロックや式をグラフ構造や木構造として表現することで、これらの複雑なメトリックスを効率的に計算するための環境を提供しています。 さらに、計測結果の表示についても、XML、HTML、SVGといった様々なフォーマットに対応しています。これにより、開発者は好みに合わせた形で計測結果を視覚化し、分析を行うことができます。 SapidアプリケーションであるSPIEは、ハイパードキュメントを簡単に生成できるため、ソースコードや関数ドキュメントとのハイパーリンクを容易に作成し、ソフトウェアの理解を深めることができます。これにより、より効率的で効果的なソフトウェア開発を支援します。

III.Sapidによるソフトウェアのリスク分析と脆弱性検出

Sapidは、ソフトウェアのセキュリティ脆弱性検出にも有効です。特に、バッファオーバーフローを引き起こす可能性のある関数(例:strcpy, printf)の使用を検出し、リスク分析を行うための機能を提供します。Format String Attackなどの具体的な攻撃手法への対策も解説しています。 Sapidを用いたリスク分析プログラムは、危険な関数の呼び出し箇所を特定し、データの依存関係を解析することで、潜在的なセキュリティホールを早期に発見することを支援します。

1. ソースコードのセキュリティ問題とSapidの役割

現代のソフトウェア開発において、セキュリティ問題は深刻な課題となっています。特にC言語は、バッファオーバーラン攻撃やFormat String Attackといったセキュリティホールとなる危険な標準関数を持つため、注意が必要です。これらの攻撃は、メモリ操作関数、ネットワークアクセス関数、ファイルアクセス関数、printfなどの入出力関数の脆弱性を突くことで発生し、複雑な相互作用によって新たなセキュリティホールを生み出す可能性があります。ソースコード全体のセキュリティチェックが必要となるため、そのための効率的なツールが求められています。Sapidはこの課題に対応するため、ソースコードに基づいた良質な検査ツールの開発を支援するツールです。セキュリティチェック後のコード変更が及ぼす影響を分析するために、式や変数の値、依存関係を容易に走査・検証できる機能を提供することで、より安全なソフトウェア開発を支援します。

2. バッファオーバーフローとリスク分析手法

バッファオーバーフローは、メモリ操作関数と標準入力や環境変数からのデータ入力の組み合わせによって発生する可能性があります。Sapidのリスク分析プログラムは、危険な関数を呼び出す式中の変数に着目し、値の代入や実行の制御関係などを検査することで、バッファオーバーフローのリスクを評価します。 例えば、strcpy関数において、第1引数が決定される可能性のある要因(第2引数が定数、標準入力(変数argv)、関数定義部で定義されたパラメータ)を分析することで、危険性の高いコード箇所を特定します。 リスク分析ツールは、脆弱性を持つ関数を含む式の一覧とその属性を関数ごとに抽出し、Perlなどのツールを用いたデータ依存解析を行います。情報漏洩などの危険性の抽出も可能で、データをXML形式で扱い、ソースコード等とリンクしたハイパードキュメント情報を生成することで、開発者にとって分かりやすい形でリスク情報を提示します。この情報はセキュリティポリシーの作成にも役立ちます。

3. Format String Attackと具体的な脆弱性例

printf関数におけるFormat String Attackは、書式指定子列の脆弱性を突いた攻撃手法です。%xといった書式指定子列を標準入力から入力することで、クラッキングが行われます。この攻撃手法の代表的な例として、wu-ftpdの脆弱性が挙げられています。特に、wu-ftpdがデバッグモードで実行されている場合、標準入力がsyslogコマンド経由でログファイルsyslogに書き出される点がセキュリティホールとなります。 Sapidは、このような具体的な脆弱性や攻撃手法を理解した上で、リスク分析を行うための機能を提供しています。メモリ操作関数、スタック領域を不安定にする関数、ネットワーク通信を行う関数など、様々な危険な関数を識別し、それらの関数が使用されているコード箇所を特定します。 さらに、データの依存関係を解析することで、危険な関数の呼び出しが、どのような変数や値に影響を与えるかを分析し、リスクの程度を正確に評価します。これにより、開発者はセキュリティホールを早期に発見し、効果的な対策を講じることが可能になります。 XML形式によるデータの扱いとハイパードキュメントの生成により、リスク情報の共有やセキュリティポリシーの作成も容易になります。

IV.ビジネスモデリングへのSapidの応用とDipas

本書は、Sapidの応用範囲をビジネスモデリングへと拡大します。 Dipasという新しいプロジェクトでは、上流工程を含む情報システムの設計・開発・検証を支援する開発環境を目指しています。SapidのJava版であるJapidや、ドキュメントを対象としたDapadも活用し、UMLなどのモデリング手法と連携することで、より包括的なソフトウェア開発環境の構築を目指します。このアプローチは、既存ソフトウェアからの情報資産の抽出、ナレッジマネジメントにも貢献します。

1. Dipasプロジェクトの概要と目的

本書の第7章では、情報システムのモデリング手法を扱い、ビジネスモデリングを対象としたソフトウェア工学ツールDipasの開発環境が提案されています。Dipasプロジェクトは、上流工程まで視野に入れたソフトウェア工学ツール・プラットフォームを目指しています。 Dipasは、情報システムの設計、開発、検証といった各プロセスを統一的に支援する開発環境をソフトウェア工学的な観点から構築することを目的としています。上流工程の概念的な作業から、設計、テスト、保守までを対象とし、既存の方法論やデータ形式を取り入れることで、汎用的な開発環境の実現を目指しています。 ビジネスモデリングの開発・テストをフォーマルかつ体系的に行うプロジェクトとしては、Rational社のRational RoseやTogether社のControl Centerなどが挙げられますが、Dipasはそれらとは異なるアプローチで、上流工程まで視野に入れたリポジトリデータベースを実現することを目指しています。フランス語で「2つの歩み」を意味するDipasは、Sapidのドメインを拡張し、様々な粒度のリポジトリに基づくモデルを設計し、対象ソフトウェアの情報データベースを構築することで、ソフトウェア工学アプリケーション開発を支援します。

2. Dipasにおけるモデリングアプローチとナレッジマネジメント

Dipasプロジェクトでは、経営情報システムなどのシステム/モデルを、ソフトウェアを分類するためのカテゴリーとして捉えるだけでなく、ソフトウェアを解析し、情報資産を引き出すための枠組みとして捉えています。従来のモデリング手法では、対象システムの役割と構造を概念的なモデルとして捉え、要求仕様の理解・分析やプログラム開発の効率化を目指したもの(ERP、DSS、BPRなど)や、実際のシステムを抽象化して新たなソフトウェアパラダイムを提案するもの(SIS、SCMなど)がありました。 Dipasのモデリングとソフトウェア資源のデータベース構築は、ソフトウェアから経営に役立つ情報を引き出し、資源化することを目的としています。これはナレッジマネジメントの観点からも重要です。業務・組織分析のフェーズでは、今までに作成されたソフトウェアや同様のドメインを持つソフトウェアの解析を行い、得られた情報を組織や業務の分析とリエンジニアリングに役立てます。 Dipasは、関連する支援ツール(ミドルウェア)、ソフトウェア解析プログラム要素(Tips)、e-learningシステム、そして各プロセスで生成されるドキュメントやテストデータをハイパードキュメントとして統一的に管理する環境を提供することで、より効率的で効果的な開発プロセスを実現することを目指します。

3. Dipasのモデリング手法と仮想オブジェクトの活用

Dipasのモデリングは、既存のソフトウェアからソフトウェアデータベースを構築するプロセスを含みます。出発点は、Dipasのモデル記述言語やUMLなどのモデリング手法を用いて対象システムの構造と要素を定義することです。この構造はオブジェクト間の関連として定義され、定義されたモデルをモデルカテゴリーと呼びます。モデルカテゴリーはモデルの雛型であり、モデルの持つオブジェクトは抽象的なものです。 モデリングの対象は広範囲に及び、様々な抽象度のモデルが存在します。ビジネスプロセスといった抽象度の高いモデルは、既に開発された既存のモデルカテゴリーを仮想オブジェクトとして用いることができます。インスタンス化において仮想オブジェクトを定義し、段階的に開発を進めることが可能です。 仮想オブジェクトは、特定の環境ごとに具体的な実オブジェクトとして定義されます。オブジェクトの仮想化によって、ターゲット言語やライブラリが異なる環境でも共通のソフトウェア解析を行うことができます。例えば、C言語とJavaのプログラムを同じロジックで解析することが可能です。 Dipasモデル設計とアプリケーション作成では、トップダウンとボトムアップの2つのアプローチが可能です。UMLを用いたモデリングや、特定ドメインモデル(GUIなど)、抽象度の高いビジネスプロセスモデルなどを扱う例が示されています。Japid(SapidのJava版)とDapad(ドキュメント解析ツール)もDipas開発に用いられています。

V.関連研究者と機関

本書の執筆には、名古屋大学、東北大学、南山大学、愛知県立大学、名城大学、流通経済大学、関西大学等の研究者からの多大な貢献があります。特に、名古屋大学大学院工学研究科の稲垣康善教授、福村晃夫名誉教授、坂部俊樹准教授、阿曽宏具教授、阿草清滋教授、そして愛知県立大学の山本晋一郎教授らの研究が、Sapidプロジェクトの中核を担っています。

1. 名古屋大学におけるSapidプロジェクトの中心メンバー

本書で紹介されているSapidプロジェクトの中心的な役割を担った研究者たちは、主に名古屋大学に所属しています。 名古屋大学大学院工学研究科では、稲垣康善教授、福村晃夫名誉教授、坂部俊樹先生、阿曽宏具先生が研究指導にあたりました。特に、阿草清滋先生はSapidプロジェクトのリーダーとして、プロジェクトを牽引しました。 これらの名古屋大学の研究者たちは、Sapidの開発と研究に多大な貢献をしました。彼らの指導と助言が、本書の執筆とSapidプロジェクトの成功の基盤となっています。 名古屋大学以外にも、愛知県立大学、和歌山大学、東北大学などの研究者もプロジェクトに関わっており、それぞれの専門分野の知見を活かした研究開発が行われたことが伺えます。

2. 愛知県立大学 他大学との連携と協力関係

愛知県立大学情報科学部の山本晋一郎先生は、Sapidプロジェクトの推進者として重要な役割を果たしました。 また、和歌山大学システム情報学センターの吉田敦先生と和歌山大学システム工学部の福安直樹先生は、プロジェクトの中心メンバーとして参加し、開発に貢献しました。 さらに、経営情報システムに関する研究に関して、名城大学都市情報学部の尾碕員先生、流通経済大学経営情報学部の蜂谷博先生、関西大学総合情報学部の山内昭先生からご助言を頂いています。これらの研究者たちの協力によって、Sapidはソフトウェア工学の広い分野を網羅するツールとなりました。 南山大学数理情報学部の蜂巣吉成先生、愛知県立大学情報科学部の粕谷英人先生も本書の執筆に貢献し、多様な大学や研究機関との連携によって、Sapidプロジェクトは成功を収めました。滋賀大学経済学部の先生方にも出版の機会を与えていただいたことに感謝が述べられています。

3. 関連論文と研究発表

本書は、著者らが発表した複数の論文を基に作成されています。 これらの論文は、Sapidプロジェクトの研究成果を示しており、ソフトウェア工学、特にソフトウェア解析に関する重要な知見を提供しています。 論文のタイトルや発表学会、発表年などが示されています。例えば、『オープンソースとソフトウェア進化』(bit誌)、『オープンソースに潜む問題』(日本ソフトウェア科学会FOSE2000)、『Cプログラムに対するカプセル発見手法とその支援ツール』(電子情報通信学会論文誌)など、様々な分野を網羅した研究成果が紹介されています。 これら論文で発表された研究は、Sapidの開発や機能向上に直接的に貢献し、本書の内容を裏付ける重要な証拠となっています。 これらの研究発表は、学術界におけるSapidの地位と、その研究の深さを示すものであり、本書の信頼性を高める重要な要素となっています。