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
AOSN 「プログラマーの日合宿」 2016
Search
ZTRW
September 26, 2016
0
170
AOSN 「プログラマーの日合宿」 2016
ZTRW
September 26, 2016
Tweet
Share
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
Mobile First: as difficult as doing things right
swwweet
225
10k
The Cult of Friendly URLs
andyhume
79
6.6k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
600
Side Projects
sachag
455
43k
How STYLIGHT went responsive
nonsquared
100
5.8k
RailsConf 2023
tenderlove
30
1.2k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Making Projects Easy
brettharned
120
6.4k
A Tale of Four Properties
chriscoyier
161
23k
GraphQLとの向き合い方2022年版
quramy
49
14k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Transcript
PDDのウソ・ホント プログラマーの日合宿2016
PDDって︖
PDD = Proof Driven Development 期待される仕様が充足されることを証 明しながら開発しよう、という提案 Test Driven Developmentの発展形
要素技術 形式的証明を扱う何らかの基礎 1. Theorem prover とか Automated theorem prover Interactive
theorem prover = Proof assistant 2. Hoare logic とか これだけ︕
Automated theorem proverでPDD -- プログラミング言語と仕様記述言語が一体 -- ⾃動で証明しちゃう︕ でも言語の記述⼒は弱い… Proof assistantでPDD
← 今日はコレだけ -- プログラミング言語と仕様記述言語が一体 -- 記述⼒が異常 機能要件なら基本なんでも書ける -- 証明はシステムと対話しながら Hoare logicでPDD -- プログラミング言語と仕様記述言語が分離 -- Domain specificには⾃動化もできるらしい︖ (よく知らない)
代表的なproof assistantたち Agda -- 最も数学寄り、とか言われる Javaとは別な意味で潔癖症 -- Automated theorem proverの組込みがほぼ全くない可哀想な子
Coq -- JavaやHaskellより古いオーパーツ Epigram -- 知らない子ですね Idris -- 動作速度とかマジメに考えてる健気な子 Lean -- Microsoftだ︕ 殺せー︕︕
ぼちぼち本題
怪しげな謳い⽂句 正しいソフトウエアを作れる とか テストが必要なくなる とか TDDを拡張する とか 歴史は繰り返す…MDAの悲劇を忘れたか︕
ウソ・ホント
正しいソフトウエアを作れる(︖)
正しいソフトウエアを作れる のホント 開発したいソフトウエアの機能要件が キチンと形式化できていて… 開発をすべてPDDで回せば… まあホントかな
None
ライブラリの貧弱性 コストの増大性 コスト予測の困難性 … すべてをPDDで回すのは非現実的 正しいソフトウエアを作れる のウソ
部分的PDD Core componentのみPDDで開発 とか -- 各種言語へのコンパイルは可能 外部ライブラリを利⽤ とか -- Foreign
functionの機構は大抵ある バグの⼊り込み得る箇所を局所化・管理 → リスクの潜在的発⽣源を局所化・管理 → リスク管理の基本
テストが必要なくなる (︖)
テストが必要なくなる は真っ赤なウソ 非機能要件のテストは必要 “仕様のバグ”対策にテストは必要
PDDはTDDを拡張する (︖)
PDDはTDDを拡張する のホント Securityのみをソフトウエアの品質を決 定づける要因とみなせば… まあホントかな
None
PDDはTDDを拡張する のウソ ソフトウエアの品質を決定づける要因は多様 -- 開発コスト -- 実⾏時パフォーマンス -- ⻑期運⽤における信頼性 --
… 一般的⽂脈では PDDとTDDは上位・下位互換の関係にはない
いろいろケチつけてるけど…
…結局PDDって︖
完全に正しいソフトウエアを作れる夢の手法 開発におけるリスク管理を容易にする現実的手段 ぼくのかんがえるPDDのほんしつ
おしまい