2015年5月7日木曜日

LT駆動開発14でServerSpecを紹介してきた。

前日夜にLTしないのか?と圧力お誘いがあったので、
3時間ばかし徹夜して、LT駆動開発14でServerSpecについて軽く紹介LTしてきました。

スライドはこちら。



プログラムの世界ではTDD(テスト駆動開発)と呼ばれる手法があり、
インフラがコードで制御できるのであれば、そのテストをするのが当たり前。という流れになってきています。

私自身、インフラの自動化をするに当たり、どうしても手作業でしないといけない箇所や、
勘違い、凡ミスが発生し、テストの必要性は認識していましたが、
テストの書き方がわからない。そもそも良く分からない。
という正直面倒くさいありがちな理由で後回しにしていました。

しかし、Chefで何十台とサーバを構築していると、Chef的には正しいのに、サーバがうまく動かないということが時々起こります。
大抵はドキュメントルートのパスをミスっていたなど凡ミスなんですが・・・

なので、いい加減テスト真面目にしないとなぁ。とChefDK ハンズオン with すごい広島で勉強したり、自宅で復習したりしていたのですが・・・
ChefのテストはChefSpec、サーバのテストはServerSpecとほぼ同じ内容を別のテストでやるのがとても面倒で(ぉ
まずは簡単そうなServerSpecからはじめました。
ちなみに、何でわざわざChefと、それで作られたサーバをそれぞれテストしないといけないのか?ですが、Chefのレシピが正しくても、それを組み合わせて構成したサーバが要件どおり動くのかは別問題だからです。
ChefSpecを単体テストというなら、それを複数結合して構成したサーバはServerSpecで結合テストするイメージです。
あと、レシピ以外で手動構成した箇所はServerSpecでないとテストできませんね

ServerSpecのいい点は、SSHさえつながれば、特別なエージェントなど不要。という点です。
つまり、今動いているサーバに影響を及ぼすことなくテストをすることが出来ます。
また、Windowsな人はCygwin上からでもテストを実行することが出来ます
はい。Winだからとやらない理由がなくなりました(笑)

肝心のテストコードの書き方ですが、Apacheのテストコードが雛形として生成されるので、
それと、リファレンスを見ながらで何とかなります。
プログラムと違い、サーバは機能がある程度決まっているので、テストする項目も決まってますが、
いわゆる境界テストのようなものはサーバにはないので、何を何処までテストするのか?というのが今悩んでいるところです。

Chefで担保できるところ(設定ファイルとか)はChef側で、サービスの登録や起動の有無などはServerSpecで。という感じがいいのかなぁ・・・
ま、書いたテストは消せるけど、無いテストはテストできないので、今はとりあえず思いつく箇所のテストを書いています。勉強にもなりますしね。






0 件のコメント:

コメントを投稿