33
Infrastructure as Code自身 のテストとは何か? TIS株式会社 IT基盤技術推進部 斎藤辰徳

Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

Infrastructure as Code自身

のテストとは何か?

TIS株式会社 IT基盤技術推進部

斎藤辰徳

Page 2: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

Agenda

1

• Infrastructure as Codeとは

• Infrastructure as Codeのテスト

• ライブコーディング

• まとめ

Page 3: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

仮想化・クラウド・コンテナ

2

自己紹介

• 斎藤辰徳(サイトウ・タツノリ) • TIS株式会社 IT基盤技術推進部 所属 • ミッション:ITインフラ構築・運用・保守の自動化推進 • HN: bbrfkr(ビビリフクロウ)で活動中! • 興味・関心

Infrastructure as Code

Page 4: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

3

Page 5: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

Infrastructure as Codeとは

4

Page 6: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

5

昨今のITインフラ事情

クラウド/コンテナ 技術の流行

ITインフラの 頻繁な作成・削除

手作業では構成管理が追い付かない!!

Page 7: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

6

Infrastructure as Code(IaC)の登場

• ITインフラをコード化

• アプリケーションのプラクティスをITインフラに適用

Page 8: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

7

IaCの効果

• IaCの実施 • 構成管理作業の自動化 • 構成情報のバージョン管理 • 構成情報の継続的インテグレーション

クラウド/コンテナ時代に

IaCは必須!

ITインフラ構築・運用・保守の

品質生産性向上

Page 9: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

8

IaCを実現する技術

• 構成管理ツール

• インフラテスト自動化ツール

Infrataster

Page 10: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

9

TISの取り組み

• SHIFT ware • Ansible/Serverspecを用いた、IaCフレームワーク • Ansible/Serverspecに詳しくなくても利用可能

Page 11: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

10

SHIFT ware

IaCフレームワーク SHIFT ware

今秋OSS公開予定 coming soon...

Page 12: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

Infrastructure as Codeのテスト

11

Page 13: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

12

IaCの弱点

• 一つのミスの影響範囲が大きい

コードのテストが非常に重要

Page 14: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

IaCコードのテスト、どうしてますか?

まさか、手動テストしてませんよね…?

13

1. テストサーバにコード適用

2. 手作業(コマンド直打ち&目視)で想定通りか確認

Page 15: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

手動テストの恐ろしさ

• コードを変更するたびに行う回帰テスト

14

Page 16: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

手動テストの恐ろしさ

• コードを変更するたびに行う回帰テスト ⇒やってられない

15

Page 17: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

手動テストの恐ろしさ

• コードを変更するたびに行う回帰テスト ⇒やってられない • その時その時の目的が達成されたかだけ確認する

16

Page 18: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

手動テストの恐ろしさ

• コードを変更するたびに行う回帰テスト ⇒やってられない • その時その時の目的が達成されたかだけ確認する • 後で、以前できたことができなくなっていることに気付く

17

Page 19: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

手動テストの恐ろしさ

• コードを変更するたびに行う回帰テスト ⇒やってられない • その時その時の目的が達成されたかだけ確認する • 後で、以前できたことができなくなっていることに気付く • 動くコードの修正に臆病になっていく

18

Page 20: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

手動テストの恐ろしさ

• コードを変更するたびに行う回帰テスト ⇒やってられない • その時その時の目的が達成されたかだけ確認する • 後で、以前できたことができなくなっていることに気付く • 動くコードの修正に臆病になっていく

19

コードが塩漬け状態に! リファクタリングもできず 保守性は最悪…

Page 21: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

自動テストしましょう!

20

でも正直 動くコードができているのに テストコード書くなんて面倒…

開発にテストコード作成を組み込む

テスト駆動開発!

Page 22: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

テスト駆動開発(TDD)

21

テストコード

作成

テスト失敗

(Red)

実装

テスト成功

(Green)

Page 23: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

Infrastructure as Codeのテスト

• TDDのメリット

22

• 無理なくテストコードを書ける

• 自信を持ったコーディングができる

• コードのバグに早く気付ける

• 回帰テストが容易にできる

• 恐れずにリファクタリングができる • 結果として高い品質

Page 24: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

具体的なやり方

23

Serverspec

作成

テストサーバ

作成/再作成

テスト失敗

(Red)

Ansible

実装

テスト成功

(Green)

Page 25: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

ライブコーディング

24

Page 26: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

お題

25

httpd package

インストール済み

httpd service

起動状態

自動起動設定

Listen ポート

X/TCP

ターゲット (tdd_target)

コントローラ (tdd_controller)

Page 27: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

まとめ

26

Page 28: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

• Infrastructure as Code(IaC)とは

• IaCの効果 ITインフラ構築・運用・保守の

品質生産性向上

• テスト駆動開発(TDD)

テストコード作成 テスト失敗 実装 テスト成功

etc...

まとめ

27

Page 29: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

まとめ

• TDDのメリット

28

• 無理なくテストコードを書ける

• 自信を持ったコーディングができる

• コードのバグに早く気付ける

• 回帰テストが容易にできる

• 恐れずにリファクタリングができる • 結果として高い品質

Page 30: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

29

まとめ

IaCフレームワーク SHIFTware

今秋OSS公開予定 coming soon...

Page 31: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

ご清聴

ありがとうございました

Page 32: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

31

QA

Q1. テストを書く粒度はどのくらい? A1. TDDにどの程度慣れているか、またコーディング対象についてどれだけ詳しく知っているかによって変わります。 TDDに慣れていない、また対象をあまり詳しく知らなければ、コードの挙動をよく確かめながら進めるため、タスク単位でテストを作成することになるでしょう。 一方でTDDに慣れており、対象についても熟知しているのであれば、目標とする状態やその確認方法が明確であるため、実装するのは目標状態であることを確認するテストだけでよいでしょう。

Page 33: Infrastructure as Code自身 のテストとは何か? · 2017. 7. 25. · itインフラ構築・運用・保守の 品質生産性向上. 8 iac ... tddで全てのテストを実装しようとしていないでしょうか?

32

QA

Q2. Serverspecで実施し辛いテストはどうする? A2. TDDで全てのテストを実装しようとしていないでしょうか? TDDはあくまで開発手法であり、テスト手法ではありません。TDDで行うテストはあくまでコーディングを推進するために行うものであり、品質を担保するためのものではありません。したがって開発者の想定したコード、つまり書き起したテストをパスするコードが書ければそれでよいのです。実施し辛いテストをわざわざテストコードに起こす必要はありません。 TDDを実施しても必ず品質が上がるわけではないのはこの考え方によるもので、TDDを実施したとしても、品質担保のためのテスト(機能テストの一部、受け入れテスト、非機能テスト)は別途実施されるべきなのです。