52
成功した形式手法導入調査例の 分析と発見 〜どのように形式手法は導入されたか?〜 酒匂 寛 Designers’ Den Corp. [email protected] 2012/11/15 形式手法の導入 © 2012, Sako Hiroshi 1

成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

成功した形式手法導入調査例の  分析と発見

〜どのように形式手法は導入されたか?〜  

酒匂 寛  Designers’  Den  Corp.  [email protected]

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   1

Page 2: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

自己紹介

•  1980  年代  –  COBOL  とワークステーションの時代  –  汎用機・オフコンを用いた  COBOL  開発  –  ワークステーション上での開発環境の開発  

•  1990  年代  –  大規模プロジェクトとオブジェクト指向の時代  –  2000人月超の大規模プロジェクトをOOで  –  組込み機器のソフトウェアをフレームワーク化  

•  2000  年代  –  モデリングと形式手法の時代  –  証券、組込み機器に形式手法を適用  –  領域・課題・仕様・設計・検証のフレームワーク化

2 2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi  

証券業務(TradeOne)  FeliCa  Firmware

Page 3: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

内容

•  形式手法とは  •  事例ピックアップ  •  事例分析を通して観察された点  •  学習リソース  •  まとめ  

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   3

Page 4: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

形式手法とは

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   4

Page 5: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

形式手法とは?

•  銀の弾丸ではない  •  数学でもない(類似した記法は使う)  •  ただ開発対象をより厳密に書き留め、解析可

能にするための単なる「工学的」手法である  •  世界中で少しずつ採用が進んでいる  

– 欧州:一番伝統もありリソースもある  – 米国:モデル検査に強みがある  – 日本:世界的成功事例(FeliCa)を擁する

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   5

Page 6: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

厳密さのレベル

•  レベル1:離散数学の概念や記法を用いる  •  レベル2:適切なツールの支援と共に形式仕

様記述言語を利用する  •  レベル3:厳密な仕様を検証する  •  レベル4:完全に形式的に開発する(抽象的

な仕様を詳細化して行く)

PETER  GORM  LARSEN教授 ([email protected])  による

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   6

このレベルまでは比較的容易  FeliCa  などの事例もここに相当する

Page 7: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

形式手法の色々

•  モデルベースアプローチ(VDM,  Z,  B)    •  代数アプローチ(Act  One,  Larch,  OBJ)    •  プロセス代数  (CSP,  CCS)    •  論理アプローチ  (RTL,  TLA)    •  リアクティブアプローチ (Petri-­‐nets,  SDL,  SAO)    •  複合アプローチ: eg.  RAISE  (VDM  +  CSP)  and  LOTOS  (Act  One  +  CCS)  

今回の話題で取り上げる手法  形式仕様記述を行い検証  産業界での導入に馴染みやすい

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   7

Page 8: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

簡単な例:「N営業日後」の仕様

2012/11/15   形式手法の導入 ©  2012,    Sako  Hiroshi     8  

指定した日付(平日)から休日を除いた N  日後の日付を返す関数の「仕様」は?  

public  N営業日後 :  日付 * nat  -­‐>  日付 N営業日後(起算日,  日数)  ==            is  not  yet  specified      -­‐-­‐    アルゴリズムは未定  pre          not  休日(起算日)  and  日数  >  0  post          let  days  =  全日付(起算日,  RESULT)  in                                                card  平日集合 (days)  -­‐  1  =  日数;

事後条件に注目。RESULT(関数の戻り値)そのものが式の一部に使われている。RESULT  の求め方はここには示されていないが、RESULT  がどのような性質を満たすべきかはきちんと示されている。

Page 9: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

事例ピックアップ

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   9

Page 10: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

調査対象事例  

組み込み   FeliCa,  BPS1000紙幣検査機  

航空管制   SHOLIS,  iFACTS  

金融   TradeOne  

言語処理   オランダ軍メッセージ分析,  CAVA  

機密情報処理   MULTOS  CA,  Tokeneer  

 電子商取引   オランダ花市場  

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   10

以下の形式手法導入プロジェクトに関して実担当者にインタビューを行った  詳細な調査報告書は  IPA/SEC  のホームページからダウンロード可能になる予定  

Page 11: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

FeliCa  ファームウェア  (1)  問題領域:IC  カードファームウェア  仕様記述言語:VDM++  

工夫   効果  

VDM仕様を開発チームで共有される辞書と位置づけた  

開発対象への共通理解が得られた  

VDM仕様のテスト、品質管理チームによるテストケースレビューをおこなった  

製品の信頼性が非常に高くなった  

VDMのトレーニングとして1週間のコースと現場でのVDM専門家のコンサルテーションを受けた  

仕様の読み書き  

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   11

Page 12: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

FeliCa  フォアームウェア  (1)    -­‐  プロジェクトの流れ  

形式手法の導入 © 2012, Sako Hiroshi 2012/11/15

Page 13: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

FeliCaファームウェア(2) 仕様記述言語: VDM++

工夫 効果

スタイルを操作的記述から関数的記述へ変更した

可読性の向上

VDM仕様から決定表を導出した テストケース作成時の仕様の可読性の向上

命名規則により隠蔽関数を区別した

仕様と設計を分離することができた

(1)に引き続きVDM専門家のコンサルテーションを受けている

仕様に関する工程の改善

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   13

Page 14: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

FeliCa ファームウェア (2)

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   14

Page 15: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

オランダ軍メッセージ分析  問題領域:オランダ軍メッセージデータマイニング  仕様記述言語:  VDM-­‐SL,  自然言語  

工夫   効果  

定型化された要求記述   仕様とテスト仕様をそれぞれ独立して策定  

VDM仕様のアニメーション実行  

仕様の実行で得た知見を使って自然言語で効果的な顧客レビュー  

VDM仕様からのコード自動生成  

仕様記述の工数を確保しながら全体の工期を圧縮  

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   15

Page 16: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

DOD - プロジェクトの流れ

2012/11/15 形式手法の導入 © 2012, Sako Hiroshi

Page 17: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

オランダ軍メッセージ分析:コスト配分

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   17

実装   テスト  

実装   テスト  分析・設計  

伝統的手法:

VDMTools®:

Cost

分析・設計

900 2000 700

1200 500 600

0% 64% 100%

単位は人時

Page 18: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

MULTOS  CA  マスターカード認証サーバ  仕様記述言語:Z記法(+SPARK)、UML、自然言語  ITSEC  E6セキュリティ基準(形式的検証済み設計、テスト)  

工夫   効果  

コンテキスト図、クラス図、構造化操作定義、英語からZ仕様を作成し、CSP, SPARKで設計/実装  

従来手法による顧客との対話と形式手法による仕様記述と設計、実装を両立  

SPARKによりバッファオーバランや実行時例外等の検証、静的分析  

信頼性の向上  

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   18

Page 19: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

MULTOS – プロジェクトの流れ

2012/11/15 形式手法の導入 © 2012, Sako Hiroshi

Page 20: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

iFACTS 英国航空管制システム

安全性、スケジュール厳守(ロンドンオリンピック) 顧客もZ記法を学習し、開発に参加

読み 書き

人数 75名 11名

職種 開発者、ドメイン専門家、航空管制官

開発者

コース 3日間 3日間

実地訓練 1週間 3ヶ月

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   20

Page 21: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

iFACTS

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   21

Page 22: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

Tokeneer 米国国家安全保障庁(NSA)の生体認証システム

仕様記述言語: Z記法(+SPARK) Common Criteria EAL5(準形式的設計、及びテスト) 工夫 効果

顧客がZ記法を学習し、Z仕様をレビュー

遠隔地にいる顧客による正確なレビュー

1週間のコース、Z専門家がアシストしイディオム等の解説

仕様の読み

全ての開発リソースが公開されている

厳密な手法を用いた開発経験の共有

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   22

Page 23: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

Tokeneer

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   23

Page 24: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

TradeOne 証券バックオフィスパッケージ

仕様記述言語: VDM++

工夫 効果

ユースケース仕様の回帰テスト、仕様を繰り返し改善

システムの信頼性が向上した

第二期では日本語の識別子を採用

仕様の生産性と可読性が大幅に向上した

ドメインフレームワークの採用

仕様と設計の追跡性が向上し、ユースケースの誤りに素早く対応できた

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   24

Page 25: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

TradeOne

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   25

Page 26: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

事例分析を通して観察された点

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   26

Page 27: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

成功プロジェクト共通の属性

•  ヒアリング調査の結果から、どのプロジェクトも共通して、 厳

密な仕様を、プロジェクト全体から参照される 辞書あるいは

情報のハブとして用いていることが明らかとなった。

•  ヒアリング調査したプロジェクトでは、 「厳密な仕様」の取りま

とめに形式手法を用いることにより、 検証済の記述単位と記

述範囲を明確化することができていた。

•  仕様の一部を、形式手法以外の表現手段 (日本語による文

章、多様な図や表、等)として抽出することで、 議論したりレ

ビューしたりという作業が大幅に容易化されていた。

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   27

Page 28: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

要求

仕様

設計 妥当性を検証 正当性を検証

検証 検証 検証

テストケース テストケース

システム  テスト

単体・結合  テスト

テストケース

ユーザー  テスト

利用者の確認精度向上 早期の検証によるコスト減

下流工程への精度の高い指示 効果的なテストケース作成

厳密な仕様の位置付け

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   28

Page 29: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

FeliCa  フォアームウェア  (1)    -­‐  プロジェクトの流れ  

形式手法の導入 © 2012, Sako Hiroshi 2012/11/15

再掲

Page 30: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

FeliCa  (1)から FeliCa  (2)へ  厳密な仕様記述の改善例

考察:ラベル付き条件によるレビュー容易性の評価

cases false : (パケットサイズ十分? ("サービス数”)), (サービス数範囲内? (cmd_pkt, cmnd_pkt_st))) -> <ERROR_NO_RESPONSE>, others -> <SUCCESS> end;

-- パケットの長さがサービス数まで存在する十分なパケットであること packet_len_of_service_num >= 9 and -- パケットにおいて指定されたサービス数が規定の範囲内であること 1 <= service_num and service_num <= 32

private サービス数範囲内? : PACKET_DATA * PACKET_STRUCTURE -> bool サービス数範囲内?(cmnd_pkt, cmnd_pkt_st) == let CmndPkt = パケット要素取得(cmnd_pkt, cmnd_pkt_st), num = hd CmndPkt(“サービス数") in 1 <= num and num <= 32;

ラベル付き条件を用いない場合

ラベル付き条件を用いた場合

左上の「ラベル付き条件を用

いない場合」は  FeliCa(1)  の記述方式の一部である。日

本語による注釈が読みやす

さの向上のために添えられ

ていた。    FeliCa(2)  では更に読みやす

さを向上させることを狙い、

左下の「ラベル付き条件を用

いた場合」のような工夫を

行った。  述語に日本語識別子を用い

たり、記述形式を工夫したり

することによって、レビューの

しやすさを向上させた。

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   30

Page 31: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

 FeliCa  (2)    

形式仕様からのテストケース導出

「ラベル付き条件」の形式で

書かれた仕様から、体系的

に左のようなデシジョンテー

ブルを抽出し、テストケース

を設計できるような仕掛けを

考えた。  レビューがしやすくなり、機械

的なテストケースのチェック

ツールも用意された。

ディシジョンテーブルの活用

条件 同値分割 境界値 TC1 TC2 TC3 TC4

実行可能モード? TRUE 0..2 Y Y Y

FALSE 3 Y

パケットサイズ十分? TRUE 10 Y Y Y

FALSE 9 Y

サービス数範囲内? TRUE 1..32 Y Y

N

FALSE 0, 33 N Y

結果 正常応答 Y

応答なしエラー Y

応答ありエラー Y Y テストケースの網羅性を視覚的に確認する ことができる。レビューが容易になる。

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   31

Page 32: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

形式仕様の適用箇所

•  形式手法はどの段階にも適用可能 o  仕様、設計、実装、検証のどの段階でも利用されている

o  成功したプロジェクトは皆、形式記述がその前後の段階や成果物とどのように対応しているかが明確にされている

•  特定の特性全域を記述

o  成功したプロジェクトはプロジェクト内で着目したある特性に関しては全面的に選んだ形式記述を適用している

o  複数の作業者が協調するためには必須

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   32

Page 33: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

自然言語(日本語)記述との共存

•  開発チーム内での扱い o  形式記述と非形式記述(自然言語による説明や図など)

を併記・併用することにより、読み易さと厳密さを共存させることができる

o  両者の間の食い違いを取り除き易いように適度な粒度(例えば1ページ程度)の単位で構成する

•  開発チームと外部との関係での扱い o  外部を形式手法の読み手として訓練する方法

o  外部を形式手法の読み手としては訓練せず、形式手法を使う技術者が様々な形に変換して外部に提示する方法

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   33

Page 34: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

調査事例における「顧客」との対話手段

形式仕様を利用 形式仕様を利用せず

国内 (*FeliCa  は  API  文書を形式仕様から半自動生成)

FeliCa(1)  FeliCa(2)  TradeOne

海外 iFACTS  Tokeneer

SHOLIS  オランダ軍メッセージ分析  MULTOS  CA  BPS1000  CAVA  オランダ花市場

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   34

このプロジェクトを受託した Altran  Praxsis  という会社は、顧客との契約も形式仕様の項目ベースで行い、問題が生じたときにそれがどちらの責任かが逐一明確になるようになっている

Page 35: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

iFacts:テストケースの記述  自然言語  +  形式記述

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   35

Test Design

Page 36: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

厳密な仕様策定手順の一例

•  要求記述の内容のうち、問題領域自身の性質(システムが変えることのできない部分)と、構築対象(システムが影響を及ぼす部分)への記述を区別する (à  領域資産化)

•  要求記述を読み、用語を切り出す •  クラスもしくは型と、関数もしくは操作の候補を見つける •  クラスの構造(型、属性、関連)に関する概略を書く •  関数/操作に関する概略を書く(シグニチャを決める) •  要求記述から不変な性質を抽出して定義する •  事前条件、事後条件もしくは定義本体を記入することによって、関

数/操作定義を完成させる、必要ならば型定義を変更する •  作成された仕様のモデルが利用者の期待や、要求中に現れる項

目や制約を満たしているかどうかをアニメーション等を通して検証する  

•  以上のステップを必要なだけ繰り返す

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   36

Page 37: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

「問題領域」の語彙の充実 厳密さ ((機械処理、テスト可能))

貸出機能 :  図書館型 * 書籍型 * 利用者型                -­‐>  図書館型

貸出機能(lib,  book,  user)  ==          is  not  yet  specified      pre            book  in  set  dom  lib.登録書籍                -­‐-­‐  書籍が登録書籍であること

and  user  in  set  lib.登録利用者                  -­‐-­‐  利用者が登録利用者であること

and  書籍貸出可能数(lib,  book)  >  0                  -­‐-­‐  書籍に貸し出し用の余裕があること

and  (user  in  set  dom  lib.貸出中 and  (card  lib.貸出中(user)  <  3))    

               -­‐-­‐  利用者の利用制限冊数を超えていないこと

post                  -­‐-­‐  指定された書籍が「貸出中」に登録されてい

(user  in  set  dom  RESULT.貸出中)  and  (book  in  set  RESULT.貸出中(user));

厳密さ+読み易さ

貸出機能 :  図書館型 * 書籍型 * 利用者型                -­‐>  図書館型

貸出機能(lib,  book,  user)  ==          is  not  yet  specified      pre          登録済み書籍(lib,  book)          and  登録済み利用者(lib,  user)          and  貸出可能書籍(lib,  book)          and  利用者貸出制限数内(lib,  user)      post          書籍貸出中(RESULT,  book,  user);

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   37

問題領域の語彙を充実させることによって仕様の見通しが良くなる。  一部は仕様部品資産として残る

Page 38: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

既存資産の進化例

Level  0  現状 Level  1  現状記述 Level  2  現状改善 Level  3  次世代準備

(既存の仕様書) 階層構造を持つ 機種共通部分と独自部分

に分かれる

(仕様の回帰テストにより)既存の日本語仕様書との一致を保証済み

全体像を把握しやすい

仕様の十分な抽象化

検索性の向上 ある関心に特化した  

閲覧性がある

日本語仕様書  Ver.  A

日本語仕様書  Ver.  A

日本語仕様書  Ver.  B

形式仕様書  Ver.  X

形式仕様書  Ver.  Y

日本語仕様書  Ver.  C

形式仕様書  Ver.  Z

日本語仕様書との対応が明確で読みやすい記述

リファクタリング   フィードバック  

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   38

Page 39: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

階層記述の例

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   39

記述階層名 記述目的 記述例

検証シナリオ階層 仕様アニメーションを行うための検証シナリオ(テストケースなど)を定義した階層

(例えば非接触ICカードの場合) 個別コマンド検証シナリオなど

機能仕様階層 特定の応用に対する機能仕様を定義する階層

カード操作コマンド仕様など

問題領域データ階層 問題領域に特有の共通データ等を定義した階層

具体的なファイル構造など

問題領域階層 共通問題領域で繰り返し利用される関数や不変条件などを定義する階層

カードファイルシステム、データパケットの変換など

共通領域階層 特定の問題領域に依存しない階層。ネットワーク(数学的な意味で)や、組合せアルゴリズム、文字列や数値に関する共通処理などがここで記述される

階層型データ処理など

Page 40: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

学習リソース

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   40

Page 41: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

利用できる様々なリソース

•  様々な実践ノウハウの提供

•  実践ノウハウの共有

•  VDM,  B,  SPIN,  etc  …

•  基本的な情報

書籍 ツール

コンサルタン

コミュニティ

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   41

VDM研究会  SEA  SIGFM  FM  Europe

Page 42: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

バートランド・メイヤー氏による、「オブジェクト指向の原理とモデル」を徹底的に考察した入門書。「契約による設計」に関する解説もオリジナル故にしっかりとしている。  

2012/11/15   形式手法の導入 ©  2012,    Sako  Hiroshi     42  

契約による設計

形式仕様記述で用いられる事前条件、事後条件、不変条件などについて、日本語で詳しく説明された書籍の代表。  ソフトウェア工学の学習書籍としても読み応えあり。

Page 43: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

2012/11/15   形式手法の導入 ©  2012,    Sako  Hiroshi     43  

要求と仕様の大切さ

ソフトウェア要求と仕様 ― 実践、原理、偏見の辞典  マイケル ジャクソン  (著),  玉井 哲雄  (訳),  酒匂 寛  (訳)    本体価格:  \3,570  単行本:  267  p  ;  サイズ(cm):  21  x  15    出版社:  新紀元社  ;  ISBN:  4775302876  ;  (2004/04)      

ソフトウェア開発を「記述」の体系として捉え、それにまつわる様々な話題を取り扱った本

Page 44: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

形式仕様記述

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   44

ソフトウェア開発のモデル化技法  岩波書店

VDM-­‐SL  の教科書。形式仕様を用いたモデル化の基本を解説

Page 45: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

形式仕様記述

VDM++によるオブジェクト指向システムの高品質設計と検証(翔泳社) ジョン・フィッツジェラルド、ピーター・ゴルム・ラーセン、ポール・マッカージー、ニコ・プラット、マーセル・バーホフ (著), 酒匂 寛 (翻訳)

45

VDM++を用いて、形式モデリングの基礎と応用を学習します。他の形式手法にも応用可能。

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi  

Page 46: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

モデル検査

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   46

SPINモデル検査―検証モデリング技法  中島 震    近代科学社  2008年

モデル検査ツール  SPIN  を用いたモデル検査入門書

Page 47: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

まとめ

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   47

Page 48: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

形式仕様導入のための留意点

•  厳密な仕様記述をプロジェクト情報のハブとする –  常に頼れる検証済みの情報の起点として利用できるようにす

ることが必要  –  記述対象を選んだらそれに関しては完全に記述する  

•  複数の手法を組み合わせる –  仕様記述以外にも適切な手法を組み合わせることにより、厳密

な仕様記述の効果が増加する

•  適切なツールを選択/調整/作成する –  単体のツールだけではなく、必要に応じた組合せが必要  –  形式的記述を核に形式的ではない記述との相互変換を行う

•  積極的な事例開示を行う –  積極的な事例開示によって皆の知恵を集めやすい土壌を作る

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   48

Page 49: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

形式手法とは

•  銀の弾丸ではない  •  数学でもない(類似した記法は使う)  •  ただ開発対象をより厳密に書き留め、解析可

能にするための単なる「工学的」手法である  •  世界中で少しずつ採用が進んでいる  

– 欧州:一番伝統もありリソースもある  – 米国:モデル検査に強みがある  – 日本:世界的成功事例(FeliCa)を擁する

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   49

再掲

Page 50: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

明日から始めるには?

•  現状の棚卸をする  – プロセスとドキュメントを整理する  

•  形式仕様、形式手法適用が相応しい部分/対象を選ぶ  – いくつか候補を選び、記述を用いたプロセスを試行す

る。同時にコアメンバーを訓練する  •  可能ならば「新しいプロジェクト」の上流から適用

してみる  – コンサルタントのアドバイスとレビューが初期にはとて

も有効  

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   50

まず専門家のアドバイスを

Page 51: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

避けるべきこと

•  闇雲な適用  – 「すべて」を記述することは労多くして実り無し  – 適切な「性質」に着目しそれに関しては完全に記

述する  

•  我流の記述  – 一度は専門家のレビューを受けた方がよい  – 特に  what  と  how  の混同による記述を詳細に行

うと保守の難しい仕様を生み出しがちになる

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   51

Page 52: 成功した形式手法導入調査例の 分析と発見 - IPA · 様記述言語を利用する! • レベル3:厳密な仕様を検証する! • レベル4:完全に形式的に開発する(抽象的

2012/11/15 形式手法の導入 ©  2012,    Sako  Hiroshi   52

Questions?

ご清聴有難うございました