Above & Beyond

日々のアウトプット記録

【増枠】Mercari CES 2019 報告会

01/21(月) は「【増枠】Mercari CES 2019 報告会」に参加してきました。

connpass.com

f:id:kabukawa:20190120111206j:plain:w500

会場は 株式会社メルカリ さん。既に今年に入って2回め。いつ来ても広くてきれい!

f:id:kabukawa:20190121190359j:plain


目次


CESとは

Consumer Technology Association (CTA) が主催し、ネバダ州ラスベガスで開催される電子機器の見本市。 CESはConsumer Electronics Showの略だったけど、現在ではCESが正式名称で、"Consumer Electronics Show" や "International CES" という表記でCESの情報を参照しないように、とサイトに注記があります。

www.ces.tech


タイムテーブル

タイムテーブル

時間 内容/発表者(敬称略)
19:00~19:30 開場 参加者受付
19:30~19:35 開会 会場案内
19:35~19:55 写真で振り返る CES 2019
Mercari, Inc. R4D, XR Team Manager 諸星 一行 @ikkou
19:55~20:15 ソフトウェア視点から考えるスマートグラスの普及方法
Mercari, Inc. R4D, XR Research Engineer 柳澤 慧 @ash_yanagisawa
20:15~20:35 VR&その他で気になったデバイス/ソフトウェア
Mercari, Inc. R4D, xR Engineer 中村 太郎 @nakatarotaro
Mercari, Inc. R4D, XR Researcher 里見 充則 @gravitino
20:35~21:05 新デバイスから体験まで!XR関連のトピックスの総まとめ!!
Mercari, Inc. R4D, xR Engineer 中地 功貴 @nkjzm
Mercari, Inc. R4D, Intern 山下 ひとみ @omeme_1231
21:05~21:20 質疑応答
21:20~22:00 アフタートーク ※自由解散・自由退場

内容

受付から既に(笑)

このときは登壇者のはいえろ(@omeme_1231)さんとは知らなくて、取り敢えずすごい眼鏡だなと思ってました。


既に当日のツイートがトゥギャられてますので、そちらもどうぞ。

togetter.com

全体的に内容が盛りだくさんで、1時間半ほぼノンストップで、でも楽しく報告を聞き続けるスタイル。 ツイートもたくさんされていましたし、参加者の皆さんが熱心に聞き入られているのが印象的でした。

また、現地でのツイートも纏めが作成されていますので併せてどうぞ。

togetter.com


いつものように、最初にお弁当と飲み物をいただきました。

とても美味しかったです。ありがとうございました!

ちなみに、メルカリさんのイベントでは最初から飲み物と食べ物が提供されることが多いのですが、椅子に付いているテーブルにPCを置くと食べ物を置くスペースがあまりありません。PCを持ち込んでいる場合は、提供された食べ物は早めに食べきって、テーブルの上はPCと飲み物だけにしておくほうが食べ物などをこぼしてしまうリスクが減るので個人的にはオススメです。(食べ物を落としそうになったことがある)


Mercari, Inc. R4D, XR Team について

  • R(Research) 研究
  • D(Design)設計
  • D(Development)開発
  • D(Deployment)実装
  • D(Distruption)破壊

写真で振り返る CES 2019

Mercari, Inc. R4D, XR Team Manager 諸星 一行(@ikkou) さん

speakerdeck.com

内容メモ:

何故CESか?

  • スマートグラスに最適化したプロと対応版を出すため。
  • 実際に見てみないと分からない

CESとは

  • 1967年から続く電子機器の見本市
  • ラスベガス
  • 参加者は18万人くらい
    CEATECが15万人くらいなので規模感の参考に
  • 1ヶ月前の登録で100$
  • 空港で受付ができる

ホテル&カジノ

  • 家電だけではなく自動車も増えている
  • 広すぎて1日では回りきれない
  • Googleも巨大なブースを出してGoogle Homeを押していた

Tech East

面白いと思ったもの

  • 曲がるディスプレイ
  • nreal
  • insta360

Tech West

  • AWSなど
  • 招待をされていないと入れない展示などが有った
  • フランスのLa Flance Techに勢いが有った。
  • HTC Vive

CES2018との違い

  • 全体感として目立っていたのは5G, Al, Mobility
    • 5GはVerizonが2018年9月から商用サービスを開始している
      • Verizon CEOが基調講演でユースケースをいろいろと発表していた(動画、ストリーミング、 医療現場、ドローンなど)が、いずれも現時点では想像の域を出ていない
    • Al x Mobility文脈では引き続き自動運転が目立つ
      • CES 2019の会期中にLyft自動運転車が30台走っていた
  • 目立っていたSleep Techはやや縮小するも出展社の質は向上
    • 健康志向の高まりからかHealthcare, Weflnessが伸長
  • VR関連ブースがやや縮小し、AR/SmartGlassブースが大きく伸長
    • かつてない程度に自撮り(セルフイー)の機会が多かった
  • CES Shanghaiの高まりからか中国ブースが目立った
  • 経済産業省の世耕大臣がCES を初視察

  • メルセデスの自動運転車

motor-fan.jp

  • NVIDIAのブースでは自動運転の仕組みを見られる

Go to CES 2020(航空券とホテルの手配)

  • CES 2020の会期は2020/0 1 /07~1 0の4日間
  • 航空券&宿の争奪戦は既に始まっている
  • CES 2019手配実績
    • 手配開始は11月上旬、早めに決めて夏頃には確保したい
    • 航空券
      • 前日1/7入り直行便で@50万超え。乗継便で@25万前後
      • 前々日1/6入り直行便で@21 万前後、安くないが確保
    • ホテル
      • LVCC周辺は既に満室、車で10分程度の距離で@3.5万前後
        • 宿泊費とは別に期間中1,500US$前後のリゾート税が発生する
      • 最終的に車で10分程度の距離にある家をairbnbで確保

航空券やホテルは8月くらいから押さえたほうが良い


ソフトウェア視点から考えるスマートグラスの普及方法

Mercari, Inc. R4D, XR Research Engineer 柳澤 慧(@ash_yanagisawa) さん

[資料は公開されたら追記します]

f:id:kabukawa:20190122132252j:plain:w500

内容メモ:

about.mercari.com

3つのキーワード

  • 一般的なジェスチャーは両方の手を使う
  • 指を指しながら選択する
  • お気に入りに登録するにはサムズアップ

人の行動原理に沿ったインターフェース

atap.google.com

一般的な画像検索の仕組み

  • クラウドに画像を送って解析
    →これだとプライバシーに問題が出てくる

カメラ画像から該当部分だけを送るようにする

  • 処理はできるだけエッジで行うようにする
  • 人の顔がないときのみクラウドに送る

最終的には端末内で商品検索ができることを目指す

  • Google Lens
  • プライバシー問題はスマートグラスを普及させる上では想像以上に重要

機械学習で最も良い候補1個のみ表示

  • 情報量が多すぎると理解するのに時間がかかるので5つのみ

ascii.jp

  • 何故 Vuzix Bladeを選んだか?
    • OSがAndraoidなのでその他のデバイスへの移行も簡単
  • 難しいところは
    • カメラが少し上を向いているのでうまく認識させる範囲に入れるのが難しい
  • 稼働時間
    • 1時間ほど
  • 利用者の想定
    • 現在のメルカリの利用者が日常的に使う

VR&その他で気になったデバイス/ソフトウェア

Mercari, Inc. R4D, xR Engineer 中村 太郎(@nakatarotaro) さん
Mercari, Inc. R4D, XR Researcher 里見 充則(@gravitino) さん

[資料は公開されたら追記します]

内容メモ:

立体音響

www.sony.co.uk

  • HRTF

www.sony.co.jp

sennheiser-ambeo.com

www.magicleap.com

HMDを使わないVRシミュレーター

アバター

embodydigital.com

ロボットとAR

www.milestone-net.co.jp

BlockChain×IoT

elkrem.io

  • 空飛ぶタクシー

  • 日本のメインはアバターを大切にしている
  • 海外は体験型
  • ARグラスはなにかに使うための目的を持ったものが多かった

新デバイスから体験まで!XR関連のトピックスの総まとめ!!

Mercari, Inc. R4D, xR Engineer 中地 功貴(@nkjzm) さん
Mercari, Inc. R4D, Intern 山下 ひとみ(@omeme_1231) さん

speakerdeck.com

こちらは資料が公開されているので、見てみてください。 これを読みながらツイートを確認すると、どんな感じなったのかよく分かると思います。 (何が言いたいかって言うと、発表と動画に夢中でメモもツイートも出来てません、すいません!ということです(汗)


懇親会

懇親会の雰囲気はこんな感じでした。

f:id:kabukawa:20190121212712j:plain


まとめ

なんだかあっという間でした。どんなものが発表されたのかな?という単純な興味で参加をしたのですが、登壇した方々があまりに楽しそうに話をしているので、俺も行ってみたい!という気持ちになりました。(いや、個人で行くにはあの金額は難しいので無理だと思いますが) こういうことをきちんと追っていく組織だったり、それを外部に発信しているところは本当に良いなぁと思いました。

VBA モジュールのExport

どこの現場に行っても、時々VBAのモジュールをテキストファイルにエクスポートしたいというタイミングがあるので、取り敢えずVBScriptで書き直したものを貼っておく。(どこの現場からも持ち出しはできないので、記憶などを頼りに適当に書き起こした)

ネットでググればたくさん出てくるけど、個人的には CreateObjectをWithで括る書き方が好きなのでそのように書いている。この書き方の良いところは、オブジェクトを保持するための変数宣言が不要でコードがスッキリするというのと、スコープを抜ければリソース破棄が行われるので気が楽というところ。

f:id:kabukawa:20190121150415p:plain:w300

expvba.vbs とか適当な名前を付けて保存。そのアイコンにアイコンにエクスポートしたいExcelファイルをドロップするとモジュールファイルをテキストファイルとして吐いてくれる。

出力先はドロップしたファイル名に "_modules" を付けたディレクトリをファイルと同じフォルダ直下に作成 出力対応ファイルは以下の通り。

拡張子 種別
bas 標準モジュール
ftm フォームモジュール
cls クラスモジュール
Option Explicit
' =============================================================================
' Export VBA Modules to file
' 
' Date  : 2019/01/21
' Auther: Kunihisa Abukawa (@kabukawa)
' 
' Require:
'   Microsoft Excel
'   Microsoft Windows
' Usage:
'   Drop Files on this if you want export VBA Modules to file.
'     or
'   cscript [Excel file names...]
' =============================================================================

' Check Arguments(Excel File Path) is not set.
' -----------------------------------------------------------------------------
If WScript.Arguments.Count = 0 Then
    MsgBox "Drop Files on this if you want export VBA Modules to file.", _
            vbOkOnly + vbInformation, "Information"
    WScript.Quit
End If

' Export VBA Modules
' -----------------------------------------------------------------------------
With CreateObject("Excel.Application")
    Dim fileName
    For Each fileName In WScript.Arguments
        With .Workbooks.Open(fileName,0,True,,,,True)
            outPutModule fileName & "_modules", .VBProject
            .Close False
        End With
    Next
End With

MsgBox "All Excel VBA Modules exported to file.", _
        vbOkOnly + vbInformation, "Information"
WScript.Quit


' =============================================================================
' Subroutines/Functions
' =============================================================================

' Clean output folder
' -----------------------------------------------------------------------------
Sub CleanOutput(dirName)
    With CreateObject("Scripting.FileSystemObject")
        If .FolderExists(dirName) Then
            .DeleteFolder dirName, True
        End If
        .CreateFolder dirName
    End With
End Sub

' Output VBA Modules to file.
' -----------------------------------------------------------------------------
Sub outPutModule(dirName, objProject)
    Dim objModule
    CleanOutput dirName
    If objProject.Protection = 0 Then
        For Each objModule In objProject.VBComponents
            objModule.Export BuildExpPath(dirName, objModule)
        Next
    End If
End Sub

' Build export module file path.
' -----------------------------------------------------------------------------
Function BuildExpPath(dirName, objModule)
    BuildExpPath = dirName & "\" & objModule.Name & GetExt(objModule.Type)
End Function

' Get file extention from module type.
' -----------------------------------------------------------------------------
Function GetExt(objType)
    Select Case objType
        Case 1      : GetExt = ".bas"
        Case 3      : GetExt = ".frm"
        Case Else   : GetExt = ".cls"
    End Select
End Function

この後はこれをベースに

を貼るかも。

01/21~01/27 参加予定の勉強会など

予定表

今週の参加予定を書いておきます。

f:id:kabukawa:20190116184251j:plain:h400

日付 時刻 イベント ハッシュタグ
01/21(月) 19:30〜22:00 connpass.com #mercariCES
01/22(火) 18:30〜21:30 stripejp.connpass.com
01/23(水) 19:00〜22:00 hatena.connpass.com #hatenatech
01/24(木) 19:00〜21:00 codechrysalis.connpass.com
01/25(金) - なし
01/26(土) - なし
01/27(日) - なし

今週は土曜日から旅行に行く予定なので、勉強会は木曜までです。

第75回R勉強会@東京(#TokyoR)

1/19(土)は「第75回R勉強会@東京(#TokyoR)」に参加してきました。

tokyor.connpass.com

f:id:kabukawa:20190114105107p:plain:w500

会場は アルトア株式会社 さん。とても明るくてきれいなスペースでした。

f:id:kabukawa:20190119140914j:plain:w600 f:id:kabukawa:20190119140940j:plain:w300f:id:kabukawa:20190119141423j:plain:w300

サッカーゲームが有るのがオシャレ(笑)


目次


Tokyo.Rとは

R言語の地域コミュニティ@東京です。

f:id:kabukawa:20190120100053j:plain

詳細は応用セッションの方で語られているので割愛。


何故参加したか

Rは以前仕事で使っていたので、知識をアップデートするために参加しました。 TokyoRの存在自体は知っていたのですが、非常に人気のある勉強会で公開されるとすぐに定員に達してなかなか参加できなかったので、参加できて良かったです。


初心者セッション

時間 発表者 タイトル
14:30~14:35 @TokyoRCommunity オープニング
14:40~15:05 @kotatyamtema 初心者セッション1 – R基礎〜データ読み込み –
15:05~15:30 @kilometer00 初心者セッション2 – Data Handling –
15:30~15:55 @koriakane 初心者セッション3~Plot & Visualization -

応用セッション

時間 発表者 タイトル
16:10~16:40 - 自己紹介タイム
16:45~17:15 @0_u0 アルゴリズムと前処理の話(仮題)
17:15~17:45 yusuke kaneko DID , Synthetic Control and CausalImpact
17:45~18:05 @y__mattu Tokyo.Rの2018年振り返りとこれから

協賛枠

時間 発表者
18:15~18:25 アルトア株式会社

LT

発表者 タイトル
@upura0 172+192+372=2019
@kur0cky_y Rでやってみたモダンな就活
@weda_654 パッケージ系のなにか
@Np_Ur_ RとKubernetes(変更の可能性あり)
@sakaue R Bootcamp 2114514
@koheiw7 テキスト分析シンポジウム「POLTEXT」のご案内

内容


初心者セッション1 – R基礎〜データ読み込み –

@kotatyamtema さん

インフルエンザに罹患したということでこのセッションはキャンセルされました。


初心者セッション2 – Data Pipeline –

@kilometer00 さん

speakerdeck.com

最初のセッションということで初心者セッションについての説明も少しあって、そのなかで印象的だったスライドを2枚貼っておきます。

f:id:kabukawa:20190120100359j:plain:w300 f:id:kabukawa:20190120100414j:plain:w300

内容メモ

データパイプライン
入力と出力の間にある処理

色々なパッケージを使って処理
スパゲティコードにならないようにしたい

コーディングスタイル
R coding  style guides

Common Nameに注意してコードを書こう
3日後の自分に向けて書く

RStudioおすすめ

vector
named list 名前付きでリストを作成できる
data.frameはnamed listの特殊形態
結果表示時に違いが出る
matrix 名前がない
data.frame 名前がある Variable, observation

Tidy data
一つのobservationには一つの意味を

縦横変換する関数 tidy.gazaer
nest
Horizontal
gather ↓↑spread⇔nest unnest
Vertical

pipe
便利

名詞に値
動詞に関数

関数は動詞

dplyr色々できるけど、5つの動詞に絞り込んでいるのが重要
選択肢を制限することでデータ解析のステップをシンプルに考えられる。

より多くの制約を課すことでより自由になる。

自分の頑張り次第で世界は広がる

RのStyle Guideのリンク

google.github.io

style.tidyverse.org

adv-r.had.co.nz

5つに絞り込まれた動詞

f:id:kabukawa:20190120101050j:plain


初心者セッション3 – Plot & Visualization –

@koriakane さん

speakerdeck.com

内容メモ

取り込み、加工はできるようになったので。
Rの可視化の話。

データを確認しておく
summery()で概要確認

可視化
plot()
hist()

plot() で散布図
x軸の値とy軸の値を引数に指定するといい感じに可視化してくれる。

色の変更
軸名変更
凡例(plot()関数の直後でlegend()関数で指定)
マーカーの指定定数は?plot()で確認できる

ggplot2
キャンバスを用意して重ね書きするイメージ。
カスタマイズ楽
それっぽく作りやすい

tidyverseの仲間なので列名に$を付ける必要はない

折れ線グラフ
散布図は簡単にかけるけど、折れ線グラフはつまづきやすい
色の指定方法などは散布図と一緒

plotで折れ線グラフを書く日はtypeにlを指定
日付を指定するには最初に軸を非表示にして表示後に日付変換してから軸をあとから書く

matplot()を使うと複数データを描画できる。

ggplot2
geom_lineを使う
tidyなデータを可視化するものなので加工が必要

単位の違うデータを追加する場合
scaleパッケージのrescale関数を使う

応用セッション1 –宇宙が生まれる前の話 –

@0_u0 さん

github.com

内容メモ

Rの古代史。
R1.00からの話

デモあり
日本語入力をすると落ちる

演算子は"%(好きな演算子の名前)%"として定義できる。

igjit.github.io

@0_u0 さんのブログエントリ

socinuit.hatenablog.com


応用セッション2 – DID , Synthetic Control and CausalImpact –

yusuke kaneko さん

www.slideshare.net

内容メモ

DID Diference in Deference
並行トレンドを仮定して推定

最低賃金を上げると雇用が減る
→データから検証する

並行するデータの選択が恣意的にならざるを得ない
元データの状態を排除できない

テロとGDPの関連
Synthetic Control
対象群の主観性を排除可能
推定値の信頼性
極度の活かし意外装置を排除できる
問題
対象群の数が多くないといけない
重みにおける制約
この問題を解決するために
CousalImpact

対照群が必要ない
データ取得の制約によって適切な対照群が得られないケースも有る
問題
構造変化のショックに弱い

応用セッション3 – Tokyo.Rの2018年振り返りとこれから –

@y__mattu さん

内容メモ

2018年 8回実施
70以上の発表
50以上の発表者

2018年に体制が変わったことの話
Rのカンファレンスでコミュニティの発表があるので、今回から入れてみた。
今の運営体制本格始動
RConsortium
有料化
など

人気イベントになったTokyoRの運営について
運営を創始者一人でやっていたので回らなくなってきた
→今の体制に2017年の冬に移行

Twitterアカウント作成
メールアドレス作成
初心者セッションは運営で回す
応用セッションは公募。いなければ直接依頼。
発表者は無料
次回開催日のアナウンス
無理に月1でやらなくても良い
テーマを決めてやってみる

R Consortium
RStudio社が支援
小さいカンファレンスを支援
規模と開催回数で支援金額が決まる
meetupで公開したら多めに支援。だけど他のサイトでも支援はしてくれる。

ATND→Connpass
ATNDは先着順だった。キャンセル率1,2割

勉強会早押しおじさん
無料だから登録する人
当日ドタキャン

抽選にする
有料にする

財政難
懇親会参加者からしか徴収しないためにこれにあまりお金を当てられない

ハドリー(Rの神)が東京に来ることになった。

発表を聞くだけの人も有料にする
paypalと連携できるConnpassに変更
受付で現金のやり取りをしなくて済む
参加者も運営もハッピー

銀行口座を作る
任意団体として口座を作る
団体規約などの書類が必要

団体規約

Rってなんですか?
プログラミング言語ってなんですか?
皆さん集まってなにをしているんですか?

普通の人はわからない
僕らはTokyo.Rで集まってなにをしているんですかね?

これからのTokyo.Rの話をしよう

今の体制を踏襲
発表者の募集はGoogleフォームで
参加者の募集はConnpassで
会場募集
企画者もやっていく
 初心者セッション
 Python特集
スピンオフ企画

これまでもこれからもTokyo.Rはゆるいコミュニティ

スポンサーセッション

www.altoa.co.jp


LT1 – 172+192+372=2019 –

@upura0 さん

speakerdeck.com

内容メモ

2019は素数か
primeパッケージで確認できる
素数ではない

20190119は素数か?
素数ではない

6通りの組の3つの素数の2乗の和で表せる最も小さい数字

@upura0 さんのブログエントリ

upura.hatenablog.com


LT2 – Rでやってみたモダンな就活 –

@kur0cky_y さん

[資料は公開されたら追記します]

内容メモ

就活を自動化したい

企業分析
自己分析
エントリー
ES

企業分析をする
クロールの話
風通しのいい会社は法律を守らない???

LT3 – Rオジサンに捧ぐ–

@weda_654 さん

plotnineですよ.ipynb · GitHub

内容メモ

Pythonの話

良くないところ
前処理、可視化が😺
Rとは違う

いいところ
APIなどがキレイで整備されている
R、tidyversありがとう

良くないところをどうするか?
慣れる
チートシート
作法などの輸入

plotnineパッケージを使うとRのggplot2と書き方が似ている
最高やんけ

LT4 – RとKubernetes

@Np_Ur_ さん

drive.google.com

内容メモ

本の紹介
「RとShinyで作るWebアプリケーション」

DockernizeされていればRアプリケーションを簡単に展開して動かせる
RアプリケーションをShinyでWeb API化してKubernetesにデプロイすると簡単に動かせてよいのでは?という話

RとShinyで作るWebアプリケーション

RとShinyで作るWebアプリケーション

  • 作者: 梅津雄一,中野貴広
  • 出版社/メーカー: シーアンドアール研究所
  • 発売日: 2018/11/07
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る


LT5 – R Bootcamp 2114514 –

@sakaue さん

[資料は公開されたら追記します]

内容メモ

RBootCampの紹介
分析を実際に手を動かして体験する
終わるまで帰れない

誰でも参加できる
残り4席
受講料 63000円

www.rbootcamp.org


LT6 – テキスト分析シンポジウム「POLTEXT」のご案内 –

@koheiw7 さん

[資料は公開されたら追記します]

内容メモ

POLTEXT
Political Text

テキスト分析で政治の研究をする

9月14,15で早稲田大学でカンファレンスをやる

quanteda.org


まとめ

少し時間は長かったですが、とても濃い内容で、有意義な時間を過ごすことが出来ました。 途中で自己紹介タイムが有ったのですが、参加者の属性も多様で、Rって結構色々なところで使われているんだなというのを実感できて良かったです。 Pythonに押され気味という感じもありますが、こうして土曜日にもかかわらず沢山の人が参加(しかも有料)する勉強会が開かれていること、そしてその発表内容も情熱というかR愛が伝わってくるものばかりで、圧倒されました。 なにより、発表者はもちろん、参加者の皆さんもとても楽しそうに聞き入っていて、良いなぁと思いました。 このあたりは運営のスタッフの方の力も大いにあると思います。 楽しいイベントをありがとうございました。

参加できてよかったと思います。 できれば次回も参加できると良いなぁ。。。

日本OpenStackユーザ会 第41回勉強会

1/18(金)は「日本OpenStackユーザ会 第41回勉強会」に参加してきました。

openstack-jp.connpass.com

f:id:kabukawa:20190114103445p:plain:w300

会場は KDDI Digital Gate さん。初めて行きましたが、広くて素敵なスペースです。

f:id:kabukawa:20190119110931j:plain:w600 f:id:kabukawa:20190119110942j:plain:w300f:id:kabukawa:20190119110950j:plain:w300

会場の真ん中あたりにどーんと卓球台が!というツイートをしたらMS社の卓球ガチ勢の方からメンションきた(笑)

ぜひMS社にも卓球台を入れてください。写真撮りに行きます(笑)


目次


日本OpenStackユーザ会とは

グループの概要から引用します。

日本でクラウド基盤OSS「OpenStack」の普及を目指すユーザグループです。

openstack.jp

OpenStackというのはこちらです。

www.openstack.org

オンプレ上にプライベートクラウドを構築できるソフトウェア群です。


何故参加したか

1年くらい前に37回の勉強会に参加していて、約1年ぶりの参加になります。 パブリッククラウドは始めやすいけど、コストも掛かるのでそれを抑えるためにオンプレにプライベートクラウドを構築しているという企業もありますし、最終的に何処に収斂するのかはともかく、知っておいたほうが良い技術だと思っています。


タイムテーブル

時間 内容 発表者
18:30~ 受付開始
19:00~19:05 各種案内
19:05~19:40 OpenStack Swiftとそのエコシステムの最新動向(仮) NTT 露崎さん
19:45~20:20 OpenStack Swiftの性能改善に向けた取り組み紹介 NTTテクノクロス 須田さん
20:25~20:45 OpenStack コミュニティゴールと状況 (これまでと今後) NEC 元木さん
~21:00 解散

内容

OpenStackのプロジェクトで、オブジェクトストレージを提供するSwiftに関する最新動向と性能改善に関するセッションが1本ずつと リリース毎に決められるOpenStack全体の目標である「Community Goals」についてStein版の紹介セッションが1本で合計3セッション。 どのセッションも実際にOpenStackのコンポーネントを開発/運用している方が話されているので、裏側の実装の話などが聞けて個人的にはとてもおもしろかったです。 あと、セッションの資料が始まる前に共有されているのも、事前にどういう内容が話されるのかが分かってとてもいいなと思いました。


OpenStack Swiftとそのエコシステムの最新動向(仮)

NTT 露崎さん

www.slideshare.net

OpenStack Swift www.swiftstack.com

内容メモ

Swiftのアーキテクチャ

  • スケールアウト
    プロキシ層とストレージ層

*メンテンスが楽
オートヒーリング

AWS S3互換API

  • 基本的なものは結構使えるようになってきている
  • 但し、S3とSwiftではアーキテクチャが異なる部分があるので、そういうものは非互換のまま Known failer としている。

Swiftでのコンテナ

  • Docker Containerではなく、S3 Bucketに近い概念
  • リストを高速に取得するための仕組み
  • データはSQLiteで分散保持されている

ProxyFS

  • ファイルシステムとオブジェクトストレージで空間の共有が可能。
  • 詳しくはデモで。
  • オブジェクトストレージの空間をファイルシステムにマウント。
  • これによってアップロードしたファイルを通常のファイルと同じようにエディタで編集などができる。

個人的には、ProxyFSが面白いなぁと思いました。


OpenStack Swiftの性能改善に向けた取り組み紹介

NTTテクノクロス 須田さん

www.slideshare.net

内容メモ

OpenStack Swiftの性能について

  • 「OpenStack Swift 性能」で検索すると性能面で苦労している事例が見つかる
  • ネガティブな書き込みしかない

パフォーマンスが落ちる原因

  • メタ情報のキャッシュが溢れて遅くなる
  • 小さなファイルを大量にアップロードすると書き込み性能が10分の1に低下するという調査結果も。

性能改善パッチが作成されている。

  • FacebookのHayStackと同様の仕組み。

github.com

パッチを適用するとコミュニティでの計測結果としては

  • PUTの場合
    • 0→400万個 1.3倍
    • 400万個→800万個 2.3倍
  • GETの場合
    • 800万個のファイルを格納した状態 2.4倍

Volumeというコンテナに詰めてI/Oを減らすことで性能が改善されるという話、詰めたりパースして取り出したりというオーバーヘッドが有っても結果的には何もしないより速い訳で、面白いですね。このあたりの仕組に Apache Arrowを入れてみるともっと性能が改善できるのかもな、という妄想をしました。


OpenStack コミュニティゴールと状況 (これまでと今後)

NEC 元木さん

www.slideshare.net

コミュニティゴール、というのはこれですね。 governance.openstack.org

内容メモ

WSGI=Web Server Gateway Interface
"ウィスギ"と読むらしい。

Policy in Code
Policy:APIのRBAC(Role Based Access Control)の仕組み

Python2は Jan 1, 2020でPython Upstreamでのサポートが終了。
OpenStackとしてもそれまでにPython3で完全に動作するようにしていく方針

pre-upgrade check
アップグレード時の注意点を機械的にチェックする仕組み

Candidates for “Train” release Berlin Smmit での議論

人気があったもの * Project Resource Deletion * Finish moving legacy python-*client to pythonopenstackclient * Ensure all projects pass project-id

これだけのプロジェクトなのでガッチリしたルールが有るのだと思っていたら、割とおおらかな感じで運用されていたんですね。

なお、セッション後のQAなどはこちらのページに纏められています。

etherpad.openstack.org


まとめ

知らないことばかりだったので、聞いていて「そうなんだ」という驚きの連続。それがとても楽しかったです。 開発者として参加している方が多い感じがするというのも印象的でした。 お酒で懇親、ということもなく、ガチな勉強会なのでタダ飯目的の人も居ないので、安心して参加できるのもいいなと思いました。

f:id:kabukawa:20190118185153j:plain:h300

ありがとうございました!

ABEJA Platform 勉強会 - ハンズオン

1/17(木)は「ABEJA Platform 勉強会 - ハンズオン」に参加してきました。

cloudai.connpass.com

f:id:kabukawa:20190114100914p:plain:w400

会場は 株式会社ABEJA さんのイベントスペース。

f:id:kabukawa:20190117191023j:plain:w600

会場自体は以前別の勉強会で来たことがありますので、迷わずにたどり着けました。(その時のイベントはこれ)

kabukawa.hatenablog.jp

白金高輪駅から地下道で繋がっているので、地上に出なくてもABEJAさんの入っているビルまで行くことが出来ます。 会場は一度来たことが有るということもあり、一番乗りしてしまいました(笑)


目次


ABEJA Platform 勉強会 とは

イベントの概要から引用します。

機械学習ディープラーニングのAI・MLOpsを実装するためのプラットフォーム「ABEJA Platform」の勉強会です。

ABEJA Platform についてはこちらをどうぞ。

abejainc.com

「AIの導入・運用実績を元に、実産業で活用できるAIを実装するためのノウハウをプラットフォームとして提供」してくれるというサービスですね。

f:id:kabukawa:20190114102408p:plain:w500

PoC時はともかく、運用周りとかは実際にAIを使っていく時には運用周りとか結構やることはあるのに、そのあたりが考えられてない事は多いと思うので、こういうサービスは必要だよな、と思います。もちろん、こういう仕組みをクラウドを使って自前で構築することも可能ですけど、せっかくPoCで素早く回そうとしているのに実運用にするための仕組みづくりに時間がかかったら意味ないじゃん、と。そういう時に予め用意された「ABEJA Platform」のようなプラットフォームに乗る、というのも選択肢の一つとして大きな意味が有ると個人的には思います。


何故参加したか

今は自分でAIのシステム開発をしているわけではないので、聞かれた時に答える、提案のための自分の引き出しを増やしておきたいというところが参加の動機です。 運用だったり、モデルを再学習してデプロイして、というようなサイクルは、システムにする上での大事なポイントだと思うので、そういう意味でも興味がありました。 どういうフローとか仕組みになっているんだろう、というところですね。


タイムテーブル

時間 タイトル 登壇者
19:15 受付開始
19:30 会場説明
19:35 ABEJA Platformの概要説明
19:50 ABEJA Platformハンズオン
20:45 成果発表!! みんなでできた/できない、tipsをシェアします
21:00 懇親会 軽食・飲み物を用意する予定です。
22:00 解散 みんなで片付けをします

内容

ハンズオン、ということで講師の話を聞きながら黙々とPCに打ち込む、という感じの流れを想像していたのですが。。。

取り敢えず乾杯して飲みながらスタートでした。やっぱり楽しくできるのが一番ですね(笑)


ABEJA Platform の概要説明

さらっと紹介されていましたが、資料は公開されていないようなのでこんな感じの説明があったというのを貼っておきます。

ABEJA Platform の周辺(エッジ、既存データ、他プラットフォーム)との連携

f:id:kabukawa:20190118112348p:plain:w500

ABEJA Platform の提供するAIの継続的インテグレーション

f:id:kabukawa:20190118112530j:plain:w500

AI開発、運用時の課題とABEJA Platform の提供するソリューション

f:id:kabukawa:20190118111731p:plain:w500


ABEJA Platform ハンズオン

こちらの記事を使って、ABEJA Platform の管理コンソールの操作に慣れつつモデルのデプロイ、WebAPI化といったところを体験する流れでハンズオンが行われました。

qiita.com

手順は上記の記事を見ながらやれば最後まで行けると思いますので、自分がやったこととハマったところを書いておきます。


環境周り

  • PC ハンズオンなのでPCを持ち込む必要があります。
    Macの方が楽だと思います。でもMac持ってないので自分はWindows10のWSL(Ubuntu 18.04 LTS)環境で参加しました。 後で出てきますが、WSLだと若干の制限があります。

  • Webブラウザ
    特に説明はありませんでしたが、管理コンソールを使う関係上Chrome最新バージョンをインストールしておく必要があるようです。
    個人的にはChrome使いなので新しくChromeをインストールするようなことはしませんでした。
    他のブラウザの人が居なかったので分かりませんが、たぶん画面表示が崩れるとかそういう問題が出る可能性があるのだと思われます。

  • プログラミング言語
    MacLinuxPythonが動く環境が必要。 自分はWSL(Ubuntu 18.04 LTS)にPython3.5をインストールして参加しました。WSLは他のハンズオンなどで入れたライブラリなどの影響が有ると嫌だったので環境をリセットしたうえで、開発関連のツールチェーンも必要な気がしたのでこんな感じでパッケージを追加しました。

$ sudo apt -y install build-essential python3 python3-pip python3-dev

ABEJA Platform 管理コンソール

ログインする時のID等はハンズオン参加者向けに用意されています。 ただ、幾つか最初にやっておいたほうが良いと思われる設定があるので、それを書いておきます。

  1. 日本語表示
    ログイン直後はデフォルトで英語表示なので、日本語表示にしたほうが分かりやすと思います。
    f:id:kabukawa:20190118131733p:plain

  2. サイドメニュー デフォルトでアイコンのみになっていて分かりづらいので、慣れるまではキャプション付きにしておいたほうが良いと思います。
    f:id:kabukawa:20190118132008p:plain
     ⬇
    f:id:kabukawa:20190118132021p:plain

  3. モデルやデプロイの名前
    モデル作成やデプロイなどで使う名前は任意(但し同じ名前は付けられないようです)で付けることが出来ます。
    ハンズオンは10人位でやるので、何も考えずにつけると一覧画面で自分のモデルやデプロイを探す時にちょっと困ります。
    ただハンズオンでは全員が共通のIDで作業しているので自分のモデルだと分かりやすいように名前や日付などを入れるなど、工夫したほうが良いと思いました。

  4. パーソナルアクセストーク
    IDは共通なので誰かが一人作成すればいいと思います。
    各自で作成する場合は、モデル名と同様にトークン名にも名前や日付などを入れるなどの工夫を。
    作成を実行して「正常に作成が行われました」というメッセージが表示されても、ユーザー情報のメニューににパーソナルアクセストークンが表示されない場合、管理コンソールのページ自体を再読込すると表示されるようです。パーソナルアクセストークンの一覧ページで確認することもできます。


ハマりどころ

あくまでWSL(Ubuntu 18.04 LTS)環境での話ですので、その点ご了承ください。

  • pythonコマンド
    Python3系を使うので、スクリプト等を実行する時のコマンドを読み替える必要があります。(エイリアス付けても良いのかもしれませんが自分は明示したいので意図的にそのままにしてます)
手順に有るコマンド WSL環境で打つコマンド
python python3
pip pip3
  • wgetコマンド
    自分のWSL(Ubuntu 18.04 LTS)環境では問題なかったのですが、Macの場合はwgetコマンドがインストールされていない人が何名かいらっしゃいました。 brewでインストールしてもいいと思いますし、URLをブラウザのURL欄に入れてダウンロード/表示したものを保存でも問題ないと思います。

  • パッケージ
    手順で出てくるコマンドが入っていなかったので追加しました。

$ sudo apt -y install zip jq
  • pipパッケージ
    Chainerのサンプルを実行する時にこんなエラーが出るので、言われたとおりmatplotlibをインストールします。
$ python3 demo.py cat.jpg
Traceback (most recent call last):
  File "demo.py", line 2, in <module>
    import matplotlib.pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'
$ pip3 install matplotlib
  • 猫画像
    Chainercvのサンプル実行時に、コマンドラインの引数に猫画像(cat.jpg)を指定しますが、そもそもこの画像が何処から出てくるかが手順にありません。 自分はネットで猫画像を適当に検索してダウンロードし、それを cat.jpgという名前に変更しました。
$ wget http://psnews.jp/cat/uploads/2017/02/cat-1646566_1280.jpg
$ mv cat-1646566_1280.jpg cat.jpg
  • デモ実行時の警告
    WSL(Ubuntu 18.04 LTS)環境では cv2 が無いという警告が出ますが、取り敢えず動くのでここでは気にせず。
/home/kabukawa/.local/lib/python3.6/site-packages/chainercv/utils/link.py:60: RuntimeWarning: cv2 is not installed on your environment. Pretrained models are trained with cv2. The performace may change with Pillow backend.
  RuntimeWarning)
/home/kabukawa/.local/lib/python3.6/site-packages/chainercv/transforms/image/resize.py:33: RuntimeWarning: cv2 is not installed on your environment. ChainerCV will fall back on Pillow. Installation of cv2 is recommended for faster computation.
  RuntimeWarning)
  • デモの結果画面
    Chainercvのサンプルは結果を Matplotlibを使って画面(ウィンドウ)表示するのですが、WSL(Ubuntu 18.04 LTS)環境ではX-Windows上でやらないと表示できません。 (しれっと画面表示しましたという体でコマンドラインは正常終了)
    ちゃんと処理しているのかを確認したければデモのソースにちょっと手を入れます。demo.pyの37行目あたりに以下のコードを追加すると、サンプルのモデルで画像を推論した結果が表示されると思います。
    最初が候補、次が推論結果のインデックス、最後が評価が正しいと思われる確率です。インデックスは0オリジンなので cat と評価されていることが分かります。
    print(voc_bbox_label_names)
    print(label)
    print(score)
('aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor')
[7]
[0.9995179]
  • 犬画像でも
    これだけだと信じられないと思うので、犬の画像でもやってみると、ちゃんとそういう結果(インデックス11なので dog )が表示されます。
$ wget https://www.min-inuzukan.com/images/dog_img_miniature-dachshund.jpg?18102302
$ $ mv dog_img_miniature-dachshund.jpg?18102302 dog.jpg
$ python3 demo.py dog.jpg
('aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor')
[11]
[0.9995899]

まとめ

デモで実際に動かしてみて、大まかな流れは理解できた気がします。 取り敢えずインフラのことは気にせずモデルをAPI化して使えるようにできるというのは、簡単そうに見えるけど結構面倒なことだと思うので良いなと思いました。

死活監視はAPIのエンドポイントを使ってやれば良さそうですね。ログやメトリクスについては気になっていたのですが、ABEJA Platform 側にログやメトリックの機能があるのでそれを使うか、SDKに実行ログを取得するものが有るようですのでそういったものを使ってコントロールする感じになるようです。ドキュメントにそれらしい関数などの記述も有るので興味があれば読んでみると良いかもしれません。

developers.abeja.io

ハンズオンとしては色々ハマったところもあったものの、最後まで行けたので個人的には参加してよかったと思っています。

仕事で使うにはどうしたら良いのか、という視点で参加したので、全体的な流れがイメージできたのはありがたかったです。 事例なども含めて、もっと詳しく知りたいと思ったら、こちらのイベントに参加してみるのもいいかと思います。 (僕は申し込みましたので、参加予定です)

six.abejainc.com

どちらかと言うとビジネス寄りのイメージだったので個人で参加するのはちょっとドキドキしたのですが、凄く雰囲気も緩やかで楽しく学ぶことが出来ました。

f:id:kabukawa:20190117185448j:plain:h400

講師、スタッフ、参加者の皆様、ありがとうございました!

あさこ姐さんにゆもつよメソッドを語る夕べ

1/16(水)は「あさこ姐さんにゆもつよメソッドを語る夕べ」に参加してきました。

kataruyube.connpass.com

f:id:kabukawa:20190114094924p:plain:h200

会場は メソニック39MTビル 11F のイベントスペース。


目次


語る夕べ とは

ちょっと探してみたのですが、これだという記述を見つけられなかったので、リンクを貼っておきます。

kataruyube.connpass.com

scrapbox.io

今回のテーマもそうですが、過去のテーマなども見てみると、テスト管理や設計、分析などテストを中心とした範囲を学ぶことを目的とした勉強会のようです。 こういった勉強会は探してもあまり見つからないので、結構貴重な場なのではないかと思います。 結構頻度も高く月に何回か開かれている、というのも凄いと思います。 ここ最近の開催を見てみると月に3回から4回開かれていて、とても活発なコミュニティですね。


何故参加したか

あまりテスト管理について、現場での経験(まぁ、やらされたということですが)はあってもきちんと学んではいないので、そういう話が聞ければ良いなと思って参加しました。 テストについて語る会、面白そうじゃないですか。 ついでに言うと、僕はRedmine.Tokyoという勉強会によく参加するのですが、そこのRedmineエバンジェリストの会にも所属するあさこ(@acha_821)さんに語る、ということで参加したという理由もあります。 「が」ではなく「に」語るというのは一体。。。。(笑)


内容

テーマにある「ゆもつよメソッド」というのはこちらの資料に書かれているものです。

www.slideshare.net

作者の湯元さんの解説はこちら。

note.mu

この「ゆもつよメソッド」について「本人とは関係なく勝手に」語り尽くすイベントとは凄いですよね。しかも2時間(笑)

これはつまり、予習が必要になるやつですね!


当日の様子

トゥギャられているので、そちらのリンクを貼っておきます。

togetter.com


「ゆもつよメソッド」について

語る夕べ、というコミュニティ名が表すとおり、基本的には話したい人が話したいことをしゃべる感じで、分からないことがあれば随時聞くようなスタイル。

テスト方法論などについてある程度の知識があれば凄く楽しいと思いますが、最初に参加者のレベル感を確認してから説明をしてもらえるのでテストについて詳しくない人でも楽しく聞けるのではないかと思います。僕もあまり詳しく知らないで参加したのですが、これまでなんとなくでやっていたことが整理されていくように感じて、とても勉強になったし、面白いなぁと思いました。

肝心の内容は資料に書かれているので公開されたらリンクを貼ります。

以下は聞いた内容のメモ。

テスト戦略を二人で盛り上がっても良いんだけど、それを他の人にオープンにしてもいいかな?と思って始めた。
話す人が話したいことをしゃべる。
聞く人を満足させようという意志はない。

テストカテゴリ
テスト分析マトリックス(ピボットテーブル)
テストマトリックス

テストカテゴリ
飛び道具、必殺技
マインドマップを納品物としていた。
→納品物にならない
納品物にならないものを書くのか?
多くの人が普通だと思わないものを取り入れるのは難しい

湯も強メソッドは組織に対する違和感が少ない

ドキュメントフォーマット
論理的構造
テストカテゴリ
仕様項目特定パターン
テスト分析マトリックス

ドキュメントフォーマット
テスト分析とテスト設計を1つのシートにまとめて書ける
複数の文書を作りがちだけど後で継続できない
ドキュメント一つというのは評価が高い

組織標準を作る人達がコンサルのフィーを払う
現場は払わない。

テスト分析とテスト設計を一つにまとめられると言われるとみんな飛びつく
その会社の標準にするかどうか
キーファクターにするかどうか

ドキュメントなど好きに書けばいいじゃん
→実際にはそうでもない

HAYST法の目的
市場に透過したときの不具合を減らしたい
際を狙うための道具立て
普通のバグを出したいという目的ではない
普通のバグ検出はきちんと開発プロセスを回して検出する
それなりに動くものに対して適用するのがHAYST法

VSTeP法
複数のやり方を比較検討するためのプラットフォーム
合意形成の道具立て
やりきった感を味わうための道具立て
どこかのバグを見つけたいというよりは現場の知見を最大限に発揮してバグ検出をする。

バグを叩き出すのが目的

ゆもつよメソッドの作られた目的
テストチームのレベルを合わせること
バグを叩き出すのが目的ではない
難しい用語を使ったりはできない。
レベルを上げたいのではなく揃えたい
成果物のレベル
粒度、ばらつきを抑えたい

チームのレベルを合わせるためのテクニック
ドキュメント
指定のドキュメントがある。ただしばらつきがある。

ゆもつよメソッドのプロセス

プロセスとアクティビティ
計画
分析
設計
詳細設計

分析
テストタイプ
テストカテゴリ

各アクティビティは2~4のタスクで構成されている
仕事をするときの要件定義が必要

ゆもつよマトリックスが有名
縦軸にフィーチャー、横軸にテストタイプを並べる
ただしアクティビティの中にこのタスクはない。
何故か?
検算だから

テスト分析とテスト設計の違い
方法論によって微妙に区分けが違う

ゆもつよメソッドでは
テスト分析
 テスト対象のフィーチャー
 →テスト条件を作成
テスト設計
 テストケース

ゆもつよメソッドでいうテストケース
 いわゆる大中小項目で分類したものではない
 パラメータと値でテストケースは生成される
 テストパラメータ 値 アクション 期待結果
 ここで言うテストケースは値まで入っているレベル

テスト条件はパラメータを出しておく?
そこは相手の会社によってゆらいでいる
テストの世界では因子と水準が挙がっていることがテスト設計
どうテストするかはテスト詳細設計で書く

テスト分析のアウトプット
仕様項目の特定と列挙
期待結果の特定と列挙
テストパラメータの列挙

ゆもつよメソッドではテスト条件とは言わない
仕様項目と期待結果

テスト設計のアウトプット

VSTeP法でもパラメータと値がテスト項目のスタイル

テスト標準が自社にある会社は少なそう
テストにモデリングを導入するのはハードル高い
モデリングなんていうと新人ぶち込めないじゃんとか言われる
普通。稟議書を書きやすい
シンプル
PFDで書かれているけど見にくいので直列に直した

アクティビティを説明するのが普通だけどゆもつよメソッドでは概念と手法を先に説明する

テスト条件にこだわりがある?

ゆもつよメソッドのテスト分析
テストタイプ
機能テスト、使用性テスト、回帰テストのように特定のテスト目的に焦点を当てている
確認したい品質とテスト対応を組み合わせている

品質特性とテストタイプは異なるもの
信頼性テストとテストタイプ
品質特性とテストタイプは多対多。よもつよメソッドでは一対多

テストタイプはプロジェクトのたびに1から作るものではない
標準があるから特定という言い方をする。
組織標準にあるものから選ぶ。
各組織にあるものを選択する。
ゆもつよメソッドの中にテストタイプを作るというタスクはない

VSTePは毎回1から作る

テスト目的に合わせてテストタイプを選ぶ

計画 テスト目的の設定
分析 テストタイプの特定

TISが公開したテスト種別&テスト観点カタログを参照しても良い
親切じゃないけど説明はあるので使えないことはない
ただし目的には合わない、物足りない事はあるかも

性能テストと負荷テストを区別していない組織も多い
組織によっては区別していないところもある

同時アクセスが少ない状態:性能テスト
同時アクセスがピーク時の性能要件:負荷テスト
ピークを超えて同時アクセスをするとき:限界テスト

テストタイプは組織によって違う可能性がある
固定で持ってしまうとうまくいかないこともある

様々な業種業態の組織を相手にする場合はテストタイプを固定にするとうまくいかない可能性があるけど、通常は固定でもそれほど問題にはならない。
どちらかといえば予め決めておいてそれを選択するという方法は効率的(リーズナブル)
場面によって使い分けが必要。

テストカテゴリ
テストタイプと事象の間の距離がありすぎ
同義語なのでは?と混乱する
テストしたいなにかを導くなにか
テストケースを束ねたもの

ゆもつよメソッドの中では区別する

テストタイプは組織標準なので汎用的なもの
テストカテゴリはプロジェクトに合わせたもの
テストタイプとテスト条件の中間に位置づけられるもの

フィーチャー
フィーチャー一覧:テスト対象の網羅性を確保するために使用する一覧表
機能要件だけではなく非機能要件も含んだもの
一覧表を作るが、結局マトリックスのフィーチャーとして並ぶもの

コンポーネント
モジュール
システム

第三者検証機関ではスコープを顧客と合意するための道具立てとして機能一覧を使う
機能仕様書の目次一覧と同じ事が多い

これとフィーチャー一覧は違う
該当するテストレベルの粒度で機能を整理する
機能一覧をばらして再構成する必要がある
→これはかなり難しい

機能一覧を再整理する

機能カテゴリ
機能一覧から生成する
このやり方(変換ルール)はゆもつよメソッドでは語られない。難しい。

エンプラでは機能仕様書は書かない。
システムの機能が複数文書に点在して書かれていることがある
テーブル仕様書の備考欄に書いてあったりする
点在している機能をひとまとめにすることがゆもつよメソッドのフィーチャー一覧

機能一覧をリファクタリング

論理的機能構造
処理がブラックボックスなので参照モデルを使っている

入力調整 変換 貯蔵 出力 サポート 相互作用

論理的機能構造はフィーチャー一つ一つに含まれる
http://jasst.jp/symposium/jasst15tokyo/pdf/B2-3.pdf

ソフトウェアの参照モデル

VSMもよく使われる

テストカテゴリ
テスすべきフィーチャーを抜け漏れなく多面的に見るための概念
テストカテゴリを抽出するための取っ掛かり

テストカテゴリはチームのみんなで合意を取る
成果物のレベルを合わせる
テストカテゴリにいい塩梅に分類する

合意したけど難得してない、というケースもある

欠陥を出したいというところに重点をおいてない
バグを出すのではなく仕様をうまく分類する何か。

知識からテストカテゴリを導出する

テストカテゴリが抽出された後にどんな不具合が見つけられるか話し合う
テストカテゴリ

バックボーンが違うと話し合いで決めると言っても合わない

内部構造がイメージできないとうまくいかない
ドメイン知識が必要になる
どうやったら一般の人がテストカテゴリが出せるか?
テストケースをリバースエンジニアリングしないとわからないのでは?

テストケースから意図を想像で考えて、テスト観点っぽいものに割り当てる。
そうやって見るとテストカテゴリっぽいものを抽出できる
そうやることで落とし所が見つかるかも。
1000本ノックだと、研修には来なくなっちゃうかも。

意図がわからないと大変。
でもやるしかないかも。
1件1件全部リバースする必要はない

テスト条件
テストの視点からみたテスト対象の仕様項目
開発者の仕様ではなくテストウェアの仕様

テスト条件とは「テスト対象が、〇〇の場合、〇〇すると、〇〇となる」

ゆもつよメソッドのテスト条件
フィーチャー テスト対象が
仕様項目 〇〇の場合
期待結果 〇〇となる

データ入出力パターン
ゆもつよメソッドでどういうバグが取れるのか分からない
→ データフロー

テスト対象をどうみるか?
バグを見つけたいけど方法論を作れなかった。
相手に合わせて変えてしまうから
方法論にはできない
相手がどういうやり方で来るか固定できないから

システムをどう見るかに依存する

・目的ー手段の階層構造または目的ー機能ー手段の階層構造で認識する
・機能の集合として認識する ←ゆもつよメソッドはこれ
・データの流れ、データの変換過程として認識する
・刺激ー反応モデルとして認識する
・状態の変化として認識する
・写像、関数として認識する
・論理の集合として認識する
・手順、手続き、イベントの連鎖として認識する
・静的な構造として認識する

テスト対象を作った人がどういう立場かを見る

やったほうが良いけど現場は端折る。
これが抜けにつながってバグが検出できる

ゆもつよメソッドではバグを出すことができない。
→ 目的はバグを出すことではなくレベルを合わせること
 バグを取るのはその後

テスト分析マトリックス
検算
ピボットテーブル
そのあたりがテストされているかを俯瞰

巨大なフィーチャーのマトリックスに貼る
→ 全部埋めたくなる
 全部埋めたらテストしなきゃいけなくなるけど、工数的に無理
 数字を見て少ないところを補足するための方法

テスト分析対象を俯瞰
対象の俯瞰
工数見積

どうやって導入するか
大人数でやるのには向かない
パートナーが居ると合わせるのは難しい

まとめ

内容を僕のような初心者にも分かりやすく説明したことで予定よりだいぶ時間がオーバーして21時半くらいまで延長になってしまいましたが、個人的にはとても勉強になりました。現場に居るとこういう勉強をする機会がないまま実務としてやらなければならないという場面が多かったので、もっと早く勉強をしておけばよかったと思うことしきり。また機会があれば参加したいと思います。

参加した皆さんがとても熱心に聞き入っていて、質問とそれに対する答えのやり取りもなるほどと思いながら聞くことが出来ました。

f:id:kabukawa:20190116182841j:plain

ありがとうございました!