Better Software Testing

ソフトウェアテストをもっと良くしたい

Hacker NewsからQA関連の記事を取得し、Twitterに投稿するbotを作った

news.ycombinator.com

github.com

Hacker NewsにはAPIが実装・公開されていて、上位500件分の記事を取得したり特定の記事の詳細を取得したりすることができる。

僕はときどきHacker Newsを眺めたりしているが、大量にある記事の中からQA関連のものを見つけるのが大変だと感じたので、APIを使ってbotを作ってみた:

github.com

仕組みとしては、

  1. Hacker Newsから500 top and new storiesを取得する
  2. そのうち上位100件の記事の詳細を取得する
  3. 記事のタイトルに特定のキーワード(QA, quality, bug, test)が含まれているかどうかを判定する
  4. キーワードが含まれている場合、その記事のタイトルとURLをTwitterに投稿する

というもの。

これをAWS Lambdaにデプロイし、毎朝9:00に実行する。

で、実際にツイートされたものがこちら:

f:id:katsu-ichiro:20220228080802p:plain

実行例

本当は手順1で取得した500件全てを手順2以降の対象としたかったのだが、実行時間がそれなりに長くなりそうで、そのぶんだけAWSに課金しなければならないのが辛いと感じたので100件にとどめた。

あと、昨年から5個くらいTwitterやslackのbotを作ってきたせいか、botの作り方はだんだん慣れてきた気がする。ちょっと嬉しい。

チームで品質を磨いているという感じがして良い

tech.smarthr.jp

チームで品質を改善する、良い取り組みだと思った。

目的がバグ出しなのか、改善箇所の洗い出しなのか、品質評価なのか、はたまた?という感じで読んでいたが、どうもプロダクトのユーザビリティ評価、というかブレインストーミングに近いらしい。様々な役割の人と一緒に進めたいのであれば、こういう感じがちょうどいいのかもしれない。

  • 触りながら気づいたことはどんなことでもいいのでメモをする
  • 評価タスクの変更などいろいろ操作してみる
  • 差し戻ししたり、いろいろ操作してみる

たぶんこの辺りがSmartHR社でのロールプレイテストのミソで、細かいルールや手順がなく、難しい言葉を使わないから精神的なハードルが低く設定されるのだと思う。

私は日頃、ヘルプページ作成業務で操作手順を文章にする機会を意識の切り替えに利用していますが、仲間を巻き込んで「ごっこ」をしながら視点の切り替えが自然とできてしまうロープレには、「その手があったか!」と衝撃を受けました。

結果として、↑↑こういう感じで進めることができているのかな、と。

一方で、ロールプレイテストはあくまで品質評価の1手法という感じがするので、よく設計されたテスト、リグレッションテスト、自動テストなどとバランスは取っていきたいところ(SmartHR社でもそうしているとは思うが)。ロールプレイテストはテストの網羅性向上やバグ出しを目的とするテストではないため、このテストを以て「よし品質OK」と判断するのはいささか不安ではある、と感じる。

とはいえ、チームで品質を磨く良いプラクティスだと思うし、QA以外の職種の方が品質の意識を強める良い機会にもなると思うので、機会を見つけて活用してみたい。

QA・テストエンジニアの求人からまとめた情報

LAPRASに掲載されているQA・テストエンジニアの求人を集計し、以下の情報をまとめた:

  • 各社で採用しているCI/CDツール
  • 各社で採用している自動テストツール
  • 各社の給与レンジ

結果:

  • CI/CDツールは、CircleCIが最も採用されている。次いでAWS
  • 自動テストツールは、ほとんどの企業で記載なし。記載されている中では、Autifyが最も多かった
  • 給与レンジは、下限・上限ともに予想していたより高かった。下限は400万円台の会社が圧倒的に多いだろうと思っていたが、500, 600万円台とほぼ同数であった。また、上限1,000万円オーバーの会社が半数近くあったのも意外であった

f:id:katsu-ichiro:20220213085035j:plain

CI/CDツール

f:id:katsu-ichiro:20220213085108j:plain

自動テストツール

f:id:katsu-ichiro:20220213085140j:plain

給与レンジ

 

UbuntuでCodeceptJSのスクリプトを実行する

  1. AWS EC2インスタンスを起動する(OSはUbuntuで、あとは適当)
  2. Node.jsをインストールする
  3. CodeceptJSとpuppeteerをインストールする
  4. Chromeをインストールする
  5. CodeceptJSのプロジェクトを新規作成し適当なスクリプトを書く
  6. npx codeceptjs run --stepsコマンドを実行する
  7. はい

qiita.com

codecept.io

ubunlog.com

 

# Node.jsのインストール
sudo apt update
sudo apt install -y nodejs npm
sudo npm install n -g
sudo n stable
sudo apt purge -y nodejs npm
exec $SHELL -l
# CodeceptJS, Puppeteerのインストール
npx create-codeceptjs . --puppeteer
# Chromeのインストール
sudo apt install ./google-chrome-stable_current_amd64.deb

connpassからQA関連イベントを取得してSlackに通知する

概要:

  • connpassのAPIを叩いて、以下の条件に該当するイベントを10件取得する
    • プログラムを実行した月のイベント(例:2022/01)
    • イベントタイトル、キャッチ、概要、住所に「QA」を含むイベント
  • 取得したイベント情報から、以下の情報を取得しSlackに投稿する
    • イベントID
    • イベントタイトル
    • キャッチ
    • 開始日時
    • 終了日時
    • 参加可能人数
    • 参加人数
    • URL

使ったもの:

connpass.com

api.slack.com

実行手順:

  1. Slackで、スラッシュコマンド"/get_qa_events "を実行する
  2. SlackからAPI Gatewayにリクエストが飛ぶ
  3. API Gatewayがリクエストをキャッチし、Lambda関数を実行する
  4. Lambda関数内にて、以下の処理を行う
    1. connpass APIを叩き、QA関連イベントの情報を取得する
    2. 取得した情報をSlackに投稿する

実行結果:

f:id:katsu-ichiro:20220201060334p:plain

実行例

Slackの仕様上、実行時間が3秒を超えるとエラーメッセージが表示される。ただし、一度開始した処理そのものは最後まで実行されるので問題ない。

 

感想:

作り込まなかったというのもあり、そんなに時間かからずに作れた。開催年月や検索ワードを自由に設定できると尚良いのだが、今回は基礎を作ったところで満足。毎回ブラウザ立ち上げてconnpassにアクセスしてキーワード入力して、、という操作をやっていたが、これをコマンド1つで実行できるようになったのですごく便利感がある。

 

ソースコード

github.com

Visual Regression Testing便利そう

blog.nnn.dev

Visual Regression Testing(VRT)、今まで使ったことなかったけど便利そう。

そもそもなんで今まで使わなかったかといえば、WebElementやテキストの存在確認だけでニーズを満たせていたから。

ただ、リファクタリングや改修を行う際には必要になるんだろうな、と思い始めた。

デザインが意図せず変わっていないことを目視で確認するの、かなり大変な作業だと思うので、、

不具合を検出する以外にも、開発者に安心感を与える効果もあるみたい。

ただ、画像がちょっと変化すると(例えばWebページ内の日付が変わったりすると)、比較したい部分が一致していても失敗してしまうのでは、、という心配もあるので、調べたりトライしたりしながらやってみたい。

品質を高める活動について

 

www.qbook.jp

atmarkit.itmedia.co.jp

「ATDD(受け入れテスト駆動開発)で『テストフェーズ』を限りなくゼロに近づけたい」株式会社SmartHR 泰楽 無雅氏 より引用

夢としては、現実問題として、ゼロにはできないと思いますがテストフェーズをなくしたいと思っています。そして、テスト専任やテストメインのQAをなくしたいイメージを持っています。やはり、QAでテスティングはあくまでひとつの手段だと思うので、それ以外の領域で活躍できる場を広げていきたいと考えています。そういう意味でのテストを減らしていきたいですね。

これまで、QAやテストで品質を保証する考え方がされてきました。しかし一方でアジャイルのような開発ではチームとして品質を捉え、向き合うように見方が変わってきています。QAだけがテストをするのではなく、チーム全体としてテストの重要性を理解するテスト文化を根付かせ、QAの活動領域を広げていくことが大切になっていくと考えています。

(中略)

テストの領域でやり方を変えてもエンジニアには影響が少ないので抵抗がなく、開発と並行できます。そのようにしてゴリゴリと進めていき、エンジニアに対してレビューをお願いしたり、実装とつき合わせたり要件とつき合わせたりしていきました。このようにすると、エンジニアにもテストの意識が生まれ、ソフトウェアテスト全体の効率化にも繋がっていくと考えています。 

QAの責任は重い。だから楽しい より引用

 柿崎さんがGAに入社したのは2018年だ。当時からプロダクトの品質向上は命題だったという。お客さまに提供するサービスの全ての品質を極限まで高める、というのがGAの目指すものだ。気持ち良く製品を使ってもらい、満足してもらうこと、それをGAの全てのメンバーが目指している。QAチームも、プロダクトの品質を究めるべく切磋琢磨(せっさたくま)している。

(中略)

 QAは開発にブレーキをかけることになるため、普通の会社なら煙たがられる存在かもしれない。しかし、GAにはそういうことが一切ない。QAチームとして、その環境は非常に恵まれていると感じつつも、柿崎さんはその責任の重さも痛感している。

 「自分のひと言で、品質を高める行為が一気に走りだします。だから言葉の責任は重い。『ここまずいよ』という指摘をする際には、情報の裏付けをしっかりしなければなりません。そういった強い責任を、QAエンジニアとして感じています」

最近のQA界隈では、QAがテストの枠を超えて活動したり、エンジニアと協力して品質を高める活動をしたり、という行動がどんどん湧き上がっているように感じる。

SmartHRもGA technologiesも、テストに閉じた活動はしない、という点で共通しているように思えた。

僕もこの考え方には賛成で、品質を良くしていくには、品質を作り込む活動に足を踏み入れる必要があると思っている。テストはあくまで品質を測定する活動であり、品質をよくするためには品質が作り込まれるフェーズ(仕様検討や実装)に手を加える必要がある。そのためには、テストの知識ももちろん必要だし、エンジニアやPdMといった他職種のメンバーとの関わり方も重要になる。QAだけで品質を高めることはできないので、品質を高めることがいかに大切であるか、という文化づくりもしなくてはならない。

以前、誰かが言っていた「今後のQAはコンサル的な立場になる」というのも、コレを指しているのかもしれない。テスターとして手を動かすだけでなく、品質を高めるための相談役として動き、PdMやエンジニアと共に品質をリードする立場になるのかもしれない。