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
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Done Done
chrislema
184
16k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Adopting Sorbet at Scale
ufuk
77
9.4k
Writing Fast Ruby
sferik
628
62k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Raft: Consensus for Rubyists
vanstee
140
7k
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のほんしつ
おしまい