ソフトウェアテスト技法ドリルを読み終えて

ソフトウェアテスト技法ドリル

ソフトウェアテスト技法ドリル―テスト設計の考え方と実際

ソフトウェアテスト技法ドリル―テスト設計の考え方と実際

テストのやり方が分からず、情報を模索していた時に出会った本です。

他のどの本よりも具体例を交えて実践的に書かれていたので購入しました。

学ぶことが多く、分からなかったことが整理できたので、それをまとめます。

ソフトウェアテストでやるべきこと (基礎編)

自分がテストをするときの考え方の基礎になったので勝手に命名しました。

単機能テスト

対象機能が仕様通りに動作することを確認します。

やり方としては、機能を構成する入力項目について1項目ずつテストします。テスト対象の入力項目を決めたら、その他の項目には結果が常に真(正常)となる値を設定しながらテストします。その他の項目が常に真となる値にする点がドメイン分析テストに近いなと思いました。

実際に入力値を考える際には、同値クラスを探し、その中から境界値分析をしてすると見つけやすかったです。

組合せテスト

対象機能の処理(論理関係の組合せ)が仕様通りに動作することを確認します。

やり方としては、①仕様として定義されている処理が正しく動作することの確認と、②仕仕様として定義されていない動作の確認に分かれます。

①仕様として定義されている処理の確認

原因結果グラフ、CFD 等のテスト技法で対象機能のチェックなどの論理関係を整理し、論理関係の組合せの結果が仕様通りになるかを確認します。

テストの目的は単機能テストと似ていますが、単機能テストが単一項目の動作に関するテストであるのに対し、組合せテストは入力項目に限らずいくつかの論理関係が組み合わさったときの動作に関するテストと理解しています。

②仕様として定義されていない動作の確認

仕様に記載のない(互いに関連のない)項目同士の組み合わせで意図しない動作にならないかを、HAYST法 やペアワイズ法を用いて確認します。

状態遷移テスト

対象機能、またはシステムに状態がある場合、仕様通りに状態が変わることを確認します。

やり方としては、①状態遷移表、②1スイッチカバレッジ、③2スイッチカバレッジの観点でテストをします。

①状態遷移表

イベントと状態を軸とし、セルに遷移後の状態を記した表で対象機能、またはシステムの状態遷移仕様を表現します。各状態の時にイベントが発生するとセルに記載されている状態に遷移するかどうかを確認します。

②1スイッチカバレッジ

①の状態遷移表で網羅しきれなかった状態遷移について確認します。

ただ、今の課題は行列計算が出来ないので、1スイッチカバレッジ表を作れないこと。簡単に行列計算できる方法を探さないと。

今後のソフトウェアテストで何をするとよいのか

一通りドリルを読んでいくと、開発工程の話が一切出てこないことに気づきました。

状態遷移テストを適用するシーンを考えていてその理由に気づきました。ストップウォッチのように単一機能で状態が遷移する場合もあれば、業務管理システムのように機能間で状態が遷移する場合もあります。だからテストの対象によってどのようなテストをするのかは違うんだと。

絶妙なタイミングでソフトウェアテスト業界で尊敬する方もRTをくださりました。

だからこそのテストアーキテクチャ設計。 RT …自分の場合は結合テストに組み込むことができるけど、単機能で状態遷移するなら単体テストでの実施を計画しないといけない…この工程ではこういうテストをするーみたいなのは一概に言えないね。

それでテストは別に開発手法に縛られるものじゃないよな-と思ったわけです。だからテスト対象を知り、どんなテストをするのが適切かを考えることが大事なんだと。

テストの目的が分かっていなかったころはこんな感じでした。

単体テストってなにやるんだ?」

結合テストって何するんだ?」

システムテストってシナリオテストをやればいいんだよね?」

だから今後は次のことをやっていく必要があると考えてます。

対象機能が満たすべき要件や仕様を理解する

それらは何をもって満たされていると言えるかを考える

それはどのようなテストで確認が出来るかを考える

これらを仕事や趣味で実践しながらエンジニアとしてのスキルを上げていきたいですね。

I read "Buying Somw Gloves".

今月からはじめた英語学習の一環で、簡単な本を読みました。

ラダーシリーズ「手袋を買いに」

情景がイメージしやすくすらすら読めました。

中学二年生レベルに語彙で記述されているレベルでしたが幾つか読めない熟語がありました。

hold out ~を差し出す

このレベルならどんどん読めそうです。次はなにを読もう。。

How To Pass MS 70-532 to 534

Azureに関する知識を深めたいと思い、MCSD70-532~534を次の目標にしました。合格した人がどうやって勉強したのか情報を集めました。

  • 70-532の概要

https://www.microsoft.com/ja-jp/learning/exam-70-532.aspx

  • 70-534の教材紹介ドキュメント(MS Learning)

https://borntolearn.mslearn.net/b/weblog/archive/2015/05/18/mcsd-azure-solutions-architect-study-resources-you-need-to-know

  • MS MVP Chris Pietschmann氏による70-532合格体験記

http://pietschsoft.com/post/2015/06/06/How-I-passed-the-70-532-Developing-Microsoft-Azure-Solutions-certification-exam

  • 上記のChris Pietschmann氏 が70-532学習過程でまとめられた資料

http://buildazure.com/

  • Chris Pietschmann氏が作成したテスト

http://crpietschmann.github.io/Azure-70-532-Practice-Test/?

  • YouTube に紹介されていた動画

https://youtu.be/gTpX4tZkYkw

 

その他、順次学習を進めていきたいと思います。

Hints to Automate Everything with MS Azure

クラウドを使うとVMの自動化~DB作成、アプリケーションのデプロイ、認証、なんでもスクリプトにして自動化して、コードをアプリケーションと一緒に管理できるようにできるってことがデモを通してよくわかります。

ASMで少し古いですが、本質は変わらないってことが分かりました。

https://channel9.msdn.com/Events/TechEd/Australia/2013/AZR324/player

 

こちらと組み合わせてみるといいと思います。

https://mva.microsoft.com/ja/training-courses/microsoft-azure--8391?l=IHKGoje8_1904984382

knife で Azure に VMを作成する方法

実行環境:

Windows 7 (64bit)

以下を参照し、Chef SDKをインストールします。

※以下の記事の内容そのままではうまくいかないので、注意。

注意箇所は後で述べます。

https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-automation-with-chef/

1.Chef ワークステーションの構成

"chef-starter\chef-repo.chef にある~"とありますが、"C:/chef/chef-starter/chef-repo/.chef"と読み替えてください。

2.Knife.rbの編集

knife[:azure_publish_settings_file]を含め、以下の4つの設定が必要です。

knife[:azure_publish_settings_file] = "#{current_dir}/xxxxx.publishsettings" knife[:azure_subscription_id] = "xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx" knife[:azure_mgmt_cert] = "#{current_dir}/management-certificate.pem" knife[:azure_api_host_name] = "management.core.windows.net"

※区切り文字は、'/'でOKです。

※azure_mgmt_certの指定には、https://github.com/chef/knife-azure/blob/master/README.md を参照し、base64+openssl(Windows環境で実践している人は、cygwinなどが便利)をしてください。

3.Chef開発キットのインストール

インストール後に環境変数Pathに以下を追加します。

chefdkのフォルダ名が異なりますので注意です。

私はbinフォルダが無かったので、作成しました。(このPathが役に立っているかは謎です)

C:\opscode\chefdk\bin; C:\opscode\chefdk\embedded\bin; C:\Users\ユーザ名\AppData\Local\chefdk\gem\ruby\2.1.0\bin;

4.knife-azureのインストール

 chef gem install knife-azure ––pre

ありますが、"--pre"は不要です。

5.knife azure image list

この後knife azure server createコマンドを実行する際に、VMイメージを指定しますが、このリストの中からイメージ名を取得しますので、コマンドのバッファを2000くらいにしておいてください。

6.テンプレートの作成

「C:\chef\cookbooks\webserver\templates\default\Default.htm.erb ファイルに移動します。シンプルな「Hello World」 HTML コードを追加して、」とありますが、本当にこのファイルにHello Worldと書き込むだけでいいです。

7.knife azure server createコマンドを実行

書かれている通り通りに実行すると躓きます。

--tcp-endpoints の指定の仕方がこれだと内部IPしか指定されていません。アクセスするには外側のポートも指定する必要があります。

--tcp-endpoints '80:80,3389:3389'と指定してください。

knife azure server create --helpからでも調べることが出来ます。

ヘルプは多用しましょう。

また、このままだとWindowsVMイメージの場合、リモートアクセスの為のボタンがAzure portal上で非活性のままです。

--bootstrap-protocol 'winrm' と指定してあげましょう。

Windows VM Imageの場合、winrmがデフォルトなので、このオプション自体を指定しなくてもOKです。

コマンドはこんな感じになります。

knife azure server create --azure-dns-name 'test01' --azure-vm-name 'testsv01' --azure-vm-size 'Small' --bootstrap-protocol 'winrm' --azure-source-image 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-20151120-en.us-127GB.vhd' --azure-service-location 'Japan West' --winrm-user azureuser --winrm-password 'myPassword123' --tcp-endpoints '80:80,3389:3389' --r 'recipe[webserver]'

この辺のオプションはKnife.rbに指定しても良いと思います。

以上で、出来上がったcloudサービスのURLに接続すると、6で追加した"Hello World"を記載されたページが表示されます。

VM作成時にIISがプロビジョニングされてるんですね。すごいです。

これでSeleniumTomcatもプロビジョニングできるようにしたいですね。

ただこれ、VMがASMモードでできます。

ARMモードで作成したいな。

Azure クラウドサービス(クラシック)をローカルでエミュレートしようとした時に躓いたこと

Azureの使い方にも慣れてきてAzureを使って開発をしたいなと思い、Azureクラウドサービスにアプリケーションをデプロイする方法を試してみました。

参考 https://msdn.microsoft.com/ja-jp/library/azure/hh690944.aspx

その時、ちょっと躓いたことをメモします。

  • やったこと
    1. Azure クラウドサービスにデプロイする
    2. Azure Compute Emulatorを使ってローカルでアプリケーションを動かす
  • 躓いたこと

1.デプロイ先が、Azure Preview Portalで作成したクラウドサービスではなく、Azure Portalで作成したクラウドサービスだったこと。

Azure Toolkit for Eclipseでは、Azure Preview PortalクラウドサービスApp Serviceへのデプロイ方法は以下のサイトに掲載されていました。次に試してみようと思います。

参考 https://azure.microsoft.com/ja-jp/documentation/articles/web-sites-deploy/#

2.Azure Compute Emulatorを起動できない

3回躓きました。

1回目は、Azureデプロイプロジェクトのサーバ構成の設定で、Local server pathを参照ボタンから指定しても「そのアプリケーションサーバは認識できない的な」エラーメッセージが出てしまって、サーバ構成の設定ができなかったこと。結局、参照ボタンを使わずに直接パスをコピペしたらエラーメッセージが出ずにサーバ構成の設定が出来ました。

SnapCrab_WorkerRole1 のプロパティー_2015-12-20_15-31-48_No-00

2回目は、ビルドパスが長かったこと。Cドライブの直下にeclipseのディレクトリを作り、その中にAzureにデプロイするアプリのworkspaceを配置 しましたが、「256文字以内でパスを指定してください」的なメッセージが出た為、workspaceをCドライブ直下に変更して実行。

3.アプリケーションを起動できない

3回目は、Azure Compute Emulatorまでは起動できたものの、「java.exe has not started - waiting...」がWorkerRoleのログに出力されてアプリケーションが起動できなかったこと。このログでググって出た以下のサイトから、「パスが間違ってた」というコメントを見つけたので、Eclipseのビルドパスを見るとEclipseJVMを使うようになっていました。Azureデプロイプロジェクトのサーバ構成では、任意のフォルダにインストールしたJDKパスを指定していたので、サーバ構成で指定したパスのJDKEclipseのビルドパスに指定し直したところ動くようになりました。

SnapCrab_WorkerRole1 のプロパティー_2015-12-20_15-30-10_No-00

SnapCrab_MyHelloWorld のプロパティー_2015-12-20_16-18-22_No-00

とても簡単にWebにアプリケーションをデプロイできました。

内部的にはAzureデプロイプロジェクトにデプロイ先のOSバージョン、JDK、Webアプリケーションサーバ、その他諸処設定を持っており、その設定を基にデプロイをしているみたいです。VMを自分で構築して、Webアプリケーションサーバを構築して、…といった手続きを踏む必要がないので、とても簡単にサービスの開始ができる印象を受けました。

 

今後はPortalでリソースを構築するを利用することはないので、Azure Preview PortalのApp Serviceへのアプリケーションのデプロイにも挑戦してみたいと思います。

 

 

AzureのVMでDockerを体験する方法

AzureにLinuxVMを作成して、Dockerを試してみるときに役立つ記事を紹介します。

https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-docker-with-portal/

「イメージ ギャラリーからの新しい VM の作成」をやると、以下からdockerがインストールされていることの確認をすることになります。

https://docs.docker.com/engine/installation/#installation

 

このサイトで、たまたま「Get Started」をクリックしたら、Dockerの利用方法を一通り分かるチュートリアルがあったので紹介します。

https://docs.docker.com/linux/started/

簡単な概要は以下の通りです。

試しに動かしてみる

  1. apt lineにdockerを追加する
  2. docker-engineをインストールする
  3. docker imageをdocker runで動かしてみる
  4. rootユーザグループのdockerを通常のユーザグループに追加する
    1. sudoなしでdockerコマンドを動かせるようにする

自分でビルドしてみる

  1. 任意のフォルダを作成する
  2. Dockerfileを書く
  3. docker buildでビルドする
  4. docker imagesで作成したイメージを確認する
  5. docker runでイメージを動かす
  6. docker tagでイメージにタグ付けする
  7. Docker Hubにアカウント登録する
  8. docker loginでDocker Hubにログインする
  9. docker pushで作成したイメージをpushする
  10. docker rmi -f 名前空間/ID でローカルにあるイメージを削除する
  11. docker pull イメージ名 でイメージをpullする
  12. docker pullしたイメージをdocker runする

 

こんな流れで体験することが出来ます。