ソフトウェア開発の仕様を 如何に厳密にするか? -...

22
ソフトウェア開発の仕様を 如何に厳密にするか? 酒匂寛 [email protected] Designers’ Den Corp. 2013/05/08 (c) 2013, Sako Hiroshi @ IST2013 1

Upload: others

Post on 22-Sep-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

ソフトウェア開発の仕様を  如何に厳密にするか?

酒匂寛  

[email protected]  Designers’  Den  Corp.  

2013/05/08 (c)  2013,  Sako  Hiroshi  @  IST2013 1

Page 2: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

お話しすること

•  「仕様」の位置付け  – 厳密な記述が何をもたらすか  

•  厳密な仕様記述の事例  – 日本と欧州のプロジェクト例  

•  導入のためのアドバイス  – まずは気軽に始めるために

2013/05/08 (c)  2013,  Sako  Hiroshi  @  IST2013 2

Page 3: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

仕様の位置付け

ㄢ㢟 ᵝ タィ

౯್

䛆㢪ᮃ䛇せồ䚸ᥦ䚸ᨵၿ䚸⏬䚸ḧᮃ䚸㐀䚸ㄢ㢟䚸HWF���

䛆ᐇ䛇ἲ௧䚸⌮ㄽ䚸ཎ๎䚸እ㒊䚸ே㛫䚸HWF���

ไ⣙䚸᮲௳䚸ᛶ㉁䚸ሗ䚸ᶵ⬟䚸≧ែ䚸㛫䚸య㦂䚸 HWF����

䜰䞊䜻䝔䜽䝏䝱䚸䝥䝻䝖䝁䝹䚸䝕䞊䝍ᵓ㐀䚸䝕䞊䝍⟶⌮䚸䜰䝹䝂䝸䝈䝮䚸ᐇゝㄒ䚸⏝⪅䜲䞁䝍䝷䜽䝅䝵䞁䝕䝄䜲䞁䚸HWF���

䛂ᵝ䛃䛿䛂ㄢ㢟䛃䛸䛂タィ䛃䛾᥋Ⅼ

2013/05/08 (c)  2013,  Sako  Hiroshi  @  IST2013 3

Page 4: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

仕様の追跡性

ㄢ㢟 ᵝ タィ

2013/05/08 (c)  2013,  Sako  Hiroshi  @  IST2013 4

記述される要素間の対応関係をはっきりさせるためには、記述を厳密に行い、かつ機械による管理を行いやすいようにすることが有効

Page 5: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

仕様が曖昧であることの弊害

᪤Ꮡ䛾タィ䛂᭩䛃䠄HJ��80/�⮬↛ゝㄒ䠅

ㄢ㢟

ᨵၿ㡯┠

ᶵ⬟ᕼᮃ

እ㒊ไ⣙䠖≀ὶ

እ㒊ไ⣙䠖ᮇ㝈

እ㒊ไ⣙䠖ண⟬

᪤Ꮡ䛾ᵝ䛂᭩䛃䠄HJ�⮬↛ゝㄒ䠅

䛣䛣䛜䛷䛒䜛䛸䠆グ㏙䛾୍㈏ᛶ䚸ᛶ䛾᳨ド䛜ᅔ㞴䠆ᵝ䜰䝙䝯䞊䝅䝵䞁䛻䜘䜛᳨ド䛜ᅔ㞴

ᵝ䠍䠄᭕䠅

ᵝ䠎䠄▩┪䠅

ᵝ䠏䠄ᮍグ㏙䠅

ᵝ䠐䠄ಶே䝯䝰䠅

⏬㠃䜲䝯䞊䝆

᧯స⎔ቃ䜰䞊䜻䝔䜽䝏䝱

䝁䞁䝫䞊䝛䞁䝖㓄⨨

䝰䝆䝳䞊䝹ᶵ⬟タィ䠍

䝰䝆䝳䞊䝹ᶵ⬟タィ䠎

䝴䞊䝇䜿䞊䝇

ᵝグ㏙䛜䛷䛒䜛䛸䠆䛂ㄢ㢟䛃䛸䛾㛫䛾㏣㊧ᛶ䜢㎺䜛䛾䛜ᅔ㞴

ᵝグ㏙䛜䛷䛒䜛䛸䠆ㄢ㢟䛜ኚ᭦䛥䜜䛯䛸䛝䛻䛂ᵝ䛃䜢䛧䛶タィ䜈䛸ṇ䛧䛟䛥䜜䛶䛔䜛䛛䛾☜ㄆ䛜ᅔ㞴䠆ពᅗ䛧䛯䛂ᵝ䛃䛻䛂タィ䛃䛜ἢ䛳䛶䛔䜛䛛䛾᳨ド䛜ᅔ㞴

2013/05/08 (c)  2013,  Sako  Hiroshi  @  IST2013 5

Page 6: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

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

2013/05/08   (c)  2013,  Sako  Hiroshi  @  IST2013   6  

指定した日付(平日)から休日を除いた 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 7: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

仕様記述言語による「問題領域」の語彙の充実

厳密さ ((機械処理、テスト可能))

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

貸出機能(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   7

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

Page 8: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

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

工夫   効果  

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

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

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

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

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

仕様の読み書き  

2013/05/08 (c)  2013,  Sako  Hiroshi  @  IST2013 8

Page 9: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

FeliCa  ファームウェア    -­‐  プロジェクトの流れ  

(c) 2013, Sako Hiroshi @ IST2013 2013/05/08

Page 10: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

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

工夫   効果  

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

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

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

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

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

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

Page 11: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

オランダ軍メッセージ分析- プロジェクトの流れ

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

Page 12: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

厳密な仕様記述導入のための留意点

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

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

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

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

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

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

2013/05/08 (c)  2013,  Sako  Hiroshi  @  IST2013 12

Page 13: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

厳密な仕様記述を可能とする  

形式手法とは?

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

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

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

2013/05/08 (c)  2013,  Sako  Hiroshi  @  IST2013 13

Page 14: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

避けるべきこと

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

述する  

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

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

2013/05/08 (c)  2013,  Sako  Hiroshi  @  IST2013 14

Page 15: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

明日から始めるには?

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

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

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

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

も有効  

2013/05/08 (c)  2013,  Sako  Hiroshi  @  IST2013 15

まず手を動かそう

Page 16: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

学習リソース

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

Page 17: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

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

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

•  実践ノウハウの共有

•  VDM,  B,  SPIN,  etc  …

•  基本的な情報

書籍 ツール

コンサルタン

コミュニティ

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

VDM研究会  SEA  SIGFM  FM  Europe

Page 18: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

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

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

契約による設計

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

Page 19: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

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

要求と仕様の大切さ

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

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

Page 20: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

形式仕様記述

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

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

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

Page 21: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

形式仕様記述

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

21

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

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

Page 22: ソフトウェア開発の仕様を 如何に厳密にするか? - IPAソフトウェア開発の仕様を! 如何に厳密にするか? 酒匂寛! sako.hiroshi@gmail.com! Designers’DenCorp

モデル検査

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

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

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