Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
モデル検査という技術/2019-04-24-llt9
Search
Satoshi SAKAO
April 24, 2019
Technology
1
140
モデル検査という技術/2019-04-24-llt9
社内のLTイベント「えるLT Vol.9」で発表した資料です
Satoshi SAKAO
April 24, 2019
Tweet
Share
More Decks by Satoshi SAKAO
See All by Satoshi SAKAO
Testcontainers/2024-11-20-llt32
ottijp
0
61
Pkl/2024-04-17-llt31
ottijp
0
88
JavaScriptのデバッグ/2023-09-04-llt30
ottijp
0
160
CDK for TerraformでAzureリソースをデプロイする/2023-05-15-llt29
ottijp
1
280
TWELITEへの誘い/2022-12-27-llt28
ottijp
0
160
ビルドツールBazelを触ってみた/2022-09-28-llt27
ottijp
0
170
HashiCorp Vaultを使ったシークレットのセキュアな一元管理 〜Ansibleを添えて〜/2022-07-12-llt26
ottijp
0
150
AWSインフラのデプロイをCDKでカイゼンする/2022-03-23-llt25
ottijp
0
92
Amazon Timestreamでデータ補間/2021-12-27-llt24
ottijp
0
110
Other Decks in Technology
See All in Technology
JTCにおける内製×スクラム開発への挑戦〜内製化率95%達成の舞台裏/JTC's challenge of in-house development with Scrum
aeonpeople
0
210
データアナリストからアナリティクスエンジニアになった話
hiyokko_data
2
440
ブロックテーマ時代における、テーマの CSS について考える Toro_Unit / 2025.09.13 @ Shinshu WordPress Meetup
torounit
0
120
研究開発と製品開発、両利きのロボティクス
youtalk
1
520
Obsidian応用活用術
onikun94
1
480
企業の生成AIガバナンスにおけるエージェントとセキュリティ
lycorptech_jp
PRO
2
160
BPaaSにおける人と協働する前提のAIエージェント-AWS登壇資料
kentarofujii
0
130
なぜスクラムはこうなったのか?歴史が教えてくれたこと/Shall we explore the roots of Scrum
sanogemaru
5
1.6k
自作JSエンジンに推しプロポーザルを実装したい!
sajikix
1
170
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
540
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
450
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
710
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Context Engineering - Making Every Token Count
addyosmani
1
37
Producing Creativity
orderedlist
PRO
347
40k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Become a Pro
speakerdeck
PRO
29
5.5k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
13k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
Transcript
モデル検査という技術 Satoshi SAKAO えるLT Vol.9 2019/04/24 (Wed) H1
話すひと H2 インフォコム株式会社 品質マネジメント推進室 " ソフトウェアエンジニア JS (ES6) / Node.js
/ GCP / IoT / iOS (Swift) フォーカスリーディング / 技術士試験の学習 Satoshi SAKAO @ottijp
話すこと • モデル検査とはなにか • 具体例 • 特徴,適用領域,課題 H3
H4 モデル検査 %
モデル検査とはなにか • 仕様や設計が正しいことを検査する自動化技術 • 形式システムの時相論理の検査を行う手法 • 「いつも,そのうち,まで」などを表す論理式で評価する • 状態遷移や相互作用などの評価を行う H5
どのように実施するか H6 仕様書 設計書 ソースコード 要求仕様書 テスト仕様書 ソースコード SMVファイル モデル定義
検査式 (時相論理式) モデル検査ツール Success or Failure
具体例(仕様) • 仕様 • レベルが1ずつ上がる • レベルは10がMAX • テスト仕様 •
レベルはいつか必ず10になる • レベルは決して11にはならない H7 Lv.10
具体例(SMVファイル) H8 MODULE main VAR level: 1..10; ASSIGN init(level) :=
1; next(level) := level=10 ? 10 : level+1; LTLSPEC F (level=10); LTLSPEC F ! (level=11); 仕様のモデル化 検査式
具体例(実行: success) H9 $ NuSMV tweet-level.smv *** This is NuSMV
2.6.0 (compiled on Wed Oct 14 15:31:33 2015) (...中略...) -- specification F level = 10 is true -- specification F !(level = 11) is true 検査式が満たされている
具体例(実行: failure) H10 $ NuSMV tweet-level.smv *** This is NuSMV
2.6.0 (compiled on Wed Oct 14 15:31:33 2015) (...中略) -- specification F level = 10 is true -- specification F level = 11 is false -- as demonstrated by the following execution sequence Trace Description: LTL Counterexample Trace Type: Counterexample -> State: 1.1 <- level = 1 (..中略...) -> State: 1.9 <- level = 9 -- Loop starts here -> State: 1.10 <- level = 10 -> State: 1.11 <- 検査式が満たされない 反例 検査式を LTLSPEC F (level=11); (レベルはいつか必ず11になる) に変更して実行
H11 特徴,適用領域,課題
特徴 • ツールによる自動化で,例外的な状態や状態遷移パスを 網羅的に検査できるため,品質向上が期待できる • 反例の出力により問題の特定が容易 • 動的なテストに比べ厳密で網羅的であるが, 難易度(学習コスト)は高く検査対象は小規模である H12
手作業での検査が困難だったり, ミッションクリティカルな領域への利用が考えられる
適用領域の例 • マルチスレッドにおける実行パターンの検査 • 複数スレッドが同時にクリティカルセクションに入らないこと • プログラムがデッドロックに陥らないこと • ハンドシェイクプロトコルが必ず終了すること •
微妙なタイミングや複雑な状態遷移による不具合 H13
課題(状態爆発) • 状態やイベントが多いと組み合わせが膨大になる • 巨大な状態空間を持つシステムでは, 現実的な計算量での検査が不可能 • どうするか • 絞り込みや抽象化により,モデルを極力小さくする
• サブシステム単位にモデル化する H14
課題(形式化による弊害) • 設計や実装を忠実に再現したモデル化が困難 • 例えばアナログ(連続)値のモデル化 • どうするか • 再現性を考慮したモデルの抽象化や絞り込み •
トライ&エラーでモデルを洗練させる H15
話したこと • モデル検査とはなにか • 具体例 • 特徴,適用領域,課題 H16
$ exit H17
H18 Appendix
参考 • システムの網羅的なテストができるモデル検査 実課題を扱ったモデル検 査のコンテスト「MoCCon」を振り返る (1/3):CodeZine(コードジン) • https://codezine.jp/article/detail/10164 • モデル検査とは •
http://www.formaltech.co.jp/whatMC.pdf • NuSMVによるモデル検査入門 (1) ステートマシンを定義する - Qiita • https://qiita.com/shinsa82/items/cd4d95c616bf1da852ce • モデル検査入門 #wacate • https://www.slideshare.net/kjstylepp/ss-42413829 H19