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
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AOSN 「プログラマーの日合宿」 2016
ZTRW
September 26, 2016
Featured
See All Featured
Paper Plane
katiecoart
PRO
2
52k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
45k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
エンジニアに許された特別な時間の終わり
watany
107
250k
Color Theory Basics | Prateek | Gurzu
gurzu
0
390
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
290
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
WENDY [Excerpt]
tessaabrams
11
38k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
340
Skip the Path - Find Your Career Trail
mkilby
1
170
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
380
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のほんしつ
おしまい