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
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Scaling GitHub
holman
462
140k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
How to Ace a Technical Interview
jacobian
279
23k
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のほんしつ
おしまい