(Translated by https://www.hiragana.jp/)
形式手法 - Wikipedia コンテンツにスキップ

形式けいしき手法しゅほう

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
Z言語げんご使つかった形式けいしき仕様しよう記述きじゅつれい

形式けいしき手法しゅほう(けいしきしゅほう、えい: formal methods)は、ソフトウェア工学こうがくにおける数学すうがく基盤きばんとしたソフトウェアおよびハードウェアシステムの仕様しよう記述きじゅつ開発かいはつ検証けんしょう技術ぎじゅつである[1]。ソフトウェアおよびハードウェア設計せっけいへの形式けいしき手法しゅほう適用てきようは、工学こうがく分野ぶんや同様どうよう適切てきせつ数学すうがくてき解析かいせきおこなうことで設計せっけい信頼しんらいせい頑健がんけんせい向上こうじょうするという予想よそうによって動機付どうきずけられている[2]

形式けいしき手法しゅほう理論りろん計算けいさん科学かがく様々さまざま成果せいか基盤きばんとして応用おうようしたものであり、数理すうりろん理学りがく形式けいしき言語げんごオートマタ理論りろんプログラム意味いみろんかたシステム代数だいすうてきデータがたなどを活用かつようして、ソフトウェアおよびハードウェアの仕様しよう記述きじゅつとその検証けんしょうおこな[3]

分類ぶんるい

[編集へんしゅう]

形式けいしき手法しゅほうはいくつかの水準すいじゅん使用しよう可能かのうである:

水準すいじゅん0
形式けいしき仕様しよう記述きじゅつおこない、プログラム自体じたい形式けいしき主義しゅぎてきおこなう。「かる形式けいしき手法しゅほう」とぶ。費用ひようたい効果こうかはやることができる選択せんたくである。
水準すいじゅん1
形式けいしき手法しゅほう使つかって開発かいはつ検証けんしょうおこない、より形式けいしき主義しゅぎてきにプログラムを生成せいせいする。たとえば、仕様しよう記述きじゅつからのプログラム作成さくせいにおいて詳細しょうさい属性ぞくせい証明しょうめいおこなう。高信頼こうしんらいシステムにてきした選択せんたくである。
水準すいじゅん2
自動じどう定理ていり証明しょうめいによって完全かんぜん機械きかいてき証明しょうめいおこなう。道具どうぐ整備せいびするのに費用ひようがかかるか、厳密げんみつである必要ひつようがありシステムを記述きじゅつするのに手間てまがかかる。間違まちがいが混入こんにゅうすることでしょうじる損失そんしつ見合みあわなければ実施じっししない(たとえば、マイクロプロセッサ設計せっけい重要じゅうよう部分ぶぶんなど)。

くわしくは後述こうじゅつする。

プログラム意味いみろん分類ぶんるい対応たいおうして、形式けいしき手法しゅほう以下いかのように大別たいべつする:

表示ひょうじてき意味いみろん
表示ひょうじてき意味いみろんでは、システムの意味いみ領域りょういき理論りろん表現ひょうげんする。この場合ばあい領域りょういき理論りろん性質せいしつによってシステムの意味いみあたえる。しかし、あらゆるシステムが関数かんすう直感ちょっかんてき表現ひょうげんできるわけではないともわれている。
操作そうさてき意味いみろん
操作そうさてき意味いみろんでは、より単純たんじゅん計算けいさんモデルの一連いちれん動作どうさによってシステムの意味いみ表現ひょうげんする。この場合ばあい、モデルの単純たんじゅんせい表現ひょうげん明確めいかくにする。しかし、これは意味いみろんてき判断はんだんさきばしともわれている(つまり、使用しようされた単純たんじゅん計算けいさんモデルの意味いみろん定義ていぎはどうなるのか?)。
公理こうりてき意味いみろん
公理こうりてき意味いみろんでは、システムがある処理しょりおこなぜんの(しんなる)状態じょうたいによってシステムの意味いみ表現ひょうげんする。この場合ばあい古典こてんてき論理ろんりがく関係かんけいふかい。しかし、たん実行じっこうまえ実行じっこう状態じょうたいしめしただけで実際じっさいにシステムがなにをするかを表現ひょうげんしたことになるのかとの疑念ぎねんわれている。

軽量けいりょう(light weight)形式けいしき手法しゅほう

[編集へんしゅう]

実際じっさい開発かいはつたずさわる人々ひとびとなかには、形式けいしき手法しゅほうコミュニティが仕様しよう記述きじゅつ設計せっけい完全かんぜん形式けいしき強調きょうちょうしすぎているとかんじている[4][5]かれらは対象たいしょうとなるシステム自体じたい複雑ふくざつせいだけでなく使用しようする言語げんご表現ひょうげん能力のうりょく完全かんぜんかどうかが形式けいしき困難こんなんにしていると主張しゅちょうする。代替だいたいあんとして様々さまざま軽量けいりょう(ライトウェイト)な形式けいしき手法しゅほう提案ていあんされてきた。それらは部分ぶぶんてき仕様しよう記述きじゅつ応用おうよう注力ちゅうりょくしたものである。このようなライトウェイトな形式けいしき手法しゅほうれいとして、かたシステムuppaal Alloy オブジェクトモデリング記法きほう[6]Z言語げんごによるユースケース駆動くどうがた開発かいはつ[7]、CSK VDM ツールセット[8]がある。

利用りよう

[編集へんしゅう]

形式けいしき手法しゅほう開発かいはつ工程こうてい様々さまざま部分ぶぶん適用てきよう可能かのうである。

仕様しよう記述きじゅつ

[編集へんしゅう]

形式けいしき手法しゅほう開発かいはつ対象たいしょうシステムの任意にんいのレベルの仕様しよう記述きじゅつするのに利用りよう可能かのうである。そのような形式けいしきてき記述きじゅつはその開発かいはつ活動かつどうのガイドとなるだけでなく、開発かいはつされたシステムの機能きのう要求ようきゅうどおりであるか正確せいかくせい完全かんぜんせい観点かんてんでの検証けんしょうにも利用りよう可能かのうである。

従来じゅうらいから、形式けいしき仕様しよう記述きじゅつシステムの必要ひつようせい注目ちゅうもくされている。ALGOL 58報告ほうこくしょ[9]なかジョン・バッカスプログラミング言語げんご文法ぶんぽう形式けいしきてき記法きほうのちバッカス・ナウア記法きほう、BNF記法きほうばれるようになった[10])を提案ていあんした。バッカスはプログラミング言語げんご意味いみろん記法きほう必要ひつようせいにも言及げんきゅうした。報告ほうこくしょにはBNF記法きほう同様どうよう意味いみろんかんする記法きほう将来しょうらい提案ていあんするとかれているが、それがあらわれることはなかった。

開発かいはつ

[編集へんしゅう]

形式けいしき仕様しよう記述きじゅつができると、それにしたがって設計せっけいおこない、実際じっさい開発かいはつおこなう(すなわち、ソフトウェアやハードウェアに実体じったいさせる)。たとえば:

  • 操作そうさてき意味いみろんもとづく形式けいしき仕様しよう記述きじゅつ場合ばあい実際じっさいのシステムの動作どうさ仕様しようじょう動作どうさ(それ自体じたい実行じっこう可能かのう/シミュレート可能かのう)を比較ひかくする。さらにツールによってはそのような仕様しよう記述きじゅつから自動的じどうてきにコードを生成せいせいするものもある。
  • 公理こうりてき意味いみろんもとづく形式けいしき仕様しよう記述きじゅつ場合ばあい仕様しようしるされた事前じぜん状態じょうたい事後じご状態じょうたい実行じっこうコードないアサーションとしてまれる。

検証けんしょう

[編集へんしゅう]

形式けいしき仕様しよう記述きじゅつができると、それを証明しょうめい根拠こんきょとして使用しようすることもある。

人間にんげんによる証明しょうめい

[編集へんしゅう]

場合ばあいによっては、システムの正当せいとうせい証明しょうめいおこな動機どうきは、システムの品質ひんしつ保証ほしょうのためではなく、システムの動作どうさをさらに理解りかいしたいためということがある。結果けっかとして正当せいとうせい証明しょうめい数学すうがくてき証明しょうめい形式けいしきおこなうこともある。自然しぜん言語げんご使つかい、あまり形式けいしきてきでないかたち証明しょうめい記述きじゅつされる。よい証明しょうめいとは、人間にんげんんで理解りかいできるものとえる。

このような手法しゅほうへの批判ひはんとして、自然しぜん言語げんご曖昧あいまいさがエラーを見逃みのが原因げんいんとなるとの指摘してきがある。微妙びみょうなエラーはそのような証明しょうめい見過みすごされたていレベルな詳細しょうさい部分ぶぶんひそんでいることがおおい。さらに、よい証明しょうめい作成さくせいするには高度こうど数学すうがくてき専門せんもん知識ちしき必要ひつようである。

自動じどう証明しょうめい

[編集へんしゅう]

一方いっぽう、システムの正当せいとうせい証明しょうめい自動的じどうてき生成せいせいすることに関心かんしんあつまりつつある。自動じどう技術ぎじゅつは2つに分類ぶんるいされる:

  • 自動じどう定理ていり証明しょうめいでは、なにもないところから形式けいしきてき証明しょうめい生成せいせいする。入力にゅうりょくとなるのはシステムの説明せつめい論理ろんりてき公理こうりぐん推論すいろん規則きそくぐんである。
  • モデル検査けんさでは、実行じっこうりうるぜん状態じょうたい検索けんさくし、一定いってい特性とくせい照合しょうごうする。

一部いちぶ自動じどう定理ていり証明しょうめい人間にんげん補助ほじょなしには機能きのうせず、追跡ついせきすべき特性とくせい人間にんげん指定していしてやる必要ひつようがある。モデル検査けんさではうまく抽象ちゅうしょうされたモデルをあたえないと、膨大ぼうだいかず状態じょうたいによって身動みうごきがれなくなる。

これらシステムの提唱ていしょうしゃは、詳細しょうさいわたってアルゴリズムてき照合しょうごうおこなわれるため、その結果けっか人間にんげんによる証明しょうめいよりも数学すうがくてきにずっと正確せいかくであると主張しゅちょうする。これらシステムを使つかうための訓練くんれん証明しょうめいくための訓練くんれんよりも簡単かんたんであり、おおくの人材じんざいせるとしている。

批判ひはんてき人々ひとびとは、それらシステムの「神託しんたくてき性格せいかく問題もんだいにする。それらは真実しんじつであると宣言せんげんしているが、その詳細しょうさい説明せつめいされない。また「検査けんさ機構きこう検査けんさ」とばれる問題もんだいもある。検証けんしょうかかわるプログラム自体じたい検証けんしょうされていない場合ばあい、その結果けっかうたが余地よちがあるだろう。

批評ひひょう

[編集へんしゅう]

部分ぶぶんてき批評ひひょうだけでなく、形式けいしき手法しゅほう全体ぜんたいへの批判ひはんもある。現状げんじょう人間にんげんによる証明しょうめい自動的じどうてき証明しょうめい多大ただい時間じかん(とおかね)をようする。したがって、形式けいしき手法しゅほうはそのコストが十分じゅうぶん利益りえき見合みあうか、エラーの混入こんにゅう多大ただい損害そんがいむすびつく場合ばあいにのみ使つかわれることになる。たとえば、航空こうくう宇宙うちゅう工学こうがくではエラーの混入こんにゅう意味いみするため、領域りょういきよりも形式けいしき手法しゅほう一般いっぱんしている。

形式けいしき手法しゅほう推進すいしんしゃなかには、それがソフトウェア危機きき特効薬とっこうやくとなると主張しゅちょうするものもあった。もちろんおおくの人々ひとびとはソフトウェア危機きき特効薬とっこうやく存在そんざいしないとかんがえている[11]し、形式けいしき手法しゅほう利点りてん強調きょうちょうしすぎる姿勢しせい問題もんだいにする人々ひとびともいる。

おも形式けいしき手法しゅほうとその記述きじゅつほう

[編集へんしゅう]

以下いかおも形式けいしき手法しゅほう形式けいしき手法しゅほう記述きじゅつほう列挙れっきょする。

仕様しよう記述きじゅつ言語げんご

モデルチェッカ

脚注きゃくちゅう

[編集へんしゅう]
  1. ^ R. W. Butler (2001ねん8がつ6にち). “What is Formal Methods?”. 2006ねん11月16にち閲覧えつらん
  2. ^ C. Michael Holloway. Why Engineers Should Consider Formal Methods. 16th Digital Avionics Systems Conference (27–30 October 1997). オリジナルの2006ねん11月16にち時点じてんにおけるアーカイブ。. https://web.archive.org/web/20061116210448/http://klabs.org/richcontent/verification/holloway/nasa-97-16dasc-cmh.pdf 2006ねん11月16にち閲覧えつらん. 
  3. ^ Monin & Hinchey 2003, pp. 3–4
  4. ^ Daniel Jackson and Jeannette Wing, "Lightweight Formal Methods", IEEE Computer, 1996ねん4がつ
  5. ^ Vinu George and Rayford Vaughn, "Application of Lightweight Formal Methods in Requirement Engineering", Crosstalk: The Journal of Defense Software Engineering, 2003ねん1がつ
  6. ^ Daniel Jackson, "Alloy: A Lightweight Object Modelling Notation", ACM Transactions on Software Engineering and Methodology (TOSEM), Volume 11, Issue 2 (2002ねん4がつ), pp. 256-290
  7. ^ Richard Denney, Succeeding with Use Cases: Working Smart to Deliver Quality, Addison-Wesley Professional Publishing, 2005, ISBN 0-321-31643-6.
  8. ^ Sten Agerholm and Peter G. Larsen, "A Lightweight Approach to Formal Methods", In Proceedings of the International Workshop on Current Trends in Applied Formal Methods, Boppard, Germany, Springer-Verlag, 1998ねん10がつ
  9. ^ Backus, J.W. (1959). "The Syntax and Semantics of the Proposed International Algebraic Language of Zürich ACM-GAMM Conference". Proceedings of the International Conference on Information Processing. UNESCO.
  10. ^ Knuth, Donald E. (1964), Backus Normal Form vs Backus Naur Form. Communications of the ACM, 7(12):735–736.
  11. ^ フレデリック・ブルックス、『ぎんたまなどない』 (No Silver Bullet) 、1986ねん

参考さんこう文献ぶんけん

[編集へんしゅう]
  • Monin, Jean François; Hinchey, Michael G. (2003), Understanding formal methods, Springer, ISBN 1-85233-247-6 
  • Jonathan P. Bowen and Michael G. Hinchey, Formal Methods. In Allen B. Tucker, Jr. (ed.), Computer Science Handbook, 2nd edition, Section XI, Software Engineering,Chapter 106, pages 106-1 – 106-25, Chapman & Hall / CRC Press, Association for Computing Machinery, 2004.
  • Michael G. Hinchey, Jonathan P. Bowen, and Emil Vassev, Formal Methods. In Philip A. Laplante (ed.), Encyclopedia of Software Engineering, Taylor & Francis, 2010, pages 308–320.

この記事きじは2008ねん11月1にち以前いぜんFree On-line Dictionary of Computingから取得しゅとくした項目こうもく資料しりょうもとに、GFDL バージョン1.3以降いこうの「RELICENSING」(さいライセンス) 条件じょうけんもとづいてまれている。

関連かんれん項目こうもく

[編集へんしゅう]

外部がいぶリンク

[編集へんしゅう]