第8章 ソフトウェア再利用

8章:ソフトウェア再利用
1. ソフトウェア再利用
2. ソフトウェア再利用の課題
3. ソフトウェア再利用の手法
4. 再利用支援の組織体制
8.1 ソフトウェア再利用
ソフトウェア開発に必要とされる知識,プログラム,データな
どを,何らかの形でパターン化・標準化・部品化することで,
繰返し利用を可能にする
再利用の対象
・開発プロセス
・開発環境
・設計仕様
・パッケージプログラム
・プログラム部品
・個別応用プログラム
・テストデータ
再利用の効果
生産性向上
・開発期間の短縮
・コストの低減
品質向上
・信頼性の向上
・保守性の向上
8.1 ソフトウェア再利用
ソフトウェア再利用の手順
ユーザ要求
オープン
ソフトウェア
再利用による
ソフトウェア開発
標準部品
の登録
再利用
検索
ソフトウェア部品群
ソフトウェア納品
8.2 ソフトウェア再利用の課題
1. 下位レベルの再利用は効果が小さい
2. 上位レベルの再利用は標準化が難しい
3. 応用分野ごとに標準化が異なる
4. ソフトウェア再利用の手法が未確立
5. 余分な作業が発生し,再利用の効果が出ない
6. 標準部品ソフトウェアの品質が保証されない
8.3 ソフトウェア再利用の手法
1. ソフトウェア再利用の要点
1.再利用効果の現れ方
2.技術的アプローチ以外の事項の重要性
3.再利用されるソフトウェア品質の判定
4.再利用効果の測定に基づく再利用レベルの向上
2. 再利用可能な標準部品を開発する手法
再利用率 
再利用ライン数 改造ライン数  流用ライン数 全ライン数-新規作成ライン数


全ライン数
全ライン数
全ライン数
新規作成
改造
流用
8.3 ソフトウェア再利用の手法
組織内標準化部品プログラム開発
1. 部品プログラムの選別と開発
1.
2.
3.
2.
標準化部品の階層的選別
リエンジニアリングによる開発
新たな標準化部品の開発
ドメインに特化した部品プログラムの開発
1.
2.
3.
4.
ドメイン分析・モデリング
ドメインモデル
ドメイン
ソフトウェア構造モデル 分析
部品プログラムの開発
ドメイン
モデル
SWアーキテクチャ
標準化
SW構造
モデル
再利用可能
成果物開発
部品
8.3 ソフトウェア再利用の手法
3.再利用によるソフトウェアを開発する手法
1.応用プログラムの再利用
2.テンプレート
3.フレームワーク
4.パッケージプログラム
1. 利用可能パッケージソフトウェアの調査
2. 機能や品質の事前確認
類似Prog
3. 利用技術の習得
検索
4. 保守と保証の確認
再利用可能
部分の切出し
ソースコード
修正
5.コンポーネントウェア
1. オブジェクトコードの再利用
2. 複合オブジェクトの再利用
3. オープンな再利用
AP群
類似AP
再利用
可能AP
再利用
AP
8.3 ソフトウェア再利用の手法
コンポーネントウェアを実現する基盤技術
• ActiveX/DCOM :
• CORBA :
• JavaBeans :
リエンジニアリング
• リバースエンジニアリング・・・下流から上流へ向けて
分析する
• フォワードエンジニアリング・・・上の分析を基にしソフ
トウェアを再生する
8.4 再利用支援の組織体制
1. ソフトウェア部品開発チーム
2. ソフトウェア部品管理チーム
3. 再利用支援環境整備チーム
4. 再利用促進教育チーム
コンポーネントウェアを利用する側からの分類

統合型ソフトウェアの下で、文書処理や表計算を行う場合



MS-Officeの下で、MS-WordやMS-Excelなどを組み合わせて文書を作
成しようしている場合などである。
ここで利用されている基礎技術は、複合文書を実現するための諸技
術である。ワープロを打っている人も、立派なコンポーネントウェア
ユーザであると言える。
部品をマウスで結合してアプリケーション開発を行う場合



APPGALLERYやHOLON/VPなどを利用して、アプリケーションソフト
ウェアを開発している場合が、この典型である。
コンポーネントウェアが実現している部品化再利用技術を最も享受
している場合である。
問題は、部品を順に結合することだけで、アプリケーションを表現す
ることができる分野には、制限があることである。
コンポーネントウェアを利用する側からの分類
 スクリプト言語を用いて手順を記述することによって部品を結
合する場合
 2項目の手段で記述できないようなアプリケーションに対しては、自分である程
度のプログラムを記述するしかない。
Visual Basicを用いてスクリプティングを行ない、 VBX部品やOCX部品を結合する
場合がこの典型である。
どの程度のプログラムを記述すればよいのかが、この場合のキーである。
 コンポーネントウェアを部品として用いながら、本格的なプログ
ラムを書く場合
Active X(またはOLE)、Opendocなどによって与えられる機能を駆使しながら、 C++
などでプログラムを書く場合に対応する。
コンポーネントウェア
方法論とツール
 1.を支援する方法論は、狭い意味でのソフトウェア工学の対象外.
文書をアプリケーションとみなすというコンポーネントウェアの見方の新規
的な点に由来している
 2.のようなソフトウェア開発の形態は、エンドユーザコンピューティング
(EUC)を呼ばれる分野に属する場合が多い
EUCにおいては、部品として与えられる定型的な処理や簡易的な画面設
計結果を、自分の環境にあわせて、組み合わせて利用する
業務の流れを最もよく認識しているのはエンドユーザである
 3.および4.は基本的には、プログラムを対象とした部品化再利用技術
である。これまでの手続き的なプログラム部品が、オブジェクト的になって
いることだけが異なるだけである
 数多いオブジェクト指向分析・設計方法論で、部品の存在を明確に仮定し
ているものは存在しない。長い歴史をもつ構造化分析・設計方法論でも
部品を前提として十分な効果を上げているものは存在しない
コンポーネントウェア
方法論とツール
 オブジェクト指向分析・設計が脚光を浴びたのは、その方法論のためで、
CASEツールによるものではなかった。
 コンポーネントウェアが脚光を浴びたのは、そのツールのためで、本格的
な方法論は存在しない
 クラスライブラリやフレームワークに代表されるオブジェクト指向開発技術
が効果的な再利用を実現できなかった
ソフトウェア開発方法論
 対象物をどのように人間が把握し,設計し,プログラムとして実現す
るかという視点
 構造化プログラミング
 オブジェクト指向開発方法論
 開発の運営方法の視点
 ウォータフォールモデル
 スパイラルモデル
 プロジェクトへの開発者の参加基準
 伽藍方式
 ある程度まとまるまで外部に公開しない.
 バザール方式
 参加者を限定せず個人が中心となった方法(GNU/Linux)
ソフトウェア開発工程





要求分析
設計
コーディング
テスト
運用・保守
 ソフトウェア開発の技術
 プロダクト・・・モデルの表現方法 UML
 プロセス・・・管理工程・手順 CMM/CMMI
 プロジェクト管理・・・FunctionPoint, PM/PMBOK
 研究分野
 プログラム意味論
 ソフトウェア検証論
 ソフトウェア開発環境
関連
 デザインパターン
 アスペクト指向(AOP, Class 横断機能)
 アジャイルソフトウェア開発(迅速・軽量開発)