2014/11/28(金)「ソフトウェアテスト勉強会~PictMasterを使い倒す!~」に参加してきました。

今回は組み合わせテストの組み合わせを算出してくれるツール「PictMaster」の使い方を学んできました。
PictMasterは組み合わせテスト技法である「オールペア法」を用いるMicrosoft製のツール「PICT」をEXCELでラップしたツールです。

PictMaster プロジェクト日本語トップページ - SourceForge.JP


PICTはとても使えるツールですが、コマンドラインツールなので、初心者にはとっつき辛いです。
PictMasterはExcel経由でPICTが扱えるようになるので、初心者も使いやすいツールになってます。

なぜ、組み合わせテスト技法が必要か?

ラーメンを例にして考えてみます。*1

あるラーメン店では、以下のようなラーメンの味付け、素材を利用者が選ぶことができます。

スープ  :みそ、塩、しょうゆ、とんこつ
麺    :細麺、中太麺、太麺
ゆで方  :バリカタ、カタ、ヤワ、バリヤワ
トッピング:チャーシュー、ゆで卵、紅しょうが、すりおろしにんにく、なし

その時の作れるラーメンのパターンは4*3*4*5で240通りになります。
流石にそれを全て試すのは、とても時間とお金がかかって大変です。

オールペア法

ラーメンの例でをオールペア法を使うと組み合わせ数を大幅に減らすことができます。
2因子の組み合わせ網羅の場合、22通りまで減らすことができます。

「因子」とは、スープや麺などの項目名を指します。
また、みそや塩など、因子の要素のことを「水準」といいます。

2因子の組み合わせ網羅とは、
任意の2因子で得られる組み合わせが
必ず1度は組み合わせ表に存在する、ということを指します。

例えば、「スープ:みそ、麺:細麺」や
「ゆで方:バリヤワ、トッピング:なし」など
2因子で好きな組み合わせを作ったとして、
それが必ず組み合わせ表に存在します。

スープ ゆで方 トッピング
みそ 細麺 バリカタ チャーシュー
中太麺 バリカタ ゆで卵
しょうゆ 細麺 カタ ゆで卵
太麺 ヤワ チャーシュー
とんこつ 細麺 ヤワ 紅しょうが
しょうゆ 中太麺 バリヤワ チャーシュー
みそ 中太麺 カタ すりおろしにんにく
みそ 太麺 バリヤワ なし
しょうゆ 太麺 バリカタ 紅しょうが
細麺 バリヤワ すりおろしにんにく
とんこつ 太麺 カタ チャーシュー
とんこつ 中太麺 バリカタ なし
みそ 中太麺 ヤワ 紅しょうが
しょうゆ 太麺 ヤワ すりおろしにんにく
細麺 カタ なし
とんこつ 太麺 バリヤワ ゆで卵
みそ 細麺 ヤワ ゆで卵
細麺 カタ 紅しょうが
とんこつ 中太麺 バリカタ すりおろしにんにく
しょうゆ 細麺 ヤワ なし
しょうゆ 中太麺 バリヤワ 紅しょうが

PICT-Masterのその他の機能

結果表や制約条件を用いた組み合わせ表を作成することもできます。

結果表を使う

例えば、PictMasterで単純に組み合わせ表を作った時に、
それぞれの組み合わせでシステムがどのような結果を返すのが適切かは
別途検討しないと行けません。

この結果表を使えば、「ある条件を満たした組み合わせの場合は、こういう結果を返す」
というルールを記載することができます。

制約条件を使う

例えば、「ある条件が真のときは、XXXを選ぶことができない」といった、
組み合わせの中で特殊なケースを想定する必要があることがあります。

PictMasterでは、その制約条件のルールを記載でき、
制約条件を考慮した組み合わせ表を作ることができます。

実際に制約条件に基づいた組み合わせ表を見てみると、
とても人の手で作れるものではない、ということがよく分かります…

制約条件を使うときの考慮点

“制約条件を記述するのがめんどくさいから、
制約条件なく組み合わせ表を作っていらない組み合わせを削除しよう”とすると、
組み合わせ網羅を壊すことになります。

ある組み合わせでは、着目している以外の因子の組み合わせも含まれているので、
不用意な組み合わせの削除は手法が保障する網羅性に穴をあけるので、注意が必要です。

オールペア法において、因子の増加と水準の増加では、どちらが組み合わせ数の増加に影響を与えるか。

結論は、“基本的に、因子の増加よりも水準の増加の方が組み合わせ数の増加に影響を与える”です。

総組み合わせの場合は水準より因子の増加の方が組み合わせ数の増加に影響を与えるため、
パッとは分からない問題でした。

とりあえずの理解としては、オールペア法は因子が多いケースに効果的、という感じで良いでしょうか?

CIT-BACH

PictMaster v6.0から、PICTの他にCIT-BACHというアルゴリズムに対応しています。
CIT-BACHは最小の組み合わせ数を求めることに適している、とのこと。
PICTは(恐らく)乱択アルゴリズムが含まれていて、複雑な制約条件などが含まれる場合、
最小の組み合わせ数が求まらない場合があるが、
CIT-BACHは最小の組み合わせ数を求めるように処理を行う、という話を聞きました。

まとめ

PictMasterは以前にも勉強会でやったことがありましたが、
今回は前回よりも面白く感じました。
当時よりもテスト関係の知識が増えたこともあり、
実業務にどうつなげられるか、などを考えながら話を聞いていたのが
前回との違いかな、と感じつつ、
楽しく学ぶことができました。

*1:勉強会と同じ例を使っています

2014/11/21(金)「Scrumな人材育成―プロダクト開発に必要な人材像や育成方法」に参加してきました。

すくすくスクラム仙台が開催するイベントに参加してきました。
私のScrumに対する理解は、
アジャイルの方法論の一つで、良いソフトウェアプロダクトを
作るための考え方」程度でしたが、
その認識が改まっただけでも、参加した価値がある勉強会でした。

良いプロダクトを作るために必要な要件

人を採用の際に重視する能力と、
良いプロダクトを作れる人が持っている能力に
ギャップがある、ということを
ワーク形式で学びました。

例えば、良いプロダクトを作るためには
「リスクについて話し合える環境を作れる」能力が必要ですが、
採用の際にその能力は評価されにくい、ということがあります。

良いプロダクトを作るために必要な能力は、
採用の時点で見極めることが難しいです。*1
"測ることが難しいのであれば、組織として培っていく必要があるよね、
そのためにScrumは有効だよね"という話だと考えています。

シチュエーショナル・リーダーシップ

「シチュエーショナル・リーダーシップ」とは
人の状態を「技術の習得具合」と「モチベーション」の二軸のグラフで表現して、
その人の状態に応じて、マネジメントを変える必要がある、という考え方です。

例えば、技術が未熟で仕事に対するモチベーションが低い人に対しては、
細かいやり方まで丁寧に教える「コーチング」が有効だったり、
技術力があるけど、仕事に対するモチベーションが低い人に対しては、
対話によって相手の気づきを促す「メンタリング」が有効、という感じです。


その人の状況に合わせたマネジメントをしないと適切な効果が望めない、という
考え方です。
「技術の習得具合」は立場の変化によって急激に下がる*2ことがあり、
「モチベーション」はその人のプライベートによって揺れ動くこともあります。
そのため、その人の状況を的確に判断してマネジメントをする必要がある、というのは
今回の新しい気づきでした。

また、シチュエーショナル・リーダーシップが対人だけでなく、
対組織などにも有効な考え方であるという点が、
実感が湧かないまでも面白いと思いました。

まとめ

Scrumやリーンを学んでみると、
その手法が本当に価値のあるものを作るために考えられている、
と実感します。

Scrumは方法論ですが、
その方法を実践していく過程で、
価値のあるものを作れる人材、組織が
育っていくのだな、と思いました。

*1:「採用クソが!」という話ではない

*2:例えば、技術者が管理職になったら求められる技術が変化するため

AzureMachineLearningで使えるデータを見てみた。

Azure Machine Learning では、
サンプルで使えるデータセット(Saved Datasets)が公開されています。

お試しで使えるので、どんなものがあるかを整理してみました。
(2014/11/20時点)

データ数や項目数がデータによって大きな差があることが、今回の整理で分かりました。
これらを使って、近々遊んでみようと思います。


以下のフォーマットで並べてます。

ID Dataset<データセット名> Row<データ数> Columns<項目数> item1 item2...
1 Adult Census Income Binary Classification Dataset 32561 15 age workclass fnlwgt education education-num marital-status occupation relationship race sex capital-gain capital-loss hours-per-week native-country income
2 Airport Codes Dataset 365 4 airport_id city state name
3 Automobile price data(Raw) 205 26 symboling normalized-losses make fuel-type aspiration num-of-doors body-style drive-wheels engine-location wheel-base length width height curb-weight engine-type num-of-cylinders engine-size fuel-system bore stroke compression-ratio horsepower peak-rpm city-mpg highway-mpg price
4 Bike Rental UCI dataset 17379 17 instant dteday season yr mnth hr holiday weekday workingday weathersit temp atemp hum windspeed casual register cnt
5 Bill Gates RGB Image 25600 5 X Y R G B
6 Blood donation data 748 5 Recency Frequency Monetary Time Class
7 Book Reviews from Amazon 10000 2 Col1 Col2
8 Breast Cancer data 683 10 Class age menopause tumor-size inv-nodes node-caps deg-malig breast breast-quad irradiat
9 Breast Canser Features 102294 118 Col1
10 Breast Cancer Info 102294 12 Col1
11 CRM Appetency Labels Shared 50000 1 Col1
12 CRM Churn Labels Shared 50000 1 Col1
13 CRM Dataset Shared 50000 230 Var1
14 CRM Upselling Labels Shared 50000 1 Col1
15 Energy Efficiency Regression data 768 10 Relative Compactness Surface Area Wall Area Roof Area Overall Height Orientation Glazing Area Glazing Area Distribution Heating Load Cooling Load
16 Flight Delays Data 2719418 14 Year Month DayofMonth DayOfWeek Carrier OriginAirportID DestAirportID CRSDepTime DepDelay DepDel15 CRSArrTime ArrDelay ArrDel15 Cancelled
17 Flight on-time performance(Raw) 504397 18 Year Quarter Month DayofMonth DayOfWeek Carrier OriginAirportID DestAirportID CRSDepTime DepTimeBlk DepDelay DepDel15 CRSArrTime ArrTimeBlk ArrDelay ArrDel15 Cancelled Diverted
18 Forest fires data 517 13 X Y month day FFMC DMC DC ISI temp RH wind rain area
19 German Credit Card UCI dataset 1000 21 Col1
20 IMDB Movie Titles 16614 2 MovieID MovieName
21 Iris Two Class Data 100 5 Class sepal-length sepal-width petal-length petal-width
22 Movie Ratings 227472 4 UserID MovieID Rating Timestamp
23 Movie Tweets 170285 8 Scraping Time Tweet ID User ID Movie ID Rating Retweet Count Favorite Count Time Zone
24 MPG data for various automobiles 392 9 MPG Cyl Displacement Horsepower Weight Acceleration Year CountryCode Model
25 Named Entity Recognition Sample Articles 2 1 Col1
26 Pima Indians Diabetes Binary Classification dataset 768 9 Number of times pregnant Plasma glucose concentration a 2 hours in an oral glucose tolerance test Diastolic blood pressure(mmHg) Triceps skin fold thickness(mm) 2-Hour serum insulin(muU/ml) Body mass index(weight in kg/(height in m)^2) Diabetes pedigree function Age(years) Class variable(0 or 1)
27 Restaurant customer data 138 19 userID latitude longitude smoker drink_level dress_preference ambience transport marital_status hijos birth_year interest personality religion activity color weight budget height
28 Restaurant feature data 130 21 placeID latitude longitude the_geom_meter name address city state country fax zip alcohol smoking_area dress_code accessibility price url Rambience franchise area other_services
29 Restaurant ratings 1161 3 userID placeID rating
30 Sample Named Entity Recognition Articles - - cannot visualize
31 Steel Annealing multi-class dataset 798 39 family product-type steel carbon hardness temper_rolling condition formability strength non-ageing surface-finish surface-quality enamelability bc bf bt bw/me bl m chrom phos cbond marvi exptl ferro corr blue/bright/varn/clean lustre jurofm s p shape thick width len oil bore packing classes
32 Telescope data 19020 11 fLength fWidth fSize fConc fConcl fAsym fM3Long fM3Trans fAlpha fDist Class
33 Time series Dataset 126 2 time N1725
34 Weather Dataset 406516 26 AirportID Year Month Day Time TimeZone SkyCondition Visibility WeatherType DryBulbFarenheit DryBulbCelsius WetBulbFarenheit WetBulbCelsius DewPointFarenheit DewPointCelsius RelativeHumidity WindSpeed WindDirection ValueForWindCharacter StationPressure PressureTendency PressureChange SeaLevelPressure RecodeType HourlyPrecip Altimeter
35 Wikipedia SP 500 Dataset 466 3 Title Category Text


表のうまい書き方が分からない…

10/4(土)「とちぎテストの会議03」に参加してきました。

通称「とてか」で知られる「とちぎテストの会議」に参加してきました。
とてか自体は3回目、自分は初参加です。

宇都宮なので、お昼は「みんみん」本店で焼き・水・揚げ餃子。
f:id:toshimana:20141004113726j:plain

夜も帰る前に「宇都宮餃子館」で健太餃子とチーズ餃子。
f:id:toshimana:20141004211641j:plain

拍手システム

発表時間の管理の仕方がとても素晴らしかったです。
プロジェクタを使って、講演時間のタイマーを全員に見えるようにしてあって、
タイマーが0になると、(講演の途中でも)観客が拍手して、強制終了するシステムでした。

このシステムは「講演が打ち切られても、嫌な雰囲気にならない」ところが素晴らしいと思いました。
進行時間はしっかり守られるし、拍手によって終わった感が出てくる、
他で見たことないようなやり方でした。

基調講演(湯本剛さん)「「いかす!」のために大事だと思う4つのこと」

スライドはこちら

「ゆもつよメソッド」で知られる湯本さんのお話。
自身で培ったテスト分析技法をさらに研究するために大学に入るとか、
その生き様だけで十分に「いかす!」人。

ちなみに、とても面白いTシャツを着てました。
あなたがそんなことを言ったら日本に「テストができる」人はほとんど居ないでしょう…

招待講演(中島滋さん)「忍者式テストをやってみた」

[20141007]スライド追加。


栃木の@m_sekiさん発祥の「忍者式テスト」の実践事例紹介。

忍者式テストは@nemorineさんが調べてくれています。

話を伺って、手動テストの有り方について再考させられました。
これまでは、以下のように「手動テストは自動テストの下位互換」に近いものだと考えていました。

  • あらゆる手動テストは自動化可能である。
  • 手動テストは自動テストに比べて初期コストは安い
  • ランニングコストは自動テストの方が遥かに安い

しかし、テストを[Checking]と[Testing]の観点で見ると、
そもそも得意分野が異なるのだということが分かりました。

  • 自動テストは既知の不具合がないかを検証する[Checking]を得意とする
  • 手動テストは未知の不具合を発見する[Testing]を得意とする

今はざっくりとした理解ですが、この辺りは整理できると面白いかも。
「探索的テスト」とかは手動でやるものなので、今更か、って感じですけど。


あと、スライド内で自分が困っているGUI設計のデザインパターンについて記載してありました。
全部はメモれなかったので、スライドが公開されると嬉しいですね。

「いかすツイートパネルディスカッション aka いかついぱねる」

ツイートから議論したい話題を取り上げて全員で議論する、これまた他で見ない試みで面白かったです。
回帰テストと殺虫剤のパラドックス」の話が面白かったです。

そして、@goyokiさん…お疲れ様です…

ワールドカフェ「とてかタイマーについて」

講演時間を管理する「とてかタイマー」を2日前に改修したけど、動作が不安で機能も付け加えたい。じゃあ前日はどうしよう、というテーマでグループに分かれて議論しました。
「機能追加の前に、最低限で動くものを用意しよう」とか「当日を想定したリハーサルは必ずやろう」とかが実際のケースでも使える対策ですね。

まとめ

仙台から栃木なら日帰りでも十分行き来できるので、
ちょっとした小旅行気分で、けど新しい気付きも沢山得られて、
とても楽しい一日になりました。
とてか自体は3回目ですが、やるたびに進化しているとのことなので、
次回も楽しみな勉強会でした。

Rでtmパッケージがインストールできなかった時の対処法

最近は「入門 機械学習」を読んでます。

入門 機械学習

入門 機械学習

その中で、text miningのパッケージであるtmのインストールで躓いたので、解決策をメモ

問題1

インストールできなかった原因は、tmパッケージで要求するRのバージョンが、インストールされていたRのバージョンよりも高かったことでした。

  • tmパッケージが要求するRのバージョン:≧3.1.0
  • インストールされていたRのバージョン:3.0.2

ubuntuの標準aptリポジトリを使うと、3.0.2しかインストールできなかったので、どうにかしてRのバージョンを3.1.0以上にする必要がありました。

解決1

参考にしたWebページ:
Ubuntu で R バージョン 3.1.0 のインストール

ほぼそのまま使わせていただきました。

export RELEASE=`lsb_release -sc`
sudo add-apt-repository --yes "deb http://cran.md.tsukuba.ac.jp/bin/linux/ubuntu ${RELEASE}/" 

これで、最新のバージョンのR用リポジトリが登録できました。

問題2

apt-get updateにて、GPGエラーが発生。
GPGエラーって何だろうと調べてみると、
「公開鍵がないため、登録したリポジトリが利用できない」ってことらしいです。

解決2

参考にしたWebページ:
Linux: apt-get 時の GPG error (NO_PUBKEY) の解決例

これもほぼそのまま使わせて頂きました。

gpg --keyserver subkeys.pgp.net --recv-keys 51716619E084DAB9
gpg -a --export 51716619E084DAB9 | sudo apt-key add -

1行目で鍵サーバから公開鍵を取得、
2行目でaptの公開鍵リストに追加、という処理、のはず。

おわりに

最後に以下のコマンドを実行して、完了。

sudo apt-get update
sudo apt-get upgrade
R

Rコマンド実行時に出てくるバージョンが3.1.0以上になっていればOK。

R version 3.1.1 (2014-07-10) -- "Sock it to Me"
Copyright (C) 2014 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

これで、サンプルが動かせる!はず!

Microsoft Azure Machine Learningのサンプルを動かしてみる。「5.Predict over new data」

Microsoft Azure Machine Learningのサンプルを動かしてみる。」の5回です。

Azure Machine Learningのサンプルを動かしていきます。
[Create your first experiment in Azure Machine Learning Studio]
http://azure.microsoft.com/ja-jp/documentation/articles/machine-learning-create-experiment/#step-5-predict-over-new-data

第1回、2回、3回、4回はこちら。

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「1.Get Data」

http://toshimana.hatenablog.com/entry/2014/08/09/005803

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「2.Pre-process data」

http://toshimana.hatenablog.com/entry/2014/08/11/113416

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「3.Define, extract and enrich features」

http://toshimana.hatenablog.com/entry/2014/08/12/185342

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「4.Choose and apply a learning algorithm」

前半http://toshimana.hatenablog.com/entry/2014/08/13/202847
後半http://toshimana.hatenablog.com/entry/2014/08/14/164432

1.点数化の準備をする。

1-1.「Score Model」を用意します。

f:id:toshimana:20140814181638j:plain

1-2.「Train Model」の"Trained model(ブロック下部の小丸)"と「Score Model」の"Trained model(ブロック上部左側の小丸)"を接続します。

f:id:toshimana:20140814182011j:plain

1-3.「Split」の"Results Dataset1(ボックス下部左側の小丸)"と「Score Model」の"Dataset(ブロック上部右側の小丸)"を接続します。

f:id:toshimana:20140814182319j:plain

2.点数化を行う。

2-1.処理を実行します。

f:id:toshimana:20140814210304j:plain

3.評価する。

3-1.「Evaluate Model」を用意します。

f:id:toshimana:20140814204110j:plain

3-2.「Score Model」の"Scored dataset(ブロック下部の小丸)"と「Evaluate Model」の"Scored dataset(ブロック上部左側の小丸)"を接続します。

f:id:toshimana:20140814205017j:plain

3-3.処理を実行します。

f:id:toshimana:20140814205503j:plain

終わりに

一通り、サンプルの手順を追いましたが、中身については基本触れませんでした。*1
今は平行して本を読んで勉強している最中なので、機械学習に対する理解度が増したら、補足していきたいと考えています。

パターン認識と機械学習 上

パターン認識と機械学習 上

*1:機械学習が分からないから仕方がないね!

Microsoft Azure Machine Learningのサンプルを動かしてみる。「4.Choose and apply a learning algorithm」後半

Microsoft Azure Machine Learningのサンプルを動かしてみる。」の4回の後半です。

Azure Machine Learningのサンプルを動かしていきます。
[Create your first experiment in Azure Machine Learning Studio]
http://azure.microsoft.com/ja-jp/documentation/articles/machine-learning-create-experiment/#step-4-choose-and-apply-a-learning-algorithm

第1回、2回、3回、4回はこちら。

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「1.Get Data」

http://toshimana.hatenablog.com/entry/2014/08/09/005803

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「2.Pre-process data」

http://toshimana.hatenablog.com/entry/2014/08/11/113416

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「3.Define, extract and enrich features」

http://toshimana.hatenablog.com/entry/2014/08/12/185342

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「4.Choose and apply a learning algorithm」前半

http://toshimana.hatenablog.com/entry/2014/08/13/202847

1.学習アルゴリズムのパラメータを調整する。

1-1.「Two-Class Boosted Decision Tree」を選択します。

f:id:toshimana:20140814154247j:plain

1-2.「Maximum number of leaves per tree」や「Number of trees constructe」、「Minimum number of training instances required to form a leaf parameter」の値を調整します。

f:id:toshimana:20140814154756j:plain

1-3.処理を実行します。

f:id:toshimana:20140813201123j:plain

2.訓練モデルを用意します。

2-1.「Train Model」を用意します。

f:id:toshimana:20140814160128j:plain

2-2.「Two-Class Boosted Decision Tree」と「Train Model」の"Untrained model(ボックス上部左側の小丸)"を接続します。

f:id:toshimana:20140814160418j:plain

2-3.「Split」の"Results Dataset1(ボックス下部左側の小丸)"と「Train Model」の"Dataset(ボックス上部右側の小丸)"を接続します。

f:id:toshimana:20140814161243j:plain

2-4.「Cross Validate Model」の「column selector」を表示します。

f:id:toshimana:20140814181048j:plain

2-5."Include", "column names"と設定し,入力項に"price"を入力します。

f:id:toshimana:20140813200858j:plain

2-6.右下のチェックボタンを押します。

f:id:toshimana:20140813201011j:plain

2-7.処理を実行します。

f:id:toshimana:20140814181321j:plain

終わりに

第4回は前後半に分けた記事になっています。*1

次回「サンプルを動かしてみる。」は最後になります。

*1:前半記事を書いた時点で、後半部分が残っていることに気づいていませんでした。