ソフトウェア開発の仕様を 如何に厳密にするか? -...
TRANSCRIPT
ソフトウェア開発の仕様を 如何に厳密にするか?
酒匂寛
[email protected] Designers’ Den Corp.
2013/05/08 (c) 2013, Sako Hiroshi @ IST2013 1
お話しすること
• 「仕様」の位置付け – 厳密な記述が何をもたらすか
• 厳密な仕様記述の事例 – 日本と欧州のプロジェクト例
• 導入のためのアドバイス – まずは気軽に始めるために
2013/05/08 (c) 2013, Sako Hiroshi @ IST2013 2
仕様の位置付け
ㄢ㢟 ᵝ タィ
౯್
䛆㢪ᮃ䛇せồ䚸ᥦ䚸ᨵၿ䚸⏬䚸ḧᮃ䚸㐀䚸ㄢ㢟䚸HWF���
䛆ᐇ䛇ἲ௧䚸⌮ㄽ䚸ཎ๎䚸እ㒊䚸ே㛫䚸HWF���
ไ⣙䚸᮲௳䚸ᛶ㉁䚸ሗ䚸ᶵ⬟䚸≧ែ䚸㛫䚸య㦂䚸 HWF����
䜰䞊䜻䝔䜽䝏䝱䚸䝥䝻䝖䝁䝹䚸䝕䞊䝍ᵓ㐀䚸䝕䞊䝍⟶⌮䚸䜰䝹䝂䝸䝈䝮䚸ᐇゝㄒ䚸⏝⪅䜲䞁䝍䝷䜽䝅䝵䞁䝕䝄䜲䞁䚸HWF���
䛂ᵝ䛃䛿䛂ㄢ㢟䛃䛸䛂タィ䛃䛾᥋Ⅼ
2013/05/08 (c) 2013, Sako Hiroshi @ IST2013 3
仕様の追跡性
ㄢ㢟 ᵝ タィ
2013/05/08 (c) 2013, Sako Hiroshi @ IST2013 4
記述される要素間の対応関係をはっきりさせるためには、記述を厳密に行い、かつ機械による管理を行いやすいようにすることが有効
仕様が曖昧であることの弊害
᪤Ꮡ䛾タィ䛂᭩䛃䠄HJ��80/�⮬↛ゝㄒ䠅
ㄢ㢟
ᨵၿ㡯┠
ᶵ⬟ᕼᮃ
እ㒊ไ⣙䠖≀ὶ
እ㒊ไ⣙䠖ᮇ㝈
እ㒊ไ⣙䠖ண⟬
᪤Ꮡ䛾ᵝ䛂᭩䛃䠄HJ�⮬↛ゝㄒ䠅
䛣䛣䛜䛷䛒䜛䛸䠆グ㏙䛾୍㈏ᛶ䚸ᛶ䛾᳨ド䛜ᅔ㞴䠆ᵝ䜰䝙䝯䞊䝅䝵䞁䛻䜘䜛᳨ド䛜ᅔ㞴
ᵝ䠍䠄᭕䠅
ᵝ䠎䠄▩┪䠅
ᵝ䠏䠄ᮍグ㏙䠅
ᵝ䠐䠄ಶே䝯䝰䠅
⏬㠃䜲䝯䞊䝆
᧯స⎔ቃ䜰䞊䜻䝔䜽䝏䝱
䝁䞁䝫䞊䝛䞁䝖㓄⨨
䝰䝆䝳䞊䝹ᶵ⬟タィ䠍
䝰䝆䝳䞊䝹ᶵ⬟タィ䠎
䝴䞊䝇䜿䞊䝇
ᵝグ㏙䛜䛷䛒䜛䛸䠆䛂ㄢ㢟䛃䛸䛾㛫䛾㏣㊧ᛶ䜢㎺䜛䛾䛜ᅔ㞴
ᵝグ㏙䛜䛷䛒䜛䛸䠆ㄢ㢟䛜ኚ᭦䛥䜜䛯䛸䛝䛻䛂ᵝ䛃䜢䛧䛶タィ䜈䛸ṇ䛧䛟䛥䜜䛶䛔䜛䛛䛾☜ㄆ䛜ᅔ㞴䠆ពᅗ䛧䛯䛂ᵝ䛃䛻䛂タィ䛃䛜ἢ䛳䛶䛔䜛䛛䛾᳨ド䛜ᅔ㞴
2013/05/08 (c) 2013, Sako Hiroshi @ IST2013 5
簡単な記述例:「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 がどのような性質を満たすべきかはきちんと示されている。
仕様記述言語による「問題領域」の語彙の充実
厳密さ ((機械処理、テスト可能))
貸出機能 : 図書館型 * 書籍型 * 利用者型 -‐> 図書館型
貸出機能(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
問題領域の語彙を充実させることによって仕様の見通しが良くなる。 一部は仕様部品資産として残る
事例:FeliCa ファームウェア 問題領域:IC カードファームウェア 仕様記述言語:VDM++
工夫 効果
VDM仕様を開発チームで共有される辞書と位置づけた
開発対象への共通理解が得られた
VDM仕様のテスト、品質管理チームによるテストケースレビューをおこなった
製品の信頼性が非常に高くなった
VDMのトレーニングとして1週間のコースと現場でのVDM専門家のコンサルテーションを受けた
仕様の読み書き
2013/05/08 (c) 2013, Sako Hiroshi @ IST2013 8
FeliCa ファームウェア -‐ プロジェクトの流れ
(c) 2013, Sako Hiroshi @ IST2013 2013/05/08
事例:オランダ軍メッセージ分析 問題領域:オランダ軍メッセージデータマイニング 仕様記述言語: VDM-‐SL, 自然言語
工夫 効果
定型化された要求記述 仕様とテスト仕様をそれぞれ独立して策定
VDM仕様のアニメーション実行
仕様の実行で得た知見を使って自然言語で効果的な顧客レビュー
VDM仕様からのコード自動生成
仕様記述の工数を確保しながら全体の工期を圧縮
2012/11/15 形式手法の導入 © 2012, Sako Hiroshi 10
オランダ軍メッセージ分析- プロジェクトの流れ
2012/11/15 形式手法の導入 © 2012, Sako Hiroshi
厳密な仕様記述導入のための留意点
• 厳密な仕様記述をプロジェクト情報のハブとする – 常に頼れる検証済みの情報の起点として利用できるようにす
ることが必要 – 記述対象を選んだらそれに関しては完全に記述する
• 複数の手法を組み合わせる – 仕様記述以外にも適切な手法を組み合わせることにより、厳密
な仕様記述の効果が増加する
• 適切なツールを選択/調整/作成する – 単体のツールだけではなく、必要に応じた組合せが必要 – 形式的記述を核に形式的ではない記述との相互変換を行う
• 積極的な事例開示を行う – 積極的な事例開示によって皆の知恵を集めやすい土壌を作る
2013/05/08 (c) 2013, Sako Hiroshi @ IST2013 12
厳密な仕様記述を可能とする
形式手法とは?
• 銀の弾丸ではない • 数学でもない(類似した記法は使う) • ただ開発対象をより厳密に書き留め、解析可
能にするための単なる「工学的」手法である • 世界中で少しずつ採用が進んでいる
– 欧州:一番伝統もありリソースもある – 米国:モデル検査に強みがある – 日本:世界的成功事例(FeliCa)を擁する
2013/05/08 (c) 2013, Sako Hiroshi @ IST2013 13
避けるべきこと
• 闇雲な適用 – 「すべて」を記述することは労多くして実り無し – 適切な「性質」に着目しそれに関しては完全に記
述する
• 我流の記述 – 一度は専門家のレビューを受けた方がよい – 特に what と how の混同による記述を詳細に行
うと保守の難しい仕様を生み出しがちになる
2013/05/08 (c) 2013, Sako Hiroshi @ IST2013 14
明日から始めるには?
• 現状の棚卸をする – プロセスとドキュメントを整理する
• 形式仕様、形式手法適用が相応しい部分/対象を選ぶ – いくつか候補を選び、記述を用いたプロセスを試行す
る。同時にコアメンバーを訓練する • 可能ならば「新しいプロジェクト」の上流から適用
してみる – コンサルタントのアドバイスとレビューが初期にはとて
も有効
2013/05/08 (c) 2013, Sako Hiroshi @ IST2013 15
まず手を動かそう
学習リソース
2012/11/15 形式手法の導入 © 2012, Sako Hiroshi 16
利用できる様々なリソース
• 様々な実践ノウハウの提供
• 実践ノウハウの共有
• VDM, B, SPIN, etc …
• 基本的な情報
書籍 ツール
コンサルタン
ト
コミュニティ
2012/11/15 形式手法の導入 © 2012, Sako Hiroshi 17
VDM研究会 SEA SIGFM FM Europe
バートランド・メイヤー氏による、「オブジェクト指向の原理とモデル」を徹底的に考察した入門書。「契約による設計」に関する解説もオリジナル故にしっかりとしている。
2012/11/15 形式手法の導入 © 2012, Sako Hiroshi 18
契約による設計
形式仕様記述で用いられる事前条件、事後条件、不変条件などについて、日本語で詳しく説明された書籍の代表。 ソフトウェア工学の学習書籍としても読み応えあり。
2012/11/15 形式手法の導入 © 2012, Sako Hiroshi 19
要求と仕様の大切さ
ソフトウェア要求と仕様 ― 実践、原理、偏見の辞典 マイケル ジャクソン (著), 玉井 哲雄 (訳), 酒匂 寛 (訳) 本体価格: \3,570 単行本: 267 p ; サイズ(cm): 21 x 15 出版社: 新紀元社 ; ISBN: 4775302876 ; (2004/04)
ソフトウェア開発を「記述」の体系として捉え、それにまつわる様々な話題を取り扱った本
形式仕様記述
2012/11/15 形式手法の導入 © 2012, Sako Hiroshi 20
ソフトウェア開発のモデル化技法 岩波書店
VDM-‐SL の教科書。形式仕様を用いたモデル化の基本を解説
形式仕様記述
VDM++によるオブジェクト指向システムの高品質設計と検証(翔泳社) ジョン・フィッツジェラルド、ピーター・ゴルム・ラーセン、ポール・マッカージー、ニコ・プラット、マーセル・バーホフ (著), 酒匂 寛 (翻訳)
21
VDM++を用いて、形式モデリングの基礎と応用を学習します。他の形式手法にも応用可能。
2012/11/15 形式手法の導入 © 2012, Sako Hiroshi
モデル検査
2012/11/15 形式手法の導入 © 2012, Sako Hiroshi 22
SPINモデル検査―検証モデリング技法 中島 震 近代科学社 2008年
モデル検査ツール SPIN を用いたモデル検査入門書