-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #13 from mizzy/all
全体とりまとめ用プルリクエスト
- Loading branch information
Showing
19 changed files
with
1,720 additions
and
241 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
*.dvi | ||
*.log | ||
*.aux | ||
|
||
*.blg | ||
memo.txt |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,9 @@ | ||
\section{はじめに} | ||
|
||
システムの大規模・複雑化に伴い,サーバの構築・運用を効率化するために,サーバ構成を宣言的なコードで記述・管理するという手法が提案され,その実装として構成管理ツールCFEngine\cite{cfengine}が1993年に登場している.その後様々な構成管理ツールが生み出されているが\cite{cmt},2005年のPuppetの登場\cite{puppet}と2006年のAmazon EC2の登場\cite{ec2}をきっかけに``Infrastructure as Code''という概念が台頭し,``Agile infrastructure and operations''\cite{agile infrastructure}という流れが生まれている.これはアジャイル開発の手法をサーバ構築・運用に適用しようという潮流である.(ここで言う``Infrastructure''はアプリケーションを載せるための土台を意味し,OSやミドルウェアといったソフトウェアレイヤーを含む.) | ||
科学やビジネス領域における問題の複雑化への要求に応えるため,システムが大規模化・複雑化する\cite{survey_and_taxonomy_of_iaas}のに伴い,UNIXシェルにより書かれたプログラムに代わり,サーバの設定を宣言的なコードで扱う構成管理手法が広く提供されている.その実装として1993年にCFEngine\cite{cfengine}が登場し,その後様々な構成管理ツールが生み出されているが\cite{cmt},2005年のPuppetの登場\cite{puppet}と2006年のAmazon EC2の登場\cite{ec2}をきっかけに``Infrastructure as Code''という概念が台頭した.この概念における``Infrastructure''はアプリケーションを載せるためのインフラを意味し,OSやミドルウェアといったソフトウェアレイヤーを含む.そして,インフラをコードで扱うことから,アジャイルソフトウェア開発\cite{agile_manifesto}と同様の手法がサーバ構築・運用にも適用できるのでは,という発想が生まれ``Agile infrastructure and operations''\cite{agile_infrastructure}という流れが生じている. | ||
|
||
この流れの中で,``Agile infrastructures and operations''を効率よく実践するためのプロセスとして,テスト駆動開発の手法をサーバ構築・運用に応用した``Test-Driven Infrastructure''\cite{test driven infrastructure with chef}というプロセスが提案されており,このプロセスを支援するテストフレームワークがいくつも登場している\cite{chefspec}\cite{rspec-puppet}\cite{cucumber-chef}\cite{minitest-chef-handler}\cite{test kitchen}\cite{rspec-system}. | ||
``Agile infrastructures and operations''を実践するためのプロセスとして,テスト駆動開発\cite{test_driven_development}の手法をサーバ構築・運用に応用した``Test-Driven Infrastructure''\cite{test_driven_infrastructure_with_chef}が提案されており,このプロセスを支援するテストフレームワークがいくつも登場している\cite{chefspec}\cite{rspec-puppet}\cite{cucumber-chef}\cite{minitest-chef-handler}\cite{test-kitchen}\cite{rspec-system}.これらのうち,ChefSpec\cite{chefspec},rspec-puppet\cite{rspec-puppet}は,構成管理ツール固有の言語で書かれたコードの内容をテストするのみで,実際にコードをサーバに適用し,設定が正しく行われたかどうかまではテストしない.そのため,単体テストしては利用できるが結合テスト用途には利用できない.Cucumber-chef\cite{cucumber-chef},minitest-chef-handler\cite{minitest-chef-handler}はChefという特定の構成管理ツールに依存している.そのため,Chef以外の構成管理ツールでは利用することができない.Test Kitchen\cite{test-kitchen}やrspec-system\cite{rspec-system}は,テスト用Virtual Machine(以降VMとする)の作成,テスト用VMへの構成管理ツールの適用,テストの実行をトータルで行う統合テストスイートであるが,標準で持つテスト実行機能は汎用性に乏しく,特定の構成管理ツールに依存しており,OSやディストリビューション毎の違いを意識したテストコードを書く必要がある. | ||
|
||
これらのうち,ChefSpec,rspec-puppetは,構成管理ツール固有の言語で書かれたコードの内容をテストするのみで,実際にコードをサーバに適用した結果はテストしない.そのため,単体テストしては利用できるが結合テスト用途には利用できない.Cucumber-chef,minitest-chef-handlerはChefという特定の構成管理ツールに依存している.そのため,Chef以外の構成管理ツールでは利用することができない.Test Kitchenやrspec-systemは,テスト用VMの作成,テスト用VMへの構成管理ツールの適用,テストの実行をトータルで行う統合テストスイートであるが,組み込みのテスト機構は汎用性に乏しく,特定の構成管理ツールに依存していたり,OSやディストリビューション毎の違いを意識したテストコードを書く必要がある. | ||
我々は,テストフレームワークの汎用性を高めるために,構成管理ツール特有の振る舞い,例えば,パッケージのインストールやシステムユーザの作成などを抽出,一般化し,それらをテストするためのコマンドをOSやディストリビューション毎に分離,その上でOSや実行形式の違いを吸収するレイヤーを設けることにより,汎用コマンド実行フレームワークを定義した.続いて,テストコードの記述の抽象度を高め可読性を上げるために,宣言的かつ自然言語に近い記法で汎用コマンド実行フレームワークを操作できる制御テストフレームワークを定義した.これにより,テスト対象の環境の違いを気にすることなく,直観的にテストが書ける.また,フレームワークを用途別に分離して定義することにより,制御テストフレームワークを独自の記法に変更することも容易である.例えば,本論文で提案するテストフレームワークでは,テスト記法としてRSpec\cite{rspec}を採用しているが,他のテストフレームワークに差し替えたり,あるいはまったく独自の記法に差し替えたりすることも可能である.このテストフレームワークをserverspec\cite{serverspec}と名付けた.serverspecを採用している企業も既に存在する\cite{nintendo}\cite{wantedly}. | ||
|
||
我々は,テストフレームワークの汎用性を高めるために,構成管理ツール特有の振る舞い(例えば,パッケージのインストールやシステムユーザの作成など)を抽出・一般化し,それらをテストするためのコマンドをOSやディストリビューション毎に分離,その上でOSや実行形式の違いを吸収するレイヤーを設けることにより,汎用コマンド実行フレームワークを定義した. | ||
|
||
続いて,テストコードの記述の抽象度を高め可読性を上げるために,宣言的な記法で汎用コマンド実行フレームワークを操作できる制御テストフレームワークを定義した.これにより,テストコードのメンテナンス性を高め,サーバの運用・管理コストを低減することができる.また,フレームワークを用途別に分離して定義することにより,制御テストフレームワークを独自の記法に変更することも容易である.例えば,本論文で提案するテストフレームワークでは,テスト記法としてRSpec\cite{rspec}を採用しているが,minitest\cite{minitest}に差し替えたり,あるいはまったく独自の記法に差し替えたりすることも可能である.このテストフレームワークをserverspec\cite{serverspec}と名付けた.serverspecを採用している企業も既に存在する\cite{nintendo}. | ||
|
||
本論文の構成について述べる.2章ではサーバの構成管理とテスト手法について更に詳しく述べる.3章では提案するサーバのテスト手法を詳細に述べ,4章では提案手法によりもたらされた成果を論じ,5章で結びとする. | ||
本論文の構成について述べる.2章ではサーバの構成管理とテスト手法について更に詳しく述べる.3章では提案するサーバテスト手法と実装について述べ,4章では提案手法の評価について論じ,5章で結びとする. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.