いもろぐ

思い立ったら書いていくスタイルで

JaSST'16 で Web.JaSSTに登壇しちゃいました!

縁あって JaSST'16 Tokyo 初日のB2セッション「Web.JaSST ~ウェブ開発のテストや戦略~」のパネルディスカッションに登壇させていただきました。

f:id:sakaimo:20160314164204p:plain

パネリスト:左から

なにこのメンツ。恐れ多いわー。。。

JaSST TokyoでWebのセッションができたのは去年(2015年)からで今回が2回目です。去年は聴講者として聞いていました。その時にも思ったのですが、Web業界といってもイメージするものがみんな違う んですよね。それだけ多様なサービスが存在するということですよね。

現時点での私の「Webサービス」のイメージとしては下記のような感じでしょうか。

  • インターネットと繋がっている
  • PC、スマホガラケーのブラウザで操作する
  • あるいはスマホのネイティブアプリとして操作する

※ 個人の感想です。もっとうまい定義はありそう。

例えばですが、

プレステやWiiがネットにつながっててもWeb系とは言わない気がするのですが、スマホアプリのゲームに関してはWebとゲームが融合されてる感じがします。そしてパネラー4人のうち2人がスマホゲーム専門ていうねw

ネットは広大だわ……

こうなってくると「Webのテスト」というキーワードだけで人が集まっても、話が全く合わないことがあります。

上記のようなジャンル(?)の違いもあるし、ビジネスとしてBtoC なのか BtoB なのかによっても違いそうです。根拠レスですが「Web業界」というと、SNSやゲームのようなBtoCのサービスがイメージされるんじゃないかなと思っています。また、プロジェクトに関わる人数や、開発プロセス組織構造や、売上やユーザー数などの規模の違いもありますよね。

今回のパネルディスカッションでは、

  • 藤澤 正通 (ネクスト)→ BtoB / BtoBtoC
  • 境野 高義 (ガイアックス)→ BtoB
  • 柿崎 憲 (ミクシィ)→ BtoC
  • 山本 健 (グリー)→ BtoC

というラインナップかなと思いました。

パネルのお題

3つのテーマ、および会場からの質問に対して各人の意見を出し合いました。

  1. Webのものづくりってテスト計画や戦略が乏しいと感じますか?その辺を強化した事例などありますか?
  2. レガシーなシステムなどで仕様書などのテストベースが乏しい場合のテストのテクニックがありますか?
  3. リリース判定などでリリース前に意見を求められた際に判断材料が乏しい場合にとる行動やテクニックなどありますか?

この記事にはパネルの中身ではなく、私自身が印象深かったことを書きます。

新規サービスにQA(をちゃんとやること)は必要か

私にとって今回のセッションで一番衝撃だったのはこの話題でした。(パネルのお題ではないけどw)

この問に対する私の回答は 「新規サービスの場合は品質よりもスピード重視して、リリースして顧客に価値を問うて、違ったらやり直す。その場合、テストしすぎてもサービスが当たるかわからないので、無駄になるかもしれない。だからQAにコストかけないのが正解じゃない?」 というスタンスです。

これに対してミクシィの柿崎さんから「残念だ」ってコメントもらったのが衝撃だったw 柿崎さんは 「サービスをブーストさせるためにQAを入れて品質を高める!」 というスタンスでした。

...このセッションが終わった後に疲れ切ってしまい、会場の前にあったドトールでホットカフェオレ飲みながらこのことを考えていたのですが、ここでもやはり議論の前提条件が違った可能性はあるなと思ったです。

私が思ってる「新規サービス」って、リーンスタートアップでいうところの「価値仮説」を検証してる段階のものをイメージしてましたが、柿崎さんがブーストしているものはすでに価値仮説が検証されている(ゲームとしてウケるとわかっている)モノで、より「成長させていく」フェーズだったのかもな、いやそうに違いない!って思い至りました。

レガシーなシステムってどんなもの?

前提条件の違いについてもう1つ。

「レガシーなシステム」をどうテストするか、というお題について、議論の終盤になってみんながイメージしてる「レガシー」が異なってるなと感じてたのですが、タイミング逃して確認コメントを挟めなかったです。。。

レガシーなシステムとは?に対しては「テストコードが無いシステム」というのは回答になり得ると思うのですが、その場の話の流れと会場の反応からは「使われてないシステム」とか「メンテされてないシステム」とか「古いシステム」というのをイメージしてる人もいそうだなと思いました。

使われてないシステムなら捨てればいいし、「メンテされてなくて古い」けど「ちゃんと動いてる」なら何の問題も無いし。ただ、そこに機能追加しようとした時に、内部品質が悪くて迂闊に手を出すとどこに影響あるかわからない、みたいなときにどうするか、ってことかと思いました。

正常系(何を持って正常というのかは自分たちで決める)だけでも自動でのE2Eテストを用意しておいて、そこから機能追加する、がいいかと思いました。E2EテストはSeleniumとかCucumberとかCapybaraとかTurnipをイメージしてます。その上で、今後作るものに対しては将来の自分たちのためにテスト書こうよ(ここでのテストは開発者が書くテストコードをイメージしてます)というのが着地点かなと思いました。

E2Eテストを用意する工数は与えられない、という現実はありそうですが、、、理想論過ぎますかね?w

アジャイルっぽくするとスマートになりそう

ミクシィの「ITS/BTS至上主義」の話はアジャイルに通じるものがあって、なんというかスマートな印象を受けました。

柿崎さんの話を私なりに解釈すると、

  • 全ての課題はチケット化され、いろんな役割の人がそのチケットに関わっていく
  • 例えば企画の人がその機能が必要な理由や背景を書いて、
  • それに対して設計・実装者がだったらこうやるよ、ってコメントして、実装し、
  • QAがそれを見て、だったらこんなテストして、結果はこうだったよ、を記入し、
  • その間、関わってる人はチケットの状況を把握していて、ズレてきたらその場で方向修正して、、、
  • で、条件が満たされたら実装完了としてチケット閉じる、と。

そうすると、最初は仕様(書)は無かったけど、そのチケットを見ればその機能に対する仕様(書)になっている、と。なにこれすごい。さらに、開発とQAだけでなく、関わる人全員が「何がどうなってるか」が把握できている、と。

弊社でもスクラムを取り入れて開発してるプロジェクトが増えてきました。チケット(ユーザーストーリー)に分けて、各ストーリーには完了条件が定義されていて、優先順位の高いものから手を付けて、割り込みが発生したら都度優先度を見直す、と。

このやり方はWeb(少なくとも弊社が扱っているようなサービス開発)とは相性がいい気がします。

最後に

私がJaSSTというイベントを知って参加するようになってから7年目。初めて参加した時の印象は組込みとかSIerの事例とかが多くてダイレクトに共感できる感じではなかったのですが、この数年でJaSSTの中にWebセッションができるし、JaSST以外のテスト界隈でもWeb系の人が増えてきている気がしています。しんすくさん がいうところの 軽量品質保証 の考え方って共感できるわー!みたいな業界の人が増えてきて、私としては楽しくなってきたなーと思います。意見交換とか事例紹介とか、もっとオープンにやっていきたいですよね!(何かを教えてもらう、というよりも、困ってることに対してみんなで解決策を出しあう、みたいな場の方が楽しそうな気がする)


クックパッドエンジニアのトークナイト〜テストエンジニアvol.2 Testing編〜 感想

2015/11/26 に行われた クックパッドエンジニアのトークナイト〜テストエンジニアvol.2 Testing編〜 - connpass に運良く(倍率3倍)参加できて、とても内容が良かったので共有します。

当日の資料が公開されましたのでリンクしておきます。

speakerdeck.com

感想

JaSST、Ques、TestingCasualに参加したことがあるのですが、品質とかテスト関係のイベントとしては今回はだいぶ新鮮というか、新しいアプローチというか、一言でいうと来て良かった。抽選に当たって良かった。vol.1ではBDDとかTDDとか、Checking(正しく動くことを確認する)視点での話がされたようで、なんで私は落選したのだろうかと。そこ(も)聞きたかったよと。

今回の発表で下記のワードが出たかどうか分かんないけど、私的なキーワードとしては

  • 探索的テスト大事 (多分このワードは発表内に出てこなかったけど)
  • フィーリング大事
  • 全員がテスター

でした。

今回の発表内容と、松尾さんからの「技術の寄った話は(勉強会などで)されるけど、人に寄った話はあまりされない」というようなコメントを聞いて、この視点での開発者-テスター両者共通のコミュニティができたら面白いなと思ったです。

今回の勉強会に対する私の感想をまとめると、「結局はユーザーの手元で(製品の形で)ユーザーがやりたいことができるのかが大事なんだから、テストする対象もユーザーに出るのと同じものでやるのが一番効率がいいし、最近の流れから言えばチーム内で役割を分けるより小さいチームでみんながいろんな役割をやれるほうが強いチームなんだからプロジェクトマネージャも企画も開発もテスターもみんなでテストすべきだし、良い(バグを多く見つける)テストをするためにはテストの時だけ頑張ればいいんじゃなくて日常の中から「なんか変だぞ」って感じるところを大事にすべきだし、そこについて追究できる文化・空気感がいいよね」 って、まとめが長くなりました。

長い上に補足しちゃいます。(ごめんなさい、こんなテンションになっちゃうくらい楽しい会でした)

「フィーリング」の話は発表資料を読んでいただければニュアンスわかっていただけるかと思いますが、そのフィーリングの感度を高めるためにやってること(朝会での開発者との会話とか、過去チケットあさるとか)ってのがあって、そういう視点が自分に無かったなーって思いました。

印象的だったのは懇親会で関さんから聞いた "全員がテスター" の話。(クックパッドの例ではないですが)開発者も1日1時間テスト(システムテストレベルの手動テストね)をする時間が持つことで、最終成果物に自分たちで責任をもつ、と。クックパッドでも同じようなスタイルみたいです。(手動テスト専任の人はいないという意味で)

語弊があったり、誤解を生じる書き方かも知れませんが 敢えて書くと、その場合のテストには(テスト設計コンテストに出てくるようなちゃんとした)テスト計画とか、テスト設計とか、テストケースすらも必要ないんじゃないかと思うのです。(何がどうなったらその機能が動いてるといえるのか、みたいな「実装完了条件」みたいのはあるべきだけど)

...という話をする時の私の前提は

  • 開発対象は週に一回リリースするWebサービス
  • アジャイルっぽい開発プロセスを採用していて
  • 開発チームは4,5人で(プrダクトオーナーは別なイメージ)
  • そのチーム内でテストOKになったらリリースする
  • テスト専任の人は1人いたりいなかったり
  • リリース後に不具合が見つかっても修正すれば即時に全ユーザーに適用される

というプロジェクトなのですが、そこに「テスコンのような"ちゃんとした"テスト設計(の活動)」が入り込む余地が無いと思っています。なぜならテストベースが(ドキュメントとしては)無い、あっても曖昧、話し合いの場で決まる、後で変わる、な上に週に一回リリースするというサイクルにマッチしないからです。

一方で「テストをする」という行為は存在するわけで「良いテスト=少ない工数でバグが多く見つかるテスト」を行う際に、テスト(設計)技法を駆使したほうがより良いテストができるかもしれないとも思っています。テスト実施者がテスト設計を知っている・身につけていることは有効かもしれないと思います。わざわざ「かもしれない」と書いたのは、テスト技法を知らない人でもバグをいっぱい見つける人はいるので、技法を知っていることとバグをいっぱい見つけられることにどれくらいの相関関係があるのか(私の体感値として)不明だからです。なので「テスト設計うんぬんよりも、全員で製品を触ってみる(というテスト)」の方が有効なんじゃないか、って思ったわけです。

※ここは誤解してほしくありませんが、今回の勉強会でそう言っていたわけじゃなく、これは「この勉強会に参加して、私が思ったこと」です。

そういうプロジェクトの進め方をする時に大事なのが、今回の発表に出てくるフィーリングというか、なんか変だぞと感じれる能力と、そこに至るまでのアンテナ感度上げる努力と、それを追究できる能力なんじゃないかと。この能力とそれをやる時間(ステークホルダーみんなで)を取ったほうが、結果として短時間でいいものが出せるんじゃないかと思った次第です。また、それを先導できる人がいたら強いチームになれると思うです。

懇親会の最後の方で(過去に弊社でもTDD研修をしていただいた) @t_wadaさんとTDD普及の話もできてとても良い時間を過ごせましたクックパッドさん本当にありがとうございます!

※ 以下、発表のメモです。スライド内の気になったところと、スライドに乗ってないコメントとか会場とのやり取りをメモりました。スライドに関しては上記の資料を見てもらったほうが確実です。

関将俊さんの発表

設計とテスト

  • ソフトウェア開発に必要なことは「設計」と「テスト」の2つ
  • テストとはバグを出すこと。エラーを見つけるのが良いテスト、という定義

CheckingとTesting

  • Checking

    • 既知の情報の確認
    • 待ち伏せ
  • Testing

    • 新しい情報を探す。未知の問題を
    • 探しに行く

感じる、壊す

「あれ、この製品、どこかが悪い気がする。。。」とか、退屈、使いにくい、不親切、、、というフィーリング →なにか悪いものがある

テストの前にフィーリングがある。「なにかおかしいぞ」を感じるの大事

私達のテスト

「感じる」

ポイントは「いつ、対象は、感じた後どうする」

いつ

  • 製品を目の前にして
    • 意外な振る舞い、使いにくさ、カッコ悪さ、過去の問題類似性
  • 朝会で話を聞いて
    • 普段の会話
    • PGの態度、言葉
      • 自信のなさ、アリすぎ
  • これまでの嫌なことから、、、

対象

感じた後どうするか

  • Feelingを理解する
    • 使ってみる、聞いてみる
  • 考えながら触ってみる
    • こうしたらどうなるか
    • こうなってたらユーザーは困るか

違和感を確信に変えていくフェーズ

松尾和昭さん

CookpadでどういうTestingをしているか。 いつだれが、どこで何をどのようにどうなるかを観察

観察する

  • いつもと違う?
    • (朝会とか)話の中で気づく。
    • 眠い、疲れた、とかそういうのを拾う
    • チーム、メンバーの雰囲気、空気、人のメンタル大事。
  • githubのissue
    • やり取りが多い
    • 関係者が多い
    • 話が複雑になってる
    • →これらの機能はエラーがおおい
  • チャット
    • 相談、話題、新しいもの、その他
    • 不具合対応とかで盛り上がってる→開発者が集中できていない
  • 席周辺
    • 人の往来、相談の回数
    • 技術基盤チームの近くにいて、そこに相談に来るときは技術的に難しいところ→その人が関わるissueを眺める
  • 製品を触る
    • 感情の変化、違和感という直感 ←人の直感は当たりやすい。コンピューターにまさる

感じ方をどういうふうに拡げていくか

  • 感じ方、知り方を拡張
    • 多彩な経験、考え、歴史、に触れる (本とかじゃなくて
    • 話す、見る、におう、触れる
  • 視点を動かして拡張
    • 大局と局所、全体と部分、組織と事業
    • 役割の切り替え、繋ぎ目(人の役割も、コードの繋ぎ目も)

何が変わるか、かわらないか

  • 変わらない、変わりにくい

    • 感性、考え方 ←25歳までに固まる。それ以降は変わりにくい
    • 変わるにはストレスがかかる
  • 変化することを知る

    • 動機(があれば変えられないことが変えられる
    • 環境(が変わると
    • 組み合わせ(が変わると  
  • ストレスを上回るだけの何かを見つけると動機付けになる
    • 振り返りの改善効果

(質問すればよかったなと思ったこと) → 社内でどれくらいこういう話ができるひと、ついてくる人、興味ある人がいるのかなー。

深谷美和さんの発表

朝会で知ること(朝会は30分~45分くらい)

  • 担当者のこと
    • 誰がどこをやってるか
  • もめていること
  • PGが混乱していること
    • チケット(実装予定)がわかりにくい
    • 実装者にきいてもわかっていない
  • PGが心配していること
    • ちゃんと作るし、ちゃんと作れるんでしょ?
    • 周りの雰囲気、声のトーン、不安、
    • 想像した心配ごとを開発者、テスターに話す
      • どんなテストをしようとしているのか

前提としてmiwaさんはコードはわからないけど、会話の雰囲気とかから感じる。その場でわからなければ朝会の後とかに聞きに行ってる。また、新人研修として、朝会で思ったことを2次会で報告することをやらせている。そこで鍛えられる、とのこと。なるほど。。。

  • 報告されたバグから多くのことを知る
    • 新しい視点
      • PGや他のテスターは何を気にしているか
      • 自分が思いつかなかったバグ
    • 知らなかった過去
      • 昔のチケットに遡る
    • 振る舞いをしり、誤解していた仕様

この辺り、miwaさんのブログ テスターは朝会から何を知るのか - CAT GETTING OUT OF A BAG に詳しく書かれてて参考になります。

Story2 あるチケットのTesting

チケットをよむ

<自分メモ> (チケットには実装要件が書かれてる。半日~二日間でできる粒度らしい)

  • 何ができるようになるのか
  • できたことはどやってらわかるのか(完了条件)
  • 実装中におきていること(実装中のことが書かれているのが前提ね)
  • 朝会とかでの情報アップデートもね

</自分メモ>

  • あやしい匂い
    • たくさん書いてある
    • 説明がコードっぽい
    • 調査中、苦戦中、、、
    • あっさりしてる、うまくいきすぎてる のも要注意

動かしてみる

チケットに書かれているテストケースを忠実に動かす

  • Checkingの気持ち
  • あまり見つからない

ファーストインプレッション

  • 初見に感じる「何か」を大切に
    • 自分の想像していたものとの「差分」
    • しばらくすると初見の「これ」を感じにくい
  • このあたりからTestingの気持ち

Testing

チケットにあるテストケース(正常系)を変形する

  • 何を与えたら、与えなかったら
  • 処理の途中を想像しながら、操作のタイミングを図る
  • 複雑なものほど丁寧に
  • 面倒なものほど落ち着いて
  • 匂いの種類、強さによってバリエーションを変える
  • などなど・・・

↑人によって得意なところが違う

関連する(かもしれない)機能との相性

  • 朝会で話題になってるところはできてる
  • 話題になってない、見えていないものを探す旅
    • 何を与えたら動くのか、それはどこからくるのか
    • 何が作られるのか、それをつかう機能、使いそうもない機能
    • 一緒につかっていたらどうなるか
    • チケットのキーワード検索(視野を広く)ひらめき

101 Things I Learned in Architecture School 「建築デザイン101のアイディア」 テストのひらめき、のエネルギーになる本だそうです。ゲシュタルトの「図と地」理論

テスターモードからユーザーモード

  • ユーザーはどんな気持ちでこれに触れるのか
  • 触れた時の手触り、見た目、全体としての統一感
  • 触れた後、ユーザーは何をしようと思うのか
  • ユーザーのユーザーのユーザー (cookpadの場合、ユーザーは料理をする人で、その先のユーザーは料理を食べる人
  • やりたいことが本当にできているのか

Q:どこでやめるのか A:時間で切る。やるべき全体に対して、勘だけどバランスとって「ここまででいいかな」で止める

過去に起きた嫌なこと

  • 自分のチームで起きたこと
    • 開発者、テスターとの会話から
    • 10年分の過去チケットから
  • 隣のチーム
  • ニュースになってること
  • 普段の生活から

これから起きるかもしれない嫌なこと

  • 朝会や日々の会話から
  • 試せない心配ごとは誰かに話す

昨日との違い

  • なんとなく遅くなったな、とか
  • 昨日は動いていたのに
  • 昨日と見え方が違う
  • 誰も触ってないけどあの機能が動かない

プログラマとの会話

  • 朝会の会話でわからないことを教えてもらう
  • 朝会で言ってなかったけど、雑談の中で聞いたら不安とか教えてくれる
  • 丁寧に教えてくれる
  • プログラマと一緒にTestingもある

プロと無職との会話

  • 直球
    • ここにバグがあるからためしてみて
  • 私のテストを止めに来るかかり

テスターとの会話

  • 気にするところが違う
  • おかしいと感じたことを同僚はどう感じるか
    • 自分が感じるおかしさ、への疑い
  • テストで会話
  • おかしさを見つけたら開発者の元へGO
    • 現象を見せる(手順を確定させなくても現象を見せる)
    • 何かを知りたがってるときがある
      • その場でTesting、再テスト
    • おかしさの原因がわかると嬉しそうに話に来てくれる

おかしさはいつどこからやってくるのだろう


まとめ

  • Feeling,感じたことを大切にしてくれる土壌
  • 人はミスをするという事実を受け入れる空気

Ques#7 メモと感想

2015/11/20(金)に六本木のヤフー株式会社で行われたQues#7のメモ。

第7回Ques : ATND

私の感想

会の全体の雰囲気として、とても良かったと思います。山崎さんの講義の中に、ワークとその結果について周囲の人とのディスカッションがあったからかな。会場の集中力が高かった気がしました。

ヤフーでのテスト支援チーム(正式名称じゃなかったらごめんなさい)の話ですが、現実として「開発チームが品質で困っている」という状況があり、「今のやり方じゃダメだ」と開発者が実感しているという状況がテストの自動化推進のポイントだと思いました。

青野さんの話もE2Eテストの自動化(画面からユーザー操作のシミュレート)でしたが、本来のアジャイルスクラムで言えば「ホワイトボックステストの自動化」が必要なわけで、ここらへんの導入・推進も気になりました。私のイメージですが、ホワイトボックステスト(つまりユニットテストというか、TDDというか、開発者が自分のためにコードで書くテスト)の導入って、結局は開発者自身が行うことなので、「支援」って難しいんだろうなと思っているところだからです。

にしても、100サービスあって支援チームが5,6人で、(全部のサービスを支援しているわけではないにしても)支援出来るだけの知識とスキルと「ガッツ」がないと実現できませんよね。。。

ベリサーブ山崎さんの「テスト分析」の話はとてもわかり易かったです。あぁ、そういうことだったのね、って思ったです。ただ、JSTQBの定義でもそうですがテストベースとしての「ドキュメント」がスタートになる一連の(分析→設計→実装...)行動なわけで、スタートアップ的なWebサービス開発(往々にしてドキュメントの作成とメンテが重荷になる)には適さないアプローチだなとも思いました。(思いましたというか前から感じてはいるのですが...)

「今の組織、チームで問題が起こっていないのであれば(プロセスをガラッと変えるようなことは)必要はない」みたいなことを話されていたのが印象的。個別の課題に対応することでOKならそれでいいよね、と。そりゃそうだよね。で、疑問に思ったのは、ということは今後のため、とか、未来を良くするため、という活動はどうなるのかな、ってのは気になりました。

(※以下、講演を聞きながらメモったので抜け漏れがあるかもしれないのと、私の言葉に置き換えているところもあるので、正しくは本人の資料を参照ください)

アジャイルとテスト自動化

登壇者:ヤフー山口さん

www.slideshare.net

チーム自らがテスト。テストだけやる人はいない。チームで決める。リリース権限はチームにある。

取り組んでいるテスト自動化

頻繁にテスト、はしんどい。それを自動化して楽する。
モバイル、Web、バックエンド(←これも頻繁にリリースしている)
全員でテストすることで品質を理解することができる

ヤフオクアプリでのテスト自動化事例紹介

登壇者:ヤフー青野さん

www.slideshare.net

自動テスト導入経緯

2015年4月ごろ、特定画面で100%クラッシュとか、古い端末、OSで100%クラッシュがリリース後に発覚。

当時は開発者+リリース前にみんなで確認。リリースは隔週。リリース時に全機能は確認できない。

Androidアプリ

  • 不具合修正→すぐ修正版リリース
  • 段階的公開機能あり→影響小さい

iPhoneアプリ

  • アップル審査が必要→時間がかかる
  • 致命的

テスト支援チームからテスト自動化しませんか?を提案
社内サービスを横断的に支援している
開発チームが支援チームに協力してもらう形

導入時ノウハウ

解決したいこと

  • iOSにフォーカス
  • 致命的なクラッシュは事前に検知
  • 主要画面もうら
  • 古いOS
  • iOS9対応に間に合う

ツールの選択

  • テスト支援チームで知見がある 結果→Appium

選択理由

  • OSS更新頻度が高い
  • 企業サポートも付いている
  • ライセンスがつかいやすい
  • クライアントが複数言語ある
  • GUIツールがわかりやすい
  • iOS,Andoroidに対応
  • テスト対象に手を加える必要が無い

テストコードを何で書くか

  • Pythonを選んだ
  • 経験者多い。誰が書いても読みやすい

対象画面

  • 主要機能の画面から優先度をつける

実行概要

  • macにgitからclone
  • スクショをとってファイルサーバーに置く
  • (メモれなかった)

苦労話

  • appium不安定 UI要素が取得できない
  • 処理の同期が取れない
  • デバッグに時間がかかる
  • アプリのUIにidが振られていない→xpath
  • 画面修正でxpathが変わる
  • pythonのunitテストドキュメントが少ない
  • 結局appiumサーバー、unit testのフレームワークをつくった
  • iOS9からxpath構造が変わった
  • appium自体のiOS対応が遅れた

導入の効果(半年くらい取り組んだ) 

解決したかったこと

  • iOSにフォーカス → OK
  • 致命的なクラッシュは事前に検知 → OK
  • 主要画面網羅 → OK (全画面の約9割をカバー)
  • 古いOS → できてない(サポート対象内だがiOS7ができていない→手動でカバー)
  • iOS9対応に間に合う → OK

やってよかった。

運用

  • 毎日1回定期実行
  • 開発用ブランチが対象。リリース前はリリース用ブランチでやる
  • 失敗したらすぐ調査、プロダクトバックログに積んでスプリントで対応

今後の予定

  • CIツールとの連携
  • 自動テストのバリエーション
  • 任意のタイミング
  • 処理の高速、並列化
  • アンドロイド対応

まとめ

  • 支援という形で背中をおされた (←ここ、サラッと言ってるけど開発チームと支援チームでいい関係ができてるんだろうなと思った)
  • 形になるまで試行錯誤
  • 毎日自動テストが実行される=安心
  • より恩恵を受けるための作業はまだある
  • (他社でも)導入ネタに使ってほしい

Q&A

Q:自動化で見る観点。何を確認しているか。画面遷移が正しいか? 例えば検索機能では、検索結果が正しいかの確認は?
A:画面遷移は見ている。検索については特定キーワードはみているが、検索結果件数とかはみてない。

Q:(テスト工数の)削減効果 (←メモしきれませんでした)
A:手動はまだ残っている

Q:チーム全員で品質を、とのことだが、意識は高かったのか
A:チームのメンバーは導入の方向は賛成だった。協力してくれている。1週間1スプリント。不具合修正は割込みタスクとして考えている。(スプリント内に収まる工数として)

Q:半年かけてやった人数
A:支援チーム2人、開発チーム1人、週一回集中して活動する。がっつりやったら一ヶ月で終わる

Q:1回のテストでどれくらいのテストがどれくらいの時間で完了するのか
A:スクショ取ると2,3時間。スクショなしで1時間くらいで終わる。

Q:支援チームがやることは?
A:必要に応じてやれることをやる。100サービスあって、全部には入れないので、極力やりかたを教えて自立してもらう

Q:支援チームは何人?
A:5,6人


概説テスト分析

登壇者:ベリサーブ山崎さん

(多分資料がアップされるハズ)

www.slideshare.net

「テスト分析」って何?どうやって説明すればいいの?

仕様書からテストケースを導出する → これは失敗フラグ

デキる人は脳内で何かが補完されている。

(スライドのP16参照)
テストベースをもとに
↓
テスト分析をして
↓
テスト条件を導出
↓
テスト設計(効果的にテストをするため)
↓
テストケースを導出
↓
テスト実装 何をテストするか
↓
テスト手順/スクリプトを導出
↓
テスト実行 作ったものを動くかどうか確認する行為

JSTQB AL「テストマネージャ」「テストアナリスト」のシラバスからわかることは、テスト分析とは、テストベースを分析して「テスト条件」を導出する作業

では「テスト条件」って何?

例)
・PWは4文字以上12文字以下の英数字のみ許容する
・PWを3分以内に連続して4回以上間違うと、アカウント5分間ロックする

この場合、

  • 文字列長
  • 文字種
  • 誤入力期間、回数
  • アカウントの状態(ロックか、正常か)

みたいのが「テスト条件」。表現の仕方はいろいろあるけど一例として階層構造にすると

スライドP27より

f:id:sakaimo:20151123001714p:plain

この場合、「セキュリティ」も「文字種」もテスト条件だが、粒度が違う。

テスト分析のメリット

  • 欠陥の早期摘出
  • テスト対象への理解
  • テスト容易性の判断 ←ここ大事。ミリ秒まで精度が求められるなら手動テストじゃ無理だよね、とかを事前に把握・共有しておく。

テスト分析の仕方(例)

  1. テストベースを3色で書き込む、読み込む、洗い出す
  2. マインドマップで思考の発散と集約
  3. ガイドとして「テスト分析の三角形」をつかう

分析結果は人によって異なる

これは大前提。一意的には決まらない。つまり「ゆらぎがある」。例えばエライ人がテスト担当者に任せておしまい、だと結果も(期待値と結果が)ブレる

だから重要なのは分析結果をレビューして、ステークホルダーとコンセンサスを得ておくこと。どんなテストをやるのか。

テスト分析を方法論化すると→出力形式が共通化できる→レビューが容易になる→テストノウハウとして蓄積できる →形式知となり組織に展開できる

方法論

  • HAYST法(ラルフチャート)
  • VSteP(NGT)
  • ゆもつよメソッド(論理的機能構造)

Q&A

Q:仕様書がない、あいまいな場合、要件は曖昧でコードはある場合、テストベースはコード。。。?
A:いい加減な仕様だと、いい加減な分析しかでない。ステークホルダーがどこまでやれば安心できるか(自分もエンジニアもそうじゃない人も)でどこまでやるか絞る

Q:どういう範囲で分析をするか。システム全体?何らかの基準で一部?
A:状況による。担保したい部分はどこか。(機能ごとで分割するとか)

Q:分割する、ということもテスト分析では?
A:その通り。システムを分割できることも分析の結果。粒度を細かくすればするほど工数がかかる。そこまでしなければ設計できないのか?


ポモドーロ・テクニックが調子良さそう

sakaimo.hatenablog.com

↑この投稿で「社内留学してます」という話をしたのが8月。そこから3ヶ月、毎日コードを書いています。実務でのプログラミング経験ゼロから始まり、すでに何度かのリリースを経て私のコードが世の中で使われてるって驚き(そしてバグってたらどうしようという不安...) ここまでの気づきとかは近々ブログにまとめます。

集中力ほしい

日々モニタと向かってコーディングしていると、集中力が長続きしない事があります。自分との勝負ではあるものの、集中力にも限界があります。

そんな中、私の隣で「ポモドーロ・テクニック」を使ってコードを書いてる新人がいてなかなか調子良さそうとのことなので、その影響を受けて真似してみました。ポモドーロ・テクニックとは簡単にいうと「25分作業して、5分休憩、これを4セットやったら長めに休憩」 のサイクルを回るようです。

ポモドーロした感想

今日は途中にミーティングがあったものの、10ポモドーロを回してみました。ちなみにポモドーロとはイタリア語でトマトの意味だそうです。今知った。

メリットとしては、

  • 今何をすべきかがはっきりする。これやってるときにあれも気になって、いつの間にかあれやってた、ということが減ります。25分で時間を切ることで、その時間に何をやって次に何をやるか、を意識できます。今やってることから派生してやることが見えたらメモしておいて別のポモドーロでやる、っていうルールにします。

  • 集中していられる時間が増える。ちゃんと時間を比較したわけじゃないですが体感値で充実感あります。ノッてるときにインターバル挟むと逆に効率下がるんじゃないかなとも思いましたが、インターバルの前後で継続した作業をするので”スイッチング”コストはかかりません。もちろん行き詰まったので次のポモドーロは別なことやる、ってことはあります。

  • 今日やったことを振り返れる。ポモドーロごとに何をやったか1行でメモしてみました。それを見て充実感に浸るもよし、無力感に打ちひしがれるもよし。ただ、「ひたすらコーディングし続けてた割には今日何やったけな?あれ?」ということは無くなります。

デメリットってほどではありませんが、

チャットのレスが遅くなります。その分集中してるわけだし、30分くらい待っててくれるだろうし、待てないくらい緊急なら直接来るから大丈夫。ポモドーロ・テクニック自体が「1人でする作業を効率よく」するものだと思うので、他の人とコミュニケーショ取りながらすすめる作業には向かないかもしれません。

まとめ

ポモドーロ・テクニック試してみて「こりゃ良さそうだな」と嬉しくなってブログ書いてみました。お試しあれ。あと1日の半分くらいをスタンディングデスクで作業すると体の調子が良くなる気がします。(夜もよく眠れるし)

テキストサイトの話

社内で任意参加による「ソーシャルメディア研修」ってのがあって、「ソーシャルメディアってなんだろう」とか「ソーシャルメディアが出てきて良かったこと、あるいは新たに生み出した課題」「その課題を解決するには」みたいなことをディスカッション形式でワークしました。その本題はここでは割愛w

研修の冒頭で「インターネット年表」みたいのがあったのですが、きっと最近の子は「テキストサイト最盛期」を知らないんだよな。(2000年くらい?←てきとー)

いくつか紹介します。(研修に出てきたというわけではなく、私が個人的に想起した「テキストサイト」です)

侍魂 http://www6.plala.or.jp/private-hp/samuraidamasii/ 今は更新が止まっています。フレームが時代を感じます。 上部にある「魂」→「最先端ロボット技術」には「先行者」の話があるので読んでみるといいです。

今も更新されていて、たまに見てしまうのが下記の2つ。

ろじっくぱらだいす http://logipara.com/ トップページのアクセスカウンターが時代を感じます。「キリ番ゲット!」なんて言ってもわからない人多数なんだろうな。管理人の「ワタナベ」さんの品の無さと自虐っぽい話が大好きです。ちなみに過去に私が怒られた「片手で打てる文章選手権」はこのサイトでネタになってたのがきっかけです。

■変人窟 http://www.henjinkutsu.net/ いろんなジャンルのリンクを紹介してくれてますが、昔はこゆのが多かったですよね。この場合リンク先の情報というよりも「この人の気になってるものが自分に合う」という基準で巡回してたように思います。

...これらは「ソーシャルメディア」ではない(一方向の情報だから)と思うのですが、確実に日本のインターネット文化を作ったサイトだと思います。こんな感じであと5年もすれば「facebook? Twitter? なつかしいwww」とかいうことになるのかもしれませんね。その先には「テキスト(文字情報)でコミュニケーションしてる時代があったのか」的なことになっていくんじゃないかなー。

Qiita:Teamを使ってる感想

↓Qiita:Teamの導入事例として、弊社の取り組みが紹介されているのですが、中に私の記事があって恥ずかしいw

日報でエンジニアが成長する。情報発信する文化作りに挑むガイアックスさま - Qiita:Team事例 - Qiita Blog



品質保証室の新人エンジニアの日報とか盛り上がってるよね。



_人人人人人人人人人_
> 新人エンジニア <
 ̄YYYYYYYYYYYY




せっかくなのでQiita:Teamについて思っているところをいくつか。

発信すると返ってくる

発信するということは、単に調べて終わりにするのと比べて何倍もの成長をすることができる

ってありますが、これは「教える」立場じゃなくて「ここがわかんない」っていうのを発信するのも意味があると思ってます。初学者の私からすると「何がわからないかを説明する」こと自体勉強にもなるので。

それに対してコメントしてもらえるのはとても嬉しい。その場で解決することもあれば、コメントきっかけで話を聞きに行って教えてもらうとか、とても学習が進みます。

周りのこと、他の人のこと

Qiitaに書かれている内容自体についての理解・共有もそうですが、もっとラフに書くことも許されてる雰囲気(ここは運用次第だけど)なので、この人が今こんなことに取り組んでるんだとか、こういう考えを持ってるんだ、とかいう情報も自由に発信しています。これにより自分のアンテナに引っかかるものがあったら話を聞いてみたり、アドバイスしたりしてもらったり、が生まれます。技術の話、勉強会で得たこととかだけじゃなく、最近読んだ本とか、おいしいお店を見つけたとか、そゆのも含めて。

Closedなのがいい

特に技術要素の共有に使われるのですが、例えばこれがオープンの場だとソースコードまるっと貼ったりできないじゃないですか。でも聞きたいことを確認するのにその情報が必要、みたいなことってあるじゃないですか。そゆのもあって、自由に聞くことができる雰囲気づくりにはいいと思ってます。それもあって「一体感」というか、社内の同じチーム(実際は別のチームだけど)感は生まれやすいのかなーと。オープンなQiita(?)は不特定多数の人が見てるけど、Qiita:Teamはあの人だ、てわかるし社内の人しか見てないのでコメントしやすいってのは大きいです。(例えば私がブログに書いてもコメントつかないけど、Qiita:Teamだとコメントつけてくれる人がいるみたいなこと)

でも結局はそこにいる人次第

Qiita:Teamを導入したらかうまくいく、ではありません。もしかしたら他にも良いツールがあるかもしれません。いずれにしてもそれを社内でうまく使っていこうという動きは必要です。弊社も@papixを中心にして、Qiitaに書くのがあたりまえだよね、情報発信はエンジニアとしてあたりまえだよね、という雰囲気を作りを進めてきています。その結果として今があると思ってます。(導入初期からいきなり盛り上がってたわけじゃない)

おかげで自分が知ったこと、得た情報をみんなにも共有しよう、っていうのが広がってきています。そこにまとめておくとあとで自分のリファレンスになる、という側面もありつつ。


最近の社外発表のまとめ

8月に社外で話をする機会が2回あったので、その報告(?)と感想を。

5minQues

Quesのスピンアウト企画として実施されたLT大会。とにかく登壇者が豪華。よくもこんなメンバー集められたなと思いました。そして私はここにいていいのかと不安になりましたw

登壇者

私の発表の概要は

  • QEっていう、技術を使ってテストするチーム(2人)を立ちあげて勉強中です。
  • テストのノウハウを持った状態で開発もできるようになったらステキじゃないかなと思ってます
  • 開発スキルを身につけるために、開発チームに「留学」してます

...という内容。5分LTなので話しきれてないところもありますが雰囲気は伝わったかなと。

印象的だったのは「開発者とテスト担当者の視点?考え方?の違いは何なのか?」という質問。社内留学を始めて1ヶ月くらい開発者として(ド初心者ですが)コードを書いている中で、テストをする時の自分と何かが違うなと感じてはいるのですが、言語化できていない状況です。その後、人と話す中でもらったヒントとして「ゼロから動くものを作るのと、動くことが前提のところからテストするのとでは役割(何をしたら褒められるのか)が違うのでは」という話は、なるほどな、と思いました。

ココらへん、同じものに対して「テストするときはこういうことを気にするけど、開発するときはこういうところに注目する」みたいな実例が言葉にできるといいなと思ってます。

あと、留学自体についてもどこかで報告せねば。

九州ソフトウェアテスト勉強会

私の相方の実家が福岡で、そこに帰省するのに合わせて(?)九州でも発表してきました。参加者は12-13人くらいでしたかね。テストの勉強会に始めて参加する人が半分くらい。また、割合として開発者のほうが多かったです。

ここでは弊社で行っている新人研修の話をしました。弊社では新卒エンジニアに向けて独自に研修プログラムを組んでいて、例えばHTML/CSS、GIT、デザイン、ペアプロ、Webアプリ作成課題、、、のようなことをやっています。その中に「QA」という枠があって、そこについてレクチャーをしています。

おそらく新卒(というか学生)は、QAという存在すら知らないと思います。プログラムを作ることは学校でやってると思いますが、それをテストする専門の人がいるんだ、へぇー、ってところがスタート。

...詳しくはスライドを見てください!

この話の本筋ではないのですが大事なところとして、スライドおよび話の中で「Webと組込みの違い」という話をしたのですが、「WebのQA」という表現について質問が出ました。

例えば「Webシステムだけど金融とか、大きな業務システムとかを扱うところもあるわけで、Webとしてひとくくりにするとそこらへんがごっちゃになってしまうのでは」という質問。

確かにその通りです。私がイメージしているものは(金融とか医療とかと比べて)「軽い」ものを想定しています。誤解を恐れずに言えば「リリース時に品質が(相対的に)低くても大丈夫なもの」とか「品質よりもスピードを重視するようなもの」になります。またはBtoCサービス、という切り方も近い気がします。(ここらへん、うまい表現が思いつかない...)

私自身が「重い」Webシステムに関わったことがないのと、Webの特性として「軽い」ものが多いしそれがウリなんじゃないかなーって感じているので、私の中では「Web=軽い」というイメージがあって、「WebのQA」って一括りにしてしまっています。

@snsk さんのいうところの軽量品質保証がマッチするような業界、、、みたいなのかな。

ということで、発表の機会があったのでまとめてみました。