Hokkaido.pm #11

88
Hokkaido.pm x11 ブログ炎上 @moznion from Hachioji.pm

description

Slides for Hokkaido.pm #11. Talking about software testing and documentation.

Transcript of Hokkaido.pm #11

Page 1: Hokkaido.pm #11

Hokkaido.pm 🍣x11ブログ炎上 @moznion

from Hachioji.pm

Page 2: Hokkaido.pm #11

@moznion大学院生 (退学失敗)

ソフトウェアエンジニア (アルバイト)

Page 3: Hokkaido.pm #11

今年の流行語

Page 4: Hokkaido.pm #11
Page 5: Hokkaido.pm #11

ではなくて

Page 6: Hokkaido.pm #11

DevOps

Page 7: Hokkaido.pm #11

Dev🔫Ops or

Ops🔫Dev

Page 8: Hokkaido.pm #11

Dev🔫Ops or

Ops🔫Dev

Page 9: Hokkaido.pm #11

Dev🔫Ops or

Ops🔫Dev Dev💕Ops Dev🍣Ops Dev🍺Ops

Page 10: Hokkaido.pm #11

DevとOpsが協調

Page 11: Hokkaido.pm #11

めでたい!

Page 12: Hokkaido.pm #11

他に協調出来そうな 概念は無いだろうか

Page 13: Hokkaido.pm #11

例えば TestとDocumentの関係

Page 14: Hokkaido.pm #11

Testとは?

Page 15: Hokkaido.pm #11

ソフトウェアの正しい動作を 記述・表現・保証するもの

Page 16: Hokkaido.pm #11

Documentとは?

Page 17: Hokkaido.pm #11

正しいソフトウェアの 動作を定義・表現するもの

Page 18: Hokkaido.pm #11

つまりTestもDocumentも ソフトウェアの正しい動作に

着目している

Page 19: Hokkaido.pm #11

DocumentとTestは 距離が近い

Page 20: Hokkaido.pm #11

協調可能ではないか?

Page 21: Hokkaido.pm #11

協調することによる メリット

Page 22: Hokkaido.pm #11

Documentの 不整合を防げる 破滅しない

Page 23: Hokkaido.pm #11

Documentの 陳腐化からの卒業

Page 24: Hokkaido.pm #11

DocumentとTestを それぞれ書くよりも コストを減らせる(かも)

Page 25: Hokkaido.pm #11

アプローチ

Page 26: Hokkaido.pm #11

1

Page 27: Hokkaido.pm #11

Documentから Testを生成する

Page 28: Hokkaido.pm #11

2

Page 29: Hokkaido.pm #11

Testから Documentを生成する

Page 30: Hokkaido.pm #11

第Ⅰ部

Page 31: Hokkaido.pm #11

Documentから Testを生成する

Page 32: Hokkaido.pm #11

Documentがそのまま Testと化すので 陳腐化を防げる

Page 33: Hokkaido.pm #11

Documentを書く作業と Testを書く作業が 分離しない

Page 34: Hokkaido.pm #11

しかし

Page 35: Hokkaido.pm #11

難しい

Page 36: Hokkaido.pm #11

実現しようとすると Documentが 冗長になる傾向

Page 37: Hokkaido.pm #11

e.g. javadoc

Page 38: Hokkaido.pm #11

Documentを書く コストが格段に 跳ね上がる

Page 39: Hokkaido.pm #11

そのコストはDocumentとTest それぞれ分離して書いた時の コストと比較してどちらが高い?

Page 40: Hokkaido.pm #11

また, Documentから 生成するテストケースは 適切だろうか?

Page 41: Hokkaido.pm #11

etc etc…

Page 42: Hokkaido.pm #11

多分, Documentから Testを生成するのは

あまり良い方法ではない

Page 43: Hokkaido.pm #11

では生成するのを やめてはどうか

Page 44: Hokkaido.pm #11

DocumentとTestを 同居させるという手法

Page 45: Hokkaido.pm #11

e.g.DocTest (Python) Test::Inline (Perl) power-doctest (JS)

Page 46: Hokkaido.pm #11

今回書いたやつ

Page 47: Hokkaido.pm #11

Test::Synopsis::Expectationhttps://metacpan.org/release/Test-Synopsis-Expectationhttps://github.com/moznion/Test-Synopsis-Expectation

Page 48: Hokkaido.pm #11

CPANモジュールの Documentの中でも

非常に重要なSYNOPSIS

Page 49: Hokkaido.pm #11

そのSYNOPSISを Testする

Page 50: Hokkaido.pm #11

SS

Page 51: Hokkaido.pm #11

SYNOPSISの中に テストケースを 同居させる

Page 52: Hokkaido.pm #11

可読性もそこそこ高いので 人間が読んでも理解できる

Page 53: Hokkaido.pm #11

もちろんDocumentも 陳腐化しない

Page 54: Hokkaido.pm #11

Documentを書くと Testも増えるという思想

Page 55: Hokkaido.pm #11

割と良いのではないか

Page 56: Hokkaido.pm #11

Documentから Testを生成するDocumentとTestを 同居させる

Page 57: Hokkaido.pm #11

第Ⅰ部完

Page 58: Hokkaido.pm #11

第Ⅱ部

Page 59: Hokkaido.pm #11

Testから Documentを生成する

Page 60: Hokkaido.pm #11

r7kamura氏のautodoc

Page 61: Hokkaido.pm #11

衝撃!!!

Page 62: Hokkaido.pm #11

autodoc?

Page 63: Hokkaido.pm #11

JSON APIのTestを書くと APIのDocumentが 生成されるやつ

Page 64: Hokkaido.pm #11
Page 65: Hokkaido.pm #11
Page 66: Hokkaido.pm #11

Testで動作が正しいことが 保証されているものが そのままDocumentになる

Page 67: Hokkaido.pm #11

正しいドキュメントが 必然的に得られる

Page 68: Hokkaido.pm #11

APIとか代謝が早くて Documentが追いつかない

ケースが多い

Page 69: Hokkaido.pm #11

ただ, 健全な開発ならば APIに対するTestは 存在しているはず

Page 70: Hokkaido.pm #11

そのTestからDocumentを 生成することで

Docが遅れなくなる

Page 71: Hokkaido.pm #11

で, 書いた

Page 72: Hokkaido.pm #11

Test::JsonAPI::Autodochttps://metacpan.org/release/Test-JsonAPI-Autodochttps://github.com/moznion/Test-JsonAPI-Autodoc

Page 73: Hokkaido.pm #11

細かな差異はあれど, ほぼautodocのport

Page 74: Hokkaido.pm #11
Page 75: Hokkaido.pm #11
Page 76: Hokkaido.pm #11

また, 似たコンセプトのものに Shodoというのがあり…

Page 77: Hokkaido.pm #11
Page 78: Hokkaido.pm #11

後ほど説明が あると思います

Page 79: Hokkaido.pm #11

第Ⅱ部完

Page 80: Hokkaido.pm #11

まとめ

Page 81: Hokkaido.pm #11

TestとDocumentは 近い存在

協調できると思う

Page 82: Hokkaido.pm #11

協調すると, ドキュメントの破滅 などから救われる

Page 83: Hokkaido.pm #11

TestとDocumentを 同居させる方法と

TestからDocumentを 生成する方法は

割と良いのではないか

Page 84: Hokkaido.pm #11

双方の使い分けは ドメインに応じて

Page 85: Hokkaido.pm #11

という感じ

Page 86: Hokkaido.pm #11

2013 DevOps ⇩

2014 DocTest

Page 87: Hokkaido.pm #11

Doc🍣Test

Page 88: Hokkaido.pm #11

Any Q?