オフショアでの販売管理パッケージの保守におけるUMLの活用
2012年2月10日
富士通アプリケーションズ（株）
森崎雅稔
Copyright 2012 FUJITSU LIMITED目次
 自己紹介 プロジェクトの概要
 UMLを使った技術伝達
 プロジェクトを振り返って
 まとめ

1

Copyright 2012 FUJITSU LIMITED

自己紹介
現在
FAP ソフトウェアエンジニアリングセンター 所属
開発や保守の工業化のための様々な取り組み
プロフェッショナル育成
社内標準の開発
技法

プロセス

規約

ドキュメント

高スキル

高生産性

ツール

高品質

略歴
大学で情報工学を学ぶ。専攻は情報基礎工学。
１９８６年富士通（株）に入社。C言語やアセンブラで製品開発。
１９８９年オブジェクト指向言語のCommonLispで製品開発。
１９９７年C++での製品開発で、OMT法、後にUMLを使用。
２００９年FAPに出向し、JAVAの開発集団の中で現職に就く
2

Copyright 2012 FUJITSU LIMITEDプロジェクトの概要

3

Copyright 2012 FUJITSU LIMITED販売管理パッケージの概要
製品名：GLOVIA-C販売
中堅の製造販売・商社向けの販売管理システム
オブジェクト指向で設計・初 開発を行った業務パッケージ
CORBA分散オブジェクトで実装言語はC++

設計にRational Roseを活用

C++

モデリング

アーキテクチャの特許を取得

特許
4

Pat.No. 4159674 （1998年出願）
Copyright 2012 FUJITSU LIMITED保守現場が抱えていた課題
パッケージ保守の状況
アプリ層

頻繁にエンハンスが行われていた基盤層障害修正と基本ソフトへの追従のみ

現場の課題
基盤の保守要員を継続的に維持できない
軽微な基盤修正作業をスポットで依頼したい
基盤層に再現性の低い障害が発生してしまった5

Copyright 2012 FUJITSU LIMITEDオフショア開発に期待した事
必要なスキルの人材を短期間でもアサインできること
国内グループ会社ではすでに難しい要件になっている

業務スキルより情報処理スキルが高い
基盤層の保守は、ITを学問として修めた人材の方が短期間でものになるC++
VisualStudio
CORBA
UML
必要Windows
ORACLE
スキル
Interstage（OCI）

Server

中国オフショアが有利と信じてポジティブに取り組んだ
委託先
北京富士通系統工程有限公司（BFS）
6

Copyright 2012 FUJITSU LIMITED

体制とスケジュール
準備

富士通

2009/3

4実施

5

6

方針の検討

体制作り/要員教育

Q&A対応▼7/24再現手順提示

受託作業期間▲3/2打ち合わせ▲7/10作業開始▼4/23障害の現象説明
9/28納品▲▼3/10作業の依頼
Q&A対応▼6/10仮見積依頼▼3/27アーキテクチャ説明▼7/15見積依頼▼3/31ソースコード/マニュアル提供

北京富士通系統工程有限公司 （BFS）▲6/19仮見積回答▲7/21仮見積回答

立ち上げ準備期間

SE 4名

9▼6/29発注▼7/3アプリとミドルの貸与▼3/30ワークプレイスの対中公開

SE 1名

8

障害再現資料作成▼3/10作業の依頼▼3/25ワークプレイスの開設

富士通アプリケーションズ
（FAP）

7

環境構築

▲3/13テレビ会議（レクチャー）▲4/24受託可能と判断

作業期間▲7/27作業開始 9/24納品▲

7

Copyright 2012 FUJITSU LIMITEDUMLを使った技術伝達

8

Copyright 2012 FUJITSU LIMITED

場を作る
ネット上のワークプレイスを開設
基本情報
基本情報
体制／体制／
スケジュール
スケジュールプロジェクトプロジェクトの目的の目的

ノウハウ、
ノウハウ、
参考情報
参考情報

ノウハウ／
ノウハウ／
関連情報
関連情報

資料、成果物
資料、成果物

ネットワーク
設計書
設計書

作成資料
作成資料

ProjectWEB

議事録
議事録

作業指示
作業指示
／報告
／報告

問題点
問題点
／対応
／対応

進捗
進捗

作業と状況
作業と状況課題、問題点課題、問題点

プロジェクトに関わる情報や作業をオフショア先と共有した
9

Copyright 2012 FUJITSU LIMITEDUMLを使った技術伝達１
アーキテクチャの説明
クラス図、シーケンス図を用いて、アプリケーションの方式や構造を説明した
伝票・明細構造に対するインスタンス操作
GLOVIA-C販売のクラス図 ～伝票～

伝票のインスタンスは、明細のインスタンスを集約し、コントローラからの明細の操作を簡単化している。

GAMBaseModel

基底クラス

受注伝票管理GAMBaseController

GAMBaseDomainModel+GetOne( )+Release( )GAMBaseObjectManager

集約-model_set
GAMBaseDetailSetModel

受注伝票

GAMDBObjectManager

コントローラドメインモデルドメインモデルオブジェクトマネージャー

受注コントローラ

受注明細

受注伝票

受注伝票管理GetOne( 伝票番号 )DB参照

Get( 1 )伝票ｲﾝｽﾀﾝｽを返却する

GetItemCode( )１行目の明細ｲﾝｽﾀﾝｽを返却する+Get( )
受注伝票管理（ｵﾌﾞｼﾞｪｸﾄﾏﾈｰｼﾞｬ）

GSSSlipController

標準業務
クラス

GSSSalesSlip

GSSSalesDetailCore

Get( ２ )抽象クラス
集約-detail_set

GSSSalesDetailManager

GSSSalesSlipController

受注コントローラ

伝票関連のクラス図

関係者外秘

受注伝票
（ﾄﾞﾒｲﾝﾓﾃﾞﾙ）

2+GetItemCode( )+GetQuantity( )GSSSalesSlipManager

クラス図
受注明細（ﾄﾞﾒｲﾝﾓﾃﾞﾙ）

２行目の明細ｲﾝｽﾀﾝｽを返却する

受注明細

基本クラス
GSSSalesDetail

GetQuantity( )受注明細管理 関係者外秘（ｵﾌﾞｼﾞｪｸﾄﾏﾈｰｼﾞｬ）
Copyright 2007 FUJITSU LIMITED

10

伝票操作のシーケンス図
シーケンス図Release( 伝票ｲﾝｽﾀﾝｽ )delete7

deleteCopyright 2007 FUJITSU LIMITED

実際に使用した教科書の抜粋
Copyright 2012 FUJITSU LIMITEDUMLを使った技術伝達２
データベース操作の説明
伝票インスタンスの構造と、これらをデータベースにマッピングする手順を説明した
オブジェクトマネージャの仕組み４
オブジェクトマネージャの仕組み２

ジャーナル一覧照会のシーケンス図Ａ

ジャーナル起票系のシーケンス図Ａ
コントローラＢｼﾞｬｰﾅﾙ
ドメインモデルコントローラＢｼﾞｬｰﾅﾙパラメタ

Ｂｼﾞｬｰﾅﾙオブジェクトマネージャ

オブジェクトエンティティ

Ｂｼﾞｬｰﾅﾙ
ドメインモデル

Ｂｼﾞｬｰﾅﾙオブジェクトマネージャ

Select(key1,key2)

フィールドオブジェクト

リザルトセット
オブジェクトＢｼﾞｬｰﾅﾙエンティティ

SelectAny2(param)

SELECT
newRDB

GetNew()
new

１件目

Get( )
GetField()

new

SetSlipNumber(number)
SetCutomerCode(code)

２件目
以降

O/Rマッピング（O→R）

InsertOne(Bインスタンス)

newGet( )

GetField()

new
GetAllAttributes( )FlushOneAttribute

O/Rマッピング（R→O）

MoveNext()

GetAllValue (',')

new

O/Rマッピング（R→O）

Release(Bインスタンス)

Add(number)deleteAdd(code)

Release( )Insert(param)

伝票⇒ＤＢ
マッピング
delete

関係者外秘INSERT

RDB

delete11

関係者外秘Copyright 2007 FUJITSU LIMITED

11

ＤＢ⇒明細一覧
マッピング
deletedelete

13

Copyright 2007 FUJITSU LIMITED

実際に使用した教科書の抜粋
Copyright 2012 FUJITSU LIMITEDUMLを使った技術伝達３
デザインパターンの説明
製品開発時にSEが用いた設計パターンを説明した
デザインパターン
業務処理のデータ操作要件に対し、オブジェクト操作での実現方法をパターン化した。
例：RDBのレコードをCOBOLアプリ向けのシーケンシャルファイルに変換するパターン
ｴﾝﾃｨﾃｨ ﾗｲﾌﾞﾗﾘ
ｼﾞｬｰﾅﾙ系
ﾄﾞﾒｲﾝ
ﾄﾞﾒｲﾝ Aｵﾌﾞｼﾞｪｸﾄ Bｵﾌﾞｼﾞｪｸﾄ
ﾏﾈｰｼﾞｬ
ﾏﾈｰｼﾞｬ
ｺﾝﾄﾛｰﾗﾓﾃﾞﾙA
ﾓﾃﾞﾙB
SelectForDetailList1()

SelectAny73()

WriteOpen()

ｱｸｾｽ制御販売管理システムのパターン指向開発

プロト開発

Select()Open()

Get()
繰
り
返す

new
GetNew()

ＣＢＳ

シーケンシャル
デザインパターン
抽出の範囲
ファイル作成Aｲﾝｽﾀﾝｽを返す

new
Bｲﾝｽﾀﾝｽを返す

SQLｱｸｾｽ制御

CopyFrom(Aｲﾝｽﾀﾝｽ)

パターン抽出パターンカタログ化

Get属性()

IntertOne(Bｲﾝｽﾀﾝｽ)

Write()

書き出しRelease(Aｲﾝｽﾀﾝｽ)
Release(Bｲﾝｽﾀﾝｽ)
Release()Close()
関係者外秘

実際に使用した教科書の抜粋

パターン指向開発

Close()
21

Copyright 2007 FUJITSU LIMITED

12

Copyright 2012 FUJITSU LIMITEDUMLを使った技術伝達４
障害状況の説明
障害箇所の仮説を立て、調査範囲を絞り込んだ
分割転送時の多重動作（エンティティを共用）

障害対応の手順 分割転送動作中に一方の照会画面を強制終了し、他方で次データを要求するとSQLアクセス制御が異常終了する。

日本側で仮説を立てる

照会画面A

照会オブジェクトA

次の25件を要求

リザルトセットA

照会オブジェクトB

76～100件目を返却

リザルトセットB

エンティティA

SQLアクセス制御

B

25件返却

セッションの維持範囲
照会画面B

中国側で仮説を検証する

次の25件を要求

26～50件目を返却

25件返却

協議して対策を考える

異常出口
画面の強制終了で検索処理を終了する

異常発生

削除
セッションを閉じる

中国側で対策を検証する次の25件を要求（何らかの呼び出し）

INTERNAL USE ONLY

実際に使用した教科書の抜粋

10

Copyright 2009 FUJITSU LIMITED

13

Copyright 2012 FUJITSU LIMITEDUMLを使った調査報告
ソースコードを解析してシーケンス図で確認
日本側で作成した図

プロジェクト： 「GSQJL010」

プロジェクト： 「GCDBServer」

GSQJL010_skel

GCDSystemServer

GCDServerManager

skel_GCDSystemS
erver_SystemServ
erInterface_execu
te()

GCDController

GCDExecuter

GCDConnection

GCDConnectionManager

中国側で作成した図の抜粋

OM_req_lib_trace_skel_begin()

GCDSystemServer::obj_ptr->execute()
GCDServerManager::Execute()
GCDSendProtocol::GCDSendProtocol()GCDSendProtocol::GetDataBlock()

GCDInitialContext::GetInstance()

網を張る場所を策定する

GCDConnectionManager::GetConnection()

GCDContext::GCDContext()

GCDContext::SetSessionFlag()
GCDConnectionManager::GetSessionFlag()

GCDProtocol::Create()

GCDController::Execute()
GCDProtocol::GetSendProtocol()GCDSQLManager::LookupSQL(,,,)

GCDExecuter::executer->Execute()
initialize()

GetConnectInfo()

GCDCursor::GCDCursor()

GCDSQLManager::GetSqlType()

障害箇所から呼び出されているメソッ
ドをシーケンス図で記述

GCDSQLManager::GetSQLKind()initialize()

executeSelectForLogical()selectForLogical()StartDivisionTransmit()

GCDSQLManager::DeleteStatement()

14

Copyright 2012 FUJITSU LIMITEDプロジェクトを振り返って

15

Copyright 2012 FUJITSU LIMITEDUMLの効果
販売管理パッケージの中身が正確に伝わったアプリケーションのアーキテクチャの理解
保守対象のオブジェクト構造、プログラム構造の理解
障害状況の理解、障害処置への検証方法の策定

UMLは、シンプルな図示と少ない言葉でも、議論の前提（中身の理解）をきちんと作れた
16

Copyright 2012 FUJITSU LIMITEDラッキーだった事
日本語が堪能なリーダーを得た
Q/A表、課題管理表、Eメールの日本語が読み易い
管理番号
QA-008起票日

質問者
部署名 氏名2009/7/29 BFS

杜分類
依頼

質問内容
QA-007回答より、ソフトウェア説明書の９ページの手順１～手順５をチェックしました。
確かにサーバ名の入力ミスがありました。

責任回答者
回答希望期限部署名 氏名(User/IS)
FAP

ただし、付録Aの作業内容に従って、サーバ名を修正してから、QA-007にの同じ操作した時に、また別のエラーメッセージが表示されました。（詳細はシートQA-008を参照してください）。
すみませんが、原因と対処方法を教えてください。

QA-0092009/7/31 BFS

杜依頼

ファイル「090730_デバッグ版作成方法.ppt」を参照して、GSQJL010.ｖｃｐrojをデバッグコンパイル時、相関ソースファイル
・GCDStaticSQL.h・orb_cplus.h
・GCDStaticEntity.h
・GCDSqlAccess.hが見つけられなかったので、正しくコンパイルできません（詳細はシート「QA-009」を参照してください）。対処方法を教えてください。
ちなみに、「GSQJL010.vcproj」がVisualStudio2003プロジェクトですが、先日ご提供頂いた「GCCore.vcproj、GCRes.vcproj、GCDBServer.vcproj」はVisualStudio2005プロジェクトです。この2つバージョンの整合性は大丈夫ですか？

FAPQA-010

2009/7/31 BFS

杜依頼

QA-009が解決していましたが、再コンパイルのとき、新しいエラーが発生されました。ファイル
・OM_stub_skel.hが見つけられなかったので、正しくコンパイルできません（詳細はシート「QA-010」を参照してください）。対処方法を教えてくだ
さい。

FAP

実際に使用したQ/A表の抜粋

2009/7/30

FAP

森崎

回答内容
サーバ側で必要なプロセス、またはサービスが起動されていない可能性が高いです。２
つの原因が考えられます。
(1)ORACLEが起動していない。あるいは正しいDBインスタンスが存在していない。
確認方法：まず、サービスで「ＯｒａｃｌｅＳｅｒｖｉｃｅＳＤ０１」が開始になっているか確認して下さい。つぎに、インストール時に設定したORACLE関連の環境設定が全て正しく行われているか確認して下さい。合わせてイベントログにORACLE関連のエラーが記録されていないか確認して下さい。該当する場合、ORACLEを正しく起動して下さい。
(2)SQLアクセス制御が起動していない。
確認方法：タスクマネージャで、GSQJL010.EXEが起動されているか確認して下さい。起動に失敗した場合は、イベントログにエラーが記録されています。その内容を確認して下さい。該当する場合、SQLアクセス制御を正しく起動して下さい。起動方法は、サービスのDBstartを一旦停止させ（停止に少々時間がかかります）、CPUの負荷が安定してきたらDBstartを開始にします。

ファイル「090730_デバッグ版作成方法.ppt」を参照して、GSQJL010.ｖｃｐrojをデバッグコンパイル時、相関ソースファイル
・GCDStaticSQL.h・orb_cplus.h
・GCDStaticEntity.h
・GCDSqlAccess.hが見つけられなかったので、正しくコンパイルできません（詳細はシート「QA-009」を参照してください）。
ちなみに、「GSQJL010.vcproj」がVisualStudio2003プロジェクトですが、先日ご提供頂いた「GCCore.vcproj、GCRes.vcproj、GCDBServer.vcproj」はVisualStudio2005プロ
ジェクトです。この2つバージョンの整合性は大丈夫ですか？
2009/7/31

FAP

森崎

ProjectWEBの「L30SQLアクセス制御ソース一式」で提供した各ヘッダファイルのパス名を以下にmakeから記載します。
\make\inc\CORE\GCDStaticSQL.h\make\inc\od\orb_cplus.h\make\inc\CORE\GCDStaticEntity.h\make\inc\CORE\GCDSqlAccess.h
上記に存在しない場合は、ProjectWEBからコピーして下さい。
GSQJL010のプロジェクトファイルのDebugコンパイルの定義を読んだところ、AdditionalIncludeDirectoriesが未定義で、#include用のサーチパスが不完全でした。お手数ですが、Release版のコンパイル定義を参考に、Debug版にもAdditionalIncludeDirectoriesを定義していただけますでしょうか。
VisualStudio2005のプロジェクトファイルは富士通側の提供ミスでした。ProjectWEBのCore_Make(V4.0)にVS2003のプロジェクトファイルを格納しました（VS2005用に対して上書き保存しました）。

2009/7/31

17

Copyright 2012 FUJITSU LIMITEDうまくいった事
ワークプレイスによる情報共有
技術資料

マニュアル

ソースコードスケジュール

todo list

作業記録

アプリログ

ロードモジュール
スクリーンショット

コンパイルログ

資産やコミュニケーション手段を駆使し、スキル移植、問題解決、議論などが効率的にできた

リアルタイムな情報伝達
時差１時間はニアショアと大差ない
Eメール、TV会議、電話がいつでもできる環境構築などでつまづきながらもリアルタイムでサポートできた

互いに海外渡航せずに作業できた
18

Copyright 2012 FUJITSU LIMITED苦労した事
開発環境を揃えることOS、ミドルウエア、ドライバ、DBのデータなどの全てを日本と同じにするには至らなかった障害の再現（発生頻度）が日本よりずいぶん少なかった

自社製以外のソフトの輸出が大変
Rationalツールや日本語版VisualStudioの使用を断念した
ただしクラウド時代になって今はもっと障壁は低いはず

ソースとDLL混在での引き渡し
修正箇所の周辺はソース提供、他はDLLで提供した
ビルドの手間を省き、障害の再現に早期に着手できた資産が多過ぎる事からの不安を払拭した
19

Copyright 2012 FUJITSU LIMITED思わぬつまづき
事務的な手続きが大変見積もり依頼、発注手続き

該否判定
輸出手続き
海外へのワークプレイスの開設
自社にはオフショア開発のノウハウがあったが、自分には初めての経験だった

ここだけは国内ニアショアとは勝手が違う
20

Copyright 2012 FUJITSU LIMITED

まとめ

21

Copyright 2012 FUJITSU LIMITEDプロジェクトの成果
仮説の立証
実際に障害を発生させ、仮説通りの現象であることを確認した

障害の封じ込め修正リスクの小さい対処を施し、障害が再現できなくなることを確認した

短期、低予算プロジェクトの成功
障害対処時の、調査やデバッグが任せられる今後のスポット保守の足掛かりができた
22

Copyright 2012 FUJITSU LIMITEDUML採用で強まった保守性
パッケージ開発の経緯を振り返ると
もともと保守性の優先度が非常に高い開発だった
UMLによる設計（アーキテクチャもアプリケーションも）デザインパターンの多用（パターン指向開発）
オブジェクト指向言語の採用

自動生成と規約の徹底10年アーキテクチャ
約10年間、アプリケーションの基本動作を支えるアーキテ
クチャを変更せず、業務機能の強化を繰り返しながら製品は成長し続けている
23

Copyright 2012 FUJITSU LIMITED特許明細にもUMLを使用
処理の構造を説明する図にUMLを使用
特許 「オブジェクト業務システムおよび方法」に添付した図 （1998年出願）

24

Copyright 2012 FUJITSU LIMITED成功へのポイント
製品全体のアーキテクチャ、アプリケーションの構造と振る舞いをUMLで記述していた
オフショア先に仕様が正確に伝わり、作業の後戻りが起きにくいアーキテクチャ、デザインパターン、自動生成等の規則を決めて一貫性のある開発をしていた
保守作業向けに提示するUMLの仕様書は短期間で理解できる

オフショア先に業務スキルは求めなかった
ITスキルの高い人材をオンデマンドに確保できる25

Copyright 2012 FUJITSU LIMITED

参考文献
1.

吉田裕之，森崎雅稔：パターン指向アプリケーション開発，雑誌FUJITSU
VOL.50.No.3，富士通，1999．
http://jp.fujitsu.com/about/magazine/backnumber/vol50-3.html

2.

森崎雅稔，吉田裕之：オブジェクトGLOVIAのコンポーネント技術，雑誌
FUJITSU VOL.50.No.6，富士通，1999．
http://jp.fujitsu.com/about/magazine/backnumber/vol50-6.html

3.

森崎雅稔，吉田裕之：オブジェクト指向業務システムおよび方法，特許明細，特願平10-300690，富士通，1998．

26

Copyright 2012 FUJITSU LIMITED27

Copyright 2010 FUJITSU LIMITED