Comments
Description
Transcript
講演資料 - IPA 独立行政法人 情報処理推進機構
形式手法を用いた実践的開発への取り組み ~ 北海道での形式手法の取り組み ~ 第14回 組込みシステム開発技術展 情報処理推進機構 ブースセミナー 2011年5月13日(金) 北海道電子機器株式会社 (地独)北海道立総合研究機構 穴田 秀樹 堀 武司 北海道での取り組み ・札幌を拠点とする民間企業を中心にして → 実践的な形式手法導入への取り組み Bメソッドによる開発 ・産業界での応用 → 中小企業の「ものづくり視点」での導入 ・形式手法への取り組み → 高信頼なソフトウエア開発の要求への対応 戦略的基盤技術高度化支援事業 ・平成22年度 経済産業省 戦略的基盤技術高度化支援事業に採択 ・北海道経済産業局 平成22年度 情報政策の重点取り組みについて ・IPAのバックアップ 支援事業にて、技術的アドバイス 実施例) 形式手法を用いた開発プロセスレビューなど 研究機関 北海道電子機器(株) (株)ミクロスソフトウエア (株)リック (株)ヴィッツ (地独)北海道立総合研究機構 (独)産業総合研究所 北海道大学 7機関の連携 企業紹介 - 北海道電子機器株式会社 会社概要 社名 北海道電子機器 株式会社 所在地 北海道札幌市東区北10条東10丁目1-1 設立 昭和52年9月 従業員数 24名 業務内容 ハードウエア ・ ソフトウエア ・ 機構 ハードウエア開発/組込みソフト開発 設計・製作・販売 当社は創業以来、計測制御関連の組込みシステムを、 ソフトウエア・ハードウエア技術により、提供してきました。 基本設計・開発・製造・現地試験までの一貫した ものづくり体制で、お客様のニーズに対応します。 機構設計 得意分野 : センサー微小信号処理、低消費電力回路 対応デバイス : SH、H8、R8C、SHARC、FPGA お問い合わせ 当社HPより http://www.hdks.co.jp TEL 011-748-3666 FAX 011-748-3660 多目的データロガー Hi・Per 企業紹介 - 株式会社 ミクロスソフトウエア HP:http://www.micros.co.jp/ TEL:044-813-7211 ミクロスソフトウェアの会社概要 会社名 株式会社ミクロスソフトウェア 創業 1983年2月23日 従業員数 103名 (2011年4月1日現在) 所在地 FAX:044-850-1655 ミクロスソフトウェアの製品/サービス ハイビジョン映像送出装置 GUIによる送出画像のデザイン・レイアウトの編集機能の提供や他システムから取得したデ ータを送出画像に取り込む等、フレキシブルなデータ連携を取ることが可能な「ハイビジョン 映像送出装置」のソフトウェアとハードウェアを共に提供している。 NHK放送にて、為替、 株価などの経済情報を いち早く、正確に伝える 為の放送システムとして 現在利用されている。 本社 神奈川県川崎市 北海道支社 北海道札幌市 北見事業所 デバイス仮想化技術 北海道北見市 <本社> 資本金 1億円 取得認証 ISO9001 / ISO14001 / ISO27001 /プライバシーマーク <札幌> 組込製品に搭載されるOS(NetBSD)上のデバイスを 仮想化し、製品システムのシミュレータ開発を行って いる。 ・デバイスドライバの擬似化と デバイスシミュレータ開発 ・カーネル割込制御、デバイス認識コントロール ・DMA転送シミュレーション ・メモリデバイスの仮想化 ・カーネル管理情報の動的変更制御 ・共有メモリ管理、メモリマップ変更 地図データオーサリング開発技術 JQA-QM4262 主な事業 JQA-EM3675 JQA-IM0584 ・カーナビゲーションシステム開発 ・携帯電話ソフトウェア開発 ・TV放送データ配信システム開発 ・複合機のドライバー/ミドルウェア開発 プライバシ ー カーナビゲーションシステム の開発で必要とされる、道路 データ、経路探索データ、音 声認識データなど全てのデー タのオーサリングツール開発 が可能。 国内の大手地図メーカーが 提供する地図に加え、海外の 主要地図メーカーの地図デ ータの作成が可能。 企業紹介 - 株式会社リック 会社概要 商 号 所在地 設 立 従業員数 業務内容 株式会社リック 北海道札幌市北区北6条西1丁目3番地 38山京ビル9F 平成7年1月 28名 業務系ソフト受託開発・組込系開発・技術支援・ハードウェア販売 パッケージソフト開発及び販売・研究開発など ハンディターミナル開発 ハンディターミナルによる 各種(ガス・水道・電気)の 検針業務アプリ開発や、 実績情報のリアルタイム 収集システム開発などを 手がけております。 検針が困難な箇所の メーターと無線で通信して 行う無線検針の通信ライブラリ などの開発も手がけています。 複合機 meap開発 あらゆる業種の様々な顧客 に対応する為の複合機専用 の開発環境にてプリンティング デバイスとして、FAXやPDF 加工など様々なAPIを駆使 して制御する為の開発を 行っています。 モバイル向けUIツール開発 モバイル向けに、画面遷移等を行なうライ ブラリ、UIデザインを構築するツール、各 種プラグインの開発を行なっております。 【お問い合わせ】 リックWebサイト http://www.lic.ne.jp/ (リックサイト内の「お問い合わせフォーム」もご利用下さい。) TEL 011-708-5501 FAX 011-708-5502 形式手法の活用 ・形式手法の導入は? 導入の敷居は低い! → 中小企業でも、取り組みが可能! ・記述してみると? 形式的仕様記述である。 プログラムを記述しているのではない。 → プログラム的な考えでは、うまくいかない・・・。 新しい手法には、新しい考えをしないと。 この後の、技術的内容にて、ご紹介します! 目次 Bメソッドの紹介 手法概要・産業界での適用実績 Bメソッドによる開発の流れ 仕様検証の仕組み … 何が検証できるのか? 導入にあたってのポイント Bメソッドの利点、課題点 他手法 (Z, VDMなど) との比較 まとめ Bメソッド 概要 概要 Z記法 や VDM と同じ、モデル規範型の形式記述手法の一つ Z記法の設計者の一人でもあるJean Raymond Abrialを中心として、 1980年代後半に開発された。 (ZやVDMと同様に) 集合論と述語論理を用いて仕様記述を行う 設計・開発手法全体を含む「メソッド」である (単なる仕様記述言語ではない) 形式的仕様記述~段階的詳細化~実装~コード生成 各工程における形式的検証 産業界での利用 欧州を中心に、産業界での実績が多数存在する。 パリ地下鉄14号線 自動運転システム など 実用に耐える水準の支援ツールが提供されている。 支援ツール Atelier-B (仏 Clearsy社) Bメソッド本来の検証方法(定 理証明)を行うツール 機能 文法チェック・型チェック 証明責務(PO)の生成 自動定理証明系による POの証明支援 コード自動生成(Cほか) V4.0からは、製品版が無償 公開されている。 支援ツール ProB Animator and Model Checker(独 duesseldorf大 他) B仕様記述に対して、仕様ア ニメーションとモデル検査 を行うためのツール 機能 シミュレーション実行(対話/ ランダム) モデル検査 状態の網羅的探索 デッドロック等の検出 時相論理式(LTL, CTL) 状態遷移グラフの可視化 無償で利用可能 Bメソッドによる開発の流れ 「正しい仕様・設計」から「正しいプログラム」を導出する。 “Correctness by Construction”の考え方 要求 仕様検討 抽象機械 Bツールによる検証支援 構文・型検査 証明責務生成/証明 構文・型検査 証明責務生成/証明 構文・型検査 証明責務生成/証明 設計検討 詳細化 設計検討 実装 自動コード生成 プログラム B抽象機械 (Abstract Machine) MACHINE 機械名称 (パラメータ, ...) VARIABLES 変数名, ... INVARIANT 変数の型宣言 & 抽象機械の不変条件 INITIALISATION 変数の初期化処理 OPERATIONS 出力変数 操作1 (パラメータ, ...) = PRE 事前条件 THEN 操作の処理内容 END END 出力変数 操作2 (パラメータ, ...) ... END • 抽象機械 – 状態+操作をカプセ ル化したもの – 状態:状態変数 – 操作:状態変数の書 き換え規則 • プログラム言語との違い – 不変条件:抽象機械 の状態が常に満たし ているべき条件 – (操作の)事前条件:操 作の実行時に満たさ れるべき条件 – 集合論と述語論理に 基づく文法 簡単なB抽象機械の記述例 Booking (座席予約) MACHINE Booking (max_seat) CONSTRAINT max_seat ∈ NAT VARIABLES seat // 残り座席数 INVARIANT seat ∈ 0 .. max_seat // 整数の部分集合であり // 0~max_seatの値をとる INITIALISATION seat := max_seat OPERATIONS book = PRE 0 < seat THEN // 座席が1以上なら予約可 seat := seat – 1 END; cancel = PRE seat < max_seat THEN // 最大数以上は返却不可 seat := seat + 1 END END • 概要 – 座席の予約、キャンセル • 抽象機械の記述 – 状態 • 現在の残り座席数 – 操作 • 座席を予約する • 予約キャンセル • 通常のプログラム言語の記 述に近い Bメソッドによる検証のしくみ 何が出来るのか? ・抽象機械の「整合性」の検証 仕様記述の一部として、「不変条件」と呼ばれる条件式を記述する。 → 不変条件が常に成立していることを保証出来る ・段階的詳細化の過程が正しいことの検証 抽象機械(モジュールの外部仕様)を記述 詳細化機械(具体的な実現方法・実装方法)を記述 → 詳細化の過程が正しいこと(仕様に矛盾しない実装であること) を、検証出来る 具体的な仕様検証の方法 定理証明による方法 仕様記述から「証明責務」(Proof Obligation)とよばれる証明問題を生成 POを全て証明できた → 仕様の整合性が保証 証明作業は、主に自動定理証明プログラムで行う 検証作業には、専門知識と工数が必要 モデル検査による方法 状態空間を網羅的に探索し、不変条件が偽になる状態がないか調べる。 検証作業はツールによる自動実行。 状態空間が広い、または無限の場合、検証作業は困難になる。 Bメソッドでは、両方のツールが提供されている。 手法の特性に合わせて、使い分けが可能! 不変条件の設定 車速・ロックボタンとドアロック状態の関係を、不変条件として整理してみた。 車速15km以上ならば、ドライバ席はロック状態でなければならない。 車速15km以上、または全ロックボタンONならば、助手席はロック状態でなければならない。 車速15km以上、または全ロックボタンON、または左チャイルドロックONならば、左後席は ロック状態でなければならない。 車速15km以上、または全ロックボタンON、または右チャイルドロックONならば、右後席は ロック状態でなければならない。 INVARIANT ..... /* システムの不変条件 */ (speed >= 15 ⇒ l_driver=lock) & ((speed >= 15 or b_al=b_on) ⇒ l_codriver=lock) & ((speed >= 15 or b_al=b_on or b_cl=b_on) ⇒ l_rear_L=lock) & ((speed >=15 or b_al=b_on or b_cr=b_on) ⇒ l_rear_R=lock) 上記の内容が常に真であることが、形式検証によって保証できる。 ドアロック管理システム 操作の記述 操作として記述したモデルの振る舞いが、不変条件と矛盾していない事を、数学 的に示すことが出来る。 OPERATIONS // 助手席ドアのロック/解除 unlock_codriver = PRE l_codriver=lock & speed <15 & b_alllock=b_off THEN l_codriver := unlock 速度と全ロックボタンの END; 状態を、事前条件に記述 lock_codriver = PRE l_codriver=unlock THEN l_codriver := lock END ツールによる反例の発見 • • 発見された反例 – speed=0 (停車状態) – 助手席ロック解除 (speed<15 なので可能な操作) – speed=15 (車が動き出した) – × 車速15km以上、または全ロックボタンONならば、助手席はロック状態でなければな らない 対処 – 車速が15km/hを超えると、自動的にドアをロックする機能を追加。 – ロック解除禁止ボタンについても同様の不具合があったので、仕様を修正 set_speed (ss) = PRE ss : NAT & (ss=0 or ss=15 ) THEN IF ss < 15 THEN speed := ss ELSE speed := ss || l_driver := lock || l_codriver := lock END END; 全ての状態で不変条件が満たされている 事を確認 初期仕様の不整合を見つける Bによる形式的仕様記述 不変条件による記述 What 寄り 漠然とした 要求仕様 矛盾 操作の記述 How 寄り 異なる観点から記述する事で、仕様の不整合に 気づくことが出来る。 Bメソッド導入のポイント 形式手法未経験の中小企業エンジニアが、一年間 Bメソッドに取り組ん できた H22年度: 形式手法の調査、開発の準備 H23年度~:実開発(模擬プロジェクト)への適用と、効果の測定 その経験に基づき ・技術導入にあたってのポイントとなる事項 ・陥りやすい問題点 について、いくつか紹介します。 Bの記述は、制約が厳しい 抽象機械 Foo.mch 詳細化 Foo.ref 実装 Foo.imp ・同時実行文のみ記述可能 ・逐次実行文の記述は禁止 どちらでも使える モジュールの インターフェース (引数・戻り値)は 最初に決めたものから 変更出来ない ・同時実行文は禁止 ・逐次実行文のみ記述可能 ・抽象的なデータ型は使用出来ない 同時実行・逐次実行文の記述、利用出来るデータ構造、インターフェースの変更などにつ いて、かなり厳しい制約がある。 抽象機械~詳細化~実装のフェーズによって、ルールが180度変化する 初学者が非常に戸惑いやすい点 厳しい制約は、必ずしも の欠点ではなく、利点でもある 記述制約により、Bメソッドの方向性に沿った開発が可能 抽象機械 Foo.mch 逐次実行文が禁止されているので、 プログラム的な処理手順を書こうと 思っても書けない。 What を書くことを「強制」される 詳細化 Foo.ref 実装 Foo.imp 抽象機械で定義された仕様を 実現するための、具体的な処理手順 Howを記述する。 ・一般のソフト技術者は、仕様(What)を書くべき局面でも、プログラム的な処理手順(How) を記述してしまいがちである。 → 各フェーズの記述の制約によって、Bメソッドらしい記述が「強制」される。 ・その他の制約も、Correctness by Construction に基づく設計・検証を実現するために必 要なもの 逐次処理でなければ表現出来ない場合 MACHINE Demo OPERATIONS // 抽象機械では空の処理 // として記述 IMPLEMENTATION Demo_i REFINES Demo : OPERATIONS // 詳細化段階で、逐次処理として記述 run = skip run = VAR sw1, sw2, sw3, sw4, disp IN disp get_lcd_disp; IF sw1=TRUE & pre_sw1=FALSE : END END ・しかし、実際の開発の局面では、逐次処理でなければ表現出来ない仕様も多い。 ・一応、記述は可能だが、Bメソッドを使う利点の多く(詳細化過程の正しさの検証など)は失われ てしまう事に注意。 Bメソッドを適用しやすい・しにくい対象 実際の開発においては、B言語の記述能力や、コードジェネレータの制 約が、技術的な障害になる事も事実 適用しやすい対象 ブール値、整数、列挙型などだけで表現できるもの 静的なデータ構造のみを扱うもの (小規模な組込み制御システムの多くは、これに該当する) → 現行の設計技法、ツールチェインでも、十分実用的な開発が 可能。コード自動生成も可能。 (現状では)適用しにくい対象 動的なデータ構造、可変長データ、文字列や、それらの受け渡しを 伴うもの(例えば、プロトコルスタックなど) → データ構造をライブラリ(基本機械)の中にうまく隠蔽するなど、 設計の工夫が必要 適切な不変条件の設定が重要 Bメソッドの検証 不変条件が常に成立する事を証明する (与えられた前提の元で) 100% 保証出来る。非常に強力。 → しかし、適切な不変条件の設定を行わなければ、実際に意味のある検 証は実現出来ない 課題: 仕様から適切な不変条件を導出するのが難しい 一般のソフト技術者は、動作中心の物の見方に慣れ過ぎており、対象を不 変条件として静的に捉えるための訓練が必要。 元の要求仕様自体が、動作中心に構成されていたり、最初からHow のレ ベルで記述されている場合も多い。 「書くべき不変条件が、見つかりません!」 仕様からの不変条件抽出の事例 ・各システム状態での振る舞い 初期状態ならば、 (LED1=ON & LED2=ON)である 計測状態ならば、 (LED1=点滅 & LED2=OFF)である 通知状態ならば、 (LED1=OFF & LED2=点滅) 安全に関する条件 薬品の加熱時間 は (180+マージン)秒より も短い 出典:金周慧、松原豊、高田広章、”状態遷移図に着目した安全要求分析手法”、第8回クリティカルソフト ウェアワークショップ、2011 他手法(VDM, Z記法)と Bメソッドの比較 Bメソッドは、Z記法よりも現場で使いやすく、VDMよりも検証能力が高い。 VDM Z記法 Bメソッド 記法 プログラム的 数学的 ややプログラム的 段階的詳細化 △ △(可能) ○ 形式検証 仕様アニメーション 中心 ツールによる 定理証明 モデル検査 アニメーション コード生成 Javaなど ツールによる C、Adaなど 記述の自由度 高い 高い 制約が厳しい 支援ツール 充実 弱い 充実 VDMtools ZETA, CZT, Atelier-B, ProB overture HOL-Z など まとめ ・Bメソッドの特徴と利点 単なる仕様記述だけでなく、設計開発方法論がある程度確立して いる。 Correctness by Construction の考え方に基づく、厳密な仕様記 述・検証を伴った開発が可能。 実用的な開発が可能な環境(手法・ツール)が整備されている。 ・技術導入のポイントと課題 記述の制約が厳しいのが、欠点であり利点でもある(設計・検証を 正しい方向に導くための制約) プログラム的なHowではなく、What の観点で記述する訓練が必要 検証能力を活かすには、不変条件の適切な記述が重要 謝辞 本発表は、H22~24年度 経済産業省 戦略的基盤技術高度化支援事業(北海道経済産 業局)の採択テーマとして実施中の「形式的仕様記述を用いた高信頼ソフトウエア開発プ ロセスの研究とツール開発」の成果を利用しています。 本資料および開発等に関し、プロジェクトのメンバならびにアドバイザ各位に感謝すると 共にここで紹介させていただきます。 研究実施機関名 北海道電子機器㈱、㈱ミクロスソフトウエア、㈱リック、㈱ヴィッツ 北海道大学、(地独)北海道立総合研究機構、(独)産業総合研究所 アドバイザー機関名 名古屋大学、苫小牧工業高等専門学校、㈱日本除雪機製作所 北海道日本電気ソフトウエア㈱、トヨタ自動車㈱、アイシン精機㈱、 ルネサスエレクトロニクス㈱