もくテク「品質について悩める人の会 vol.3 ~良いテストって何だろう!?~」を開催しました

このブログでも何度か紹介していますが、弥生ではもくテクと題した勉強会を開催しています。
2018/07/12(木)には「品質について悩める人の会 vol.3 ~良いテストって何だろう!?~」を開催しました。

今回は「テストケースの品質について」をテーマとしてワークショップを実施し、以下のお題について参加者同士でのディスカッションを実施しました。
1. 悪いテストケースの要素とは?
2. 良いテストケースって何だろう!?

悪いテストケースの要素とは?

悪いテストケースの要素として以下のような意見が出ていました
◆操作手順/期待する結果の記載があいまい・定量的な記載でない
 ・いくつもの意味にも取れる表現が使われている
 ・テスト対象機能にたどりつくまでの手順がない
 ・「正しく動作すること」の「正しい」とは何?
◆テストの目的・重要度・優先度が不明瞭
 ・優先して実施してほしい箇所が後回しになる
 ・重点的に確認してほしい機能とは、異なる箇所に注力してしまう

画像は悪いテストケースの要素を付箋に書き出してもらったものです。 f:id:yayoiTech:20180723180553j:plainf:id:yayoiTech:20180723180544j:plain

悪いテストケースの要素は、本来検出されるべき障害がテストで検出されないことにつながっていくため、テストケースを改善して悪い要素をなくすように取り組んでいきたいと改めて感じました。

良いテストケースとは?

後半は前半で書き出した悪いテストケースの要素を基に良いテストケースが持つ条件を纏めて、各チームに発表していただきました。
前半も参加いただいた皆さんも同じようなことに苦労されていると感じましたが、後半の良いテストケースの条件も実体験からも共感しやすい意見が多く出ていました。
◆誰が実施しても同じ結果が得られる
 ・テストの前提条件や入力条件が明確
 ・判断基準を誰が見ても分かる

尚、ワークショップは写真のような雰囲気で想像以上に盛り上がりました。
休憩時間やもくテク終了後も他グループではどんな意見が出ていたのか、皆さん見て回っていました。 ご参加いただいた皆様、ありがとうございました。

f:id:yayoiTech:20180723180829j:plain f:id:yayoiTech:20180723180839j:plain

今後も品質をテーマにもくテクを開催しますので、今回ご参加いただけなかった人も是非ご参加ください。

次回のご案内

次回は07/26(木)に「技術、品質担当が考えるモノづくりのポイント Vol.2」のテーマで実施する予定です。
ご興味のある方は、connpassよりお申し込みをお願いします。

詳細はこちら▼▼▼ https://mokuteku.connpass.com/event/94635/

# de:code2018に参加しました!

テスト自動化チームの相澤です。
デスクトップ製品の自動テスト作成・実施をしています。
少し前になりますが、2018/05/22(火)-23(水)にde:code2018にて弊社PMが登壇 & 2日間ブースを出展しました。
私はブース担当の1人として参加したので、その様子や、見たセッションをレポート致します!

f:id:yayoiTech:20180628180106j:plain

  1. セッションについて
  2. ブースレポート
  3. セッションレポート

セッションについて

  • 「デスクトップとクラウドをつなぐモノづくり 弥生会計のプロダクトマネージャーがいろいろ語ります」

f:id:yayoiTech:20180628180015j:plain

2日目のランチセッションで、私の上司が登壇していました!
私は1日目のため行けませんでしたが、2日目に参加した後輩は見に行っていました。
内容は、デスクトップアプリと、オンラインアプリの連携のエピソードです。
セッションを見て、「苦労話が赤裸々に語られ、制作過程が見れて面白かった」とブースまで来てくださった方もいらっしゃったそうです!

ブースレポート

ブースでは最近リニューアルされたYAYOI SMART CONNECTのスキャンデータ取込デモと、 テスト自動化の説明をしていました。

YAYOI SMART CONNECT - https://www.yayoi-kk.co.jp/smart/index.html

f:id:yayoiTech:20180628180121j:plain

サンプルのレシートをスキャナーで読み込み、仕訳に変換するまでを体験して頂きました。
「レシートがどう取り込まれているのか」「推論はどう動いているのか」など、 スキャンデータ取込自体に興味を持ってくださった方が多かった印象です。
実際に弥生を使っているお客さまが「使っていない機能を使ってみたい」と来て下さることもありました。

また、エンジニアの方が多いイベントのためか、テスト自動化に興味を持って下さる方もいらっしゃいました。
弥生でどんなテストをしているか、どんなチーム編成でやっているかをお話させていただきました!
PMをしていた方に自動テストの話をしたときは緊張しました。笑

セッションレポート

  • 「Visual Studio App Center でモバイルアプリ開発/運用サイクルを高速化させよう!」

「Visual Studio App Center」という、モバイルアプリのビルド~テスト~配布を自動で行えるサービスを紹介したセッションです。
登壇者のちょまどさんに興味があったため、聞きに行きました。

とにかく発表が分かりやすかったです。 まず、"開発" → "テスト" → "公開" → "分析" (→ "開発")というサイクルで陥りがちな事象を解説。
例えば、
・開発中は、結合したら、モジュール同士がつながらない ・テスト実施で、対応するプラットフォーム数分テストををしなければならず、数が大量になる などなど…。
私も1年目の時に実装→ビルドしたら上手く動かない、という経験をしていたので心が痛かったです。

その後、Visual Studio App Centerの機能を紹介し、手動テスト vs 自動テストのデモがありました。
手動テスト→自動テストの順でデモをすると、どんなテストをしているのかわかりやすいな、と思いました。
手動と自動を対比しているのも面白かったです。

勉強会を開催します!

このブログでも何度か記事にしていますが、弥生では毎月勉強会を開催しています。 次回は07/12(木)に「品質について悩める人の会 vol.3」を開催します! ご興味のある方はconnpassからお申込みください。 mokuteku.connpass.com

JSON ServerでRestAPIのモックを作成した話

こんにちは。弥生の森です。
最近の悩みは、家のGoogleHomeが"話しかけた備忘録をSlackに送るだけのマシン"になってしまっていることです。
早く彼女に新しい仕事を振らなければなりません。

さて、今日は、JSON Serverを使用してRestAPIのモックを作成した話を書きたいと思います。

APIできあがっていないとフロントエンドの開発滞る問題

現在業務で、"社内のAPIをまとめて呼ぶAPI"の開発を行っています。
しかし、新規開発なので利用するAPIのほとんどは、開発時に完成していません。
新規でフロントエンド等の開発を行う際のあるあるだと思います。
でも、APIできあがっていないので開発できませんという訳にもいきません。
では、うちのチームはどうしていたのか。

EC2にApacheでモックサーバーをたてていた

今までは、開発者が自分ひとりということもあり、AWSのEC2上にApacheでモックサーバーをたてていました。
jsonファイルを置き、任意のURIに紐付けて、固定でjsonを返すようにしていたのです。
しかし、開発が盛り上がるにつれてチームに一人、二人と人がやってきて、モックサーバーは混雑するようになりました。
f:id:morinco25:20180619104009p:plain

モックがネックでテストはウェイト、yeah。

f:id:morinco25:20180619160824p:plain

・・・どうしよう?
EC2をコピーして各人使う?(お金かかるし・・・)
ローカルにApacheたてる?(各自やるの?手順書つくるの?めんどくさい・・・
何か、楽で簡単なやり方はないかと探しておりました。

JSON Server

見つけました。

JSON Server。 github.com

 
「30秒以内にRestAPIのモックサーバーを作るで、コーディング不要で(いやほんまに)」 ※意訳

これや。こういうの探しとったんや└|∵|┐
アイコンが可愛いですね。
 
JSON Serverは、Node.jsベースのライブラリです。
本当に簡単に、モックサーバーを作ることができます。そう、30秒で。(ほんまに。)
それではその手順をみていきましょう。

JSON Serverをつかってみる

①Node.jsを入れる

JSON ServerはNode.jsベースのライブラリですので、まずNode.jsを入れなければいけません。※Node.jsが入っている場合は飛ばして次の手順に進んでください。
ここでWindows向けのNode.jsを入手します。他の環境のインストール方法については記載を省略します。 f:id:morinco25:20180619154544p:plain
英語ですが、特に悩むことなく「Next」連打でインストール完了するかと思います。
次のコマンドを試して、バージョンが表示されればインストール成功です。

> node --version
> npm --version

f:id:morinco25:20180619155240p:plain

②Json-serverをインストール

下記のコマンドでJson-serverをインストールします。

 > npm install -g json-server

エラーなく終了すれば成功です。

③リソースを作成する

インストールしたら、次はリソースを作成しましょう。
呼んだときに返すJson形式のレスポンスです。
サンプルとしてこのようなものを作成します。

db.json
{
  "get_users": 
                         {
                           "name": "弥生もりこ", 
                           "age": "30", 
                           "tel": "080-0000-1111"
                          }

  ,"get_company": 
                          {
                           "name": "弥生商店", 
                           "address": "秋葉原1丁目", 
                           "tel": "03-0000-1111"
                          }
}
route.json
{
   "/api/test/mock/v1/get_users": "/get_users"
  ,"/api/test/mock/v1/get_company": "/get_company"
}

json-serverの制約としてリソースパスにスラッシュを含めることが出来ないのですが、スラッシュを含むAPIのモックを作成したかったため、route.jsonでパスを書き換えました。

④起動する

リソースができたら起動します。

> json-server db.json --routes route.json -p 3000

f:id:morinco25:20180620160132p:plain 起動も簡単。ポート番号も変えることができます。 当たり前ですが、ポート番号を変えれば多重起動が可能です。

⑤GETを投げてみる

いよいよ確認!
Postmanhttp://localhost:3000/api/test/mock/v1/get_users にGETを投げてみます。 f:id:morinco25:20180620160532p:plain やったー!無事、かえってきました。
ほんとこれだけ。ラクダに乗って飛び回っている私にだって、30秒+αで出来ました。

POSTするとリソースが書き換わってしまう問題

POSTを投げてみる

流れで同じURLにPOSTも投げてみます。
f:id:morinco25:20180620161000p:plain んん?期待した値が返らない。
どうやら、POSTするとリソースファイルが書き換えられるようです。
ツールとしては便利なんだけど、POST型のAPIもモック化したい私にとっては不都合。
POSTでも書き換えられないよう、ほんの少しコーディングします。

コーディングして再起動

下記のようなserver.jsを、route.jsonの代わりに配置します。
POSTリクエストをGETリクエストに偽装します。
route.jsonの内容もここに記載します。

server.js
const jsonServer = require('json-server');
const server = jsonServer.create();
const router = jsonServer.router('db.json');
const middlewares = jsonServer.defaults();

// routes.jsonの内容をここに記載
server.use(jsonServer.rewriter({
   "/api/test/mock/v1/get_users": "/get_users"
  ,"/api/test/mock/v1/get_company": "/get_company"
}))

// ミドルウェアの設定 (コンソール出力するロガーやキャッシュの設定など)
server.use(middlewares);

server.use(function (req, res, next) {
  if (req.method === 'POST') {
    // POST送信を受ける場合、受けたPOSTレスポンスをGETに変更する
    req.method = 'GET';
    // req.query = req.body;
  }
  // Continue to JSON Server router
  next()
})

// db.json を基にデフォルトのルーティングを設定する
server.use(router);
// サーバをポート 3000 で起動する
server.listen(3000, () => {
  console.log('JSON Server is running');
});

ディレクトリはこんな感じ。
f:id:morinco25:20180620162703p:plain

ほれ└|∵|┐再起動。
今度はserver.jsの中に起動情報が書かれているので、server.jsを叩きます。

> node server.js

f:id:morinco25:20180620162445p:plain さっきみたいな起動画面ではありませんが、これで起動OKです。

POSTを投げてみる(再)

f:id:morinco25:20180620173521p:plain 無事、かえってきました。
リソースファイルも書き換えられていません。

 

まとめ

いかがでしたでしょうか。
コーディング不要で30秒以内に、RestAPIのモックサーバーを作ることができました。
また、少しのコーディングは必要でしたが、POST形式のAPIについてもモック化することができました。
JSON Serverのおかげで、我がチームは全員快適にテストすることができ、みんな幸せに過ごしました、とさ。

f:id:morinco25:20180619160335p:plain

弥生では様々なサービス・ツールを使って、サービス改善やシステム運用改善に取り組んでいます。 そういった情報をこれからも発信できればと思っておりますので、引き続き宜しくお願い致します。