JSTQB認定テスト技術者資格試験受かりました

タイトル通り。先日受けたJSTQB認定テスト技術者資格 Foundation Level試験受かってました。 siro-uma.hatenablog.com 合格発表まで3ヶ月と書いてあったのでゲンナリしていましたが、結局1ヶ月半での結果開示。 受かる自信はあったとは言え、一安心。

次はAdvanced Level テストマネージャを狙ってみようと思っています。2月にテストアナリストなので、たぶん8月かな。

JSTQB認定テスト技術者資格試験を受けてきました

久々のブログ更新です。仕事が忙しいのと、Githubの色付けをしていました。

タイトルの通り、JSTQB Foundation Levelのテスト技術者資格試験を受けてきました。

受験動機

本職の肩書は一応テストエンジニアなので、まあとりあえず最低限の知識は持っているよね、の、証明のために1つの資格くらい持っていても良いかなと思ったのが受験の動機づけです。

勉強方法

そして試験日

場所はお台場のTOC有明でした。
こういう試験には珍しく試験開始時間が遅め。試験会場開場が14:20で試験開始が15:00。 余裕を持って家を出たつもりが、証明写真や筆記用具を買ったりしていたら、到着が14:50くらいになってしまいました。(準備悪すぎですね。。)
試験会場着いて周り見渡した感じの受験者層の所感ですが、9割男性・1割女性。年齢層はかなり幅広そうでしたが、30代前半の自分より若い人のが多いかな。と、思いました。

試験の感触

自信ないなーと思える問題はいくつかありましたが、事前の練習問題通りまあ8〜9割はいったかなぁと思います。
ISTQB - Foundation Level Exam Structure and Rules 1.2曰く、合格基準は65%以上の正答とのことなので、確実な事は言えませんがきっと受かっただろうと思います。いや、願っています…。(これで落ちていたら笑えない。。)

3.3. Passing Score
3.3.1. A score of at least 65% (26 or more points) is required to pass.

試験を終えて

試験を終えての感想としては、あまり勉強にはならなかったかなと感じています 笑
おそらくテスト実務者にとっては知った内容がほとんどです。なので、その知った内容を資格という形に変える、と考えるのが良いと思います。
あとは、JSTQB(ISTQB)で定義されている言葉を知っていれば、社外のソフトウェアテストエンジニアとの会話も成り立ちやすいのではと思います。テスト界隈に限りませんが、同じ意味なのにそれを表す言葉って部署や会社で違ったりしますよね。JSTQB認定者同士であれば同じ言葉で会話できるはず。

試験結果は3ヶ月以内に発表とのことなので、結果が来たらここで報告するつもりです。
無事合格したらAdvanced Levelの受験も視野に入れてみようと思います。

Selenium Committer Day 2017に参加してきました

7月1日にヤフー株式会社で開催されたSelenium Committer Day 2017に参加してきました。 Seleniumのコアコミッターの方々の話を日本で聞ける貴重な機会。Seleniumの歴史から、Seleniumを実務を使う上でのTipsまで、充実の内容でした。

Seleniumの次に来るのは何か? - Jim Evans

Seleniumの過去と現在と未来について熱く語っていただきました。

Selenium 1.0から、JSON Wired Protocolを用いたwebdriverベースのSelenium 2.0になり、所謂クリスマスまでにリリースと言われたSelenium 3.0まで。 Firefox 48とそのextensionの規約変更に伴う開発の苦悩の話などの裏話も聞けました。 Selenium 4.0からはW3CJSON wired protocolに準拠する形でのリリースになるので 、ブラウザベンダーだけでなく、Sauce LabsやBrowserstackなどの周辺ツールベンダーへの影響も大きいそうです。 Selenium 4.0のリリース動向も含めて、各社ベンダーの対応に注視していきたいです。

また、コアコミッターさんとは言え、ボランティアという立場であるということを心なしか強調しているように感じました。ユーザーとしては感謝の気持ちを忘れないようにしたいです。

SeleniumとBrowsermobを活用したE2Eテスト分析 - Marcus Merrell

A/Bテストなどの、Business Intelligenceな評価にも、QAとして積極的に関わっていきましょうというお話。 BIって確かにビジネスの意思決定などにおける重要度は大きい割に、機能試験などに比べ疎かになりがちな気がします。

実際のBIの評価の方法として、BrowserMob proxyを用いた評価を紹介していただきました。 BrowserMob proxyはselenium committerの方が開発しているようで、Seleniumとの親和性が非常に高いとのことです。 BIの評価は仕事でもやっていますが、自動試験という形での運用はできていないので、紹介していただいた、BrowserMob ProxyやWAATなどと併せて自動化を進めたいと思います。

github.com

コンテナを使ったテスト - Manoj Kumar

CICDに耐えうる試験インフラを、と言うことで、スケーラブルなテスト環境のためのDockerについてのお話。 従来のVMベースの仮想化技術と比較したDockerの優位性を説明した上で、Selenium, Selenium GridをDockerで構築する評価環境と評価の実施ということでDDD(Docker Driven Development)という言葉を用いて、その手順やツールなどを紹介していただきました。

実際に仕事でDockerは使っているものの、Reusableではありつつも、ScalableにはDockerを有効活用できていない気がしているので、Selenium Gridなども含めて取り入れきれていない技術もあるので、これを機会にいくつか取り入れてみようと思います。

Manoj-sanの話の中で紹介頂いた、各種ツールのGithubのリンクなどを貼り付けておきます。

コミッター + 会場 Q&Aパネルディスカッション

聞くのに夢中でメモできず。。省略

E2E自動テストの長期運用に耐えるための5つの手法 - Toshiya Komoda

www.slideshare.net

内容はslideshareを参照ください。 debugログの改善なんかは地道な活動ですけど、すごく重要だなあと最近思います。テストツールのユーザビリティが疎かになった結果、職人にしか理解できないという状況が現在の職場でも起きています。 ユーザーフレンドリーなテストを作るのも、テストエンジニアの重要な仕事ですね。

あとinput topic identification with machine learningもすごいなあと思いました。Page Objectをメンテナンスするコストも排除できるし、ユーザビリティの評価にも使えたりと、使い方次第で広がりもありそうです。

Let’s step into the OSS community - KazuCocoa

CookpadのKazuCocoaさんから、OSSのcommunityに参加して行きましょうという話。

Cookpadは会社としてもOSSでの活動を推進しているとのこと。弊社は結構長いプロセスを踏まないといけないので、そういった環境は単純に羨ましいです。 OSSでの積極的な活動によりRubyのコアコミッターをハイアリングしたりと、会社としてもそのメリットを享受できているようで、そういったメリットを自分の会社も理解した上で、もう少し積極的な姿勢に変わっていければと思っています。

私もサンフランシスコで働いたときの経験から、ソフトウェアという世界で生きる上でOSSで活動することは、自分のキャリアを豊かにする小さな意味はもちろん、世界を豊かにするという大きな意味も含めて重要な活動だと思っているので、今後はもう少しそういった活動に足を突っ込んでいきたいです。

継続的E2Eテスト - Tomotaka Asagi

www.slideshare.net

内容はslideshareを参照ください。 DeNAの方の内容と重複するような内容。きっと多くの人が、Seleniumを使ったE2Eテストを継続的に実施することが難しいと考えているから、このような内容の発表が多いのではと思います。 実際、Seleniumを使ったE2Eテストの継続的な運用を、最初から成功させているようなところは少ないのではと思います。SeleniumのE2Eテストの設計は、最初から100点満点なものを作るのは難しいと思うので、テストウェアを継続的に改善していける体制を整えることが、E2Eテストを継続的に運用するコツなのかなあと個人的には思っています。

Windows Application DriverでWindowsアプリも自動テスト^_^ - Kenichiro Ota

Windows Application Driverを実際に触った上での感触と感想を話していただきました。 実際の話して頂いた内容ではないですが、同じくOtaさんのWindows Application Driverを触ってみた際の記事がQiitaにあったので貼り付けておきます。 qiita.com

そもそもほとんどWindows環境でSeleniumを使ったことがないので、勉強がてらどこかで触ってみようかなと思います。

最後に

Seleniumを使うようになってから1年半くらい経ちますが、まだまだ、と言うか全然使い切れていないなあと、今回のイベントを通して思いました。 運用面で今のE2Eテストを見直していくのが最優先課題なので、まずはその辺りからやっつけていきたいと思います。

pytest向けのpluginを書く

以前紹介したpython pluginの作り方に続いて、今回はpytestのpluginの作り方を紹介したいと思います。

そもそもpytestって何

pytest is a mature full-featured Python testing tool that helps you write better programs.

公式サイトの引用ですが、pytestはpythonのtestのための便利ツールという扱い。
ツールという言葉が正しいか難しいところですが、単にtest runnerとは言えないくらいたくさんの機能を有しています。詳細は公式サイトを参照ください。
https://docs.pytest.org/en/latest/index.html

作るもの

今回はpytestの特徴の一つである、hookの機能を利用して、setup/call/teardownでdebugメッセージを表示する、簡単なpytest pluginを作ってみようと思います。

環境

構成

GitHub - sirouma/hello_pytest

hello_pytest/
 ├ hello_pytest/
 │ ├ __init__.py
 │ └ plugin.py
 ├ test/
 │ ├ __init__.py
 │ └ test_sample.py
 └ setup.py

pluginの実態となるコードはplugin.pyで、今回は動作確認用としてtestコードも用意しています。

コード

一部のコードについて解説します。
まずは、setup.pyですが、前回紹介したpython pluginのsetup.pyからの主な変更点として、entry_pointsがあります。
pytestはentry_points pytest11からpytestの各種pluginを探しに行きます。なので、自身でpluginを定義する場合は、ここに自身のpytest pluginの情報を追加する必要があります。

続いてpluginの実態となる部分のコードになります。
今回は3つのhook関数pytest_runtest_setup, pytest_runtest_call, pytest_runtest_teardownを定義することで、それぞれのタイミングでdebugログをコンソールに出力します。
各種hookの仕様は以下を参考にしてみてください。
Writing plugins — pytest documentation
_pytest.hookspec — pytest documentation


動かしてみる

まずはインストール。setup.pyのあるディレクトリで、pip3 installを実行。

sirouma$ pip3 install ./
Processing /Users/sirouma/Workspace/hello_pytest
Installing collected packages: siro-uma.hello-pytest
Running setup.py install for siro-uma.hello-pytest ... done
Successfully installed siro-uma.hello-pytest-0.1.0

実際にpytestを使ってtestを走らせてみる。

  • sオプションをつけて、stdout/stderr/stdin capturingを無効にしましょう。

sirouma$ py.test test/test_sample.py -s
================== test session starts ==================
platform darwin -- Python 3.5.3, pytest-3.1.2, py-1.4.34, pluggy-0.4.0
rootdir: /Users/sirouma/Workspace/hello_pytest, inifile:
plugins: siro-uma.hello-pytest-0.1.0
collected 1 items

test/test_sample.py pytest_runtest_setup
pytest_runtest_call
.pytest_runtest_teardown


================== 1 passed in 0.02 seconds ==================

少し見づらいですが、pytest_runtest_setup, pytest_runtest_call, pytest_runtest_teardownがコンソールログに出力されているのがわかります。

まとめ

上記の通り、自作のpytest pluginができました。
その他にもたくさんのhookや、今回は特に触れていませんが、fixtureという便利な仕組みもあるので、ぜひ便利なpytest pluginを作ってみてください。

サンフランシスコ滞在中に便利だったアプリなど

東京に戻ってきて、サンフランシスコ中に使っていたiOSアプリを削除しているんですが、何を使っていたか備忘録として残しておきたいな、と思い、アプリ以外の情報も含めてここに残しておこうと思います。

目次

 

iOSアプリ

Uber

説明不要ですね。サンフランシスコでの移動では大変お世話になりました。

Uber

Uber

  • Uber Technologies, Inc.
  • 旅行
  • 無料

Lyft

こちらも説明不要。使用した限りではUberより心なしか安い気がする。たまたまなのかサンフランシスコ国際空港から市内に向かうときは、UberよりLyftの方がかなり安いです。1人でもシェアライドを選べば、BARTより安いことも結構多いです。

Lyft

Lyft

  • Lyft, Inc.
  • 旅行
  • 無料

Transit 

サンフランシスコ市内での公共交通機関を使う場合はこちらが便利。乗り換えの検索や、最寄りのバス停・メトロ駅の検索、バス・メトロ運行状況をリアルタイム検索できたりと、UIの使い勝手も含めて、かなり優秀アプリです。

Transit • Real-Time App for Bus, Subway & Metro

Transit • Real-Time App for Bus, Subway & Metro

  • Transit App, Inc.
  • ナビゲーション
  • 無料

Yelp

サンフランシスコでレストランを探すならこれ(賛否両論あるようですが)。レビューが高くても個人的にイマイチと感じることもあったので、Google Mapのレストラン評価と併せて参考程度にするのが良さそうです。

私は床屋の検索もYelpで行いました。

Yelp

Yelp

  • Yelp
  • 旅行
  • 無料

OpenTable

レストラン予約アプリ。サンフランシスコでも人気のお店は予約が必要です。Yelpでレストランを検索し、OpenTableで予約することもありました。おいしいご飯を並ばずに食べたい人は必須アプリ。

OpenTable

OpenTable

  • OpenTable, Inc.
  • フード/ドリンク
  • 無料

Meetup

サンフランシスコ内では毎日たくさんのMeetupが行われています。主にMeetupの検索で使っていました。

The Weather Network

 天気予報アプリです。数ある天気予報アプリの中で、かなり予報精度が高いです(少なくともサンフランシスコに関しては)。天気の変わりやすいサンフランシスコでは必需品ですね。

The Weather Network

The Weather Network

  • Pelmorex Media Inc.
  • 天気
  • 無料

Couchsurfing

私は英語力上達のため、サンフランシスコでCouchsurfingでホストをしていました。ゲストとの連絡は、Whatsappなどに移るまではこちらを利用していました。泊める・泊まる以外にも、一緒に飲みに行く人や一緒に観光する人を探すこともできます。

余談ですが、サンフランシスコ市内にあるCouchsurfingの本社では、毎月?無料で映画が上映されるイベントが開催されています。

Couchsurfing Travel App

Couchsurfing Travel App

  • CouchSurfing International Inc.
  • 旅行
  • 無料

 

Webサイト

FunCheap

サンフランシスコ近郊で行われるイベントが網羅されています。日本では見ないようなユニークなイベントも多いので、こちらで見つけたイベントに結構参加してました。

sf.funcheap.com

Eventbrite

こちらもイベントが検索できるWebサイト。こちらはiOSアプリもあるようですが、上のFunCheapの方が掲載イベントが多かったので、利用頻度は少なめでした。

www.eventbrite.com

Spirit Airlines

サンフランシスコではないですが、湾向かいのオークランド国際空港からSpirit Airlinesの飛行機が飛んでいます。LA行きなどは、直前でも結構安く買えたりします。

Spirit Airlines - cheap tickets, cheap flights, discount airfare, cheap hotels, cheap car rentals, cheap travel

最後に

すでにサンフランシスコでの生活を忘れつつあるので、何か思い出したら情報を追加しようと思います。

3ヶ月のサンフランシスコ滞在を終えて

3ヶ月の任期を終えてサンフランシスコから東京に帰ってきました。

可能ならもっと長く滞在していたかったですが、東京オフィスの業務都合もあり、延長希望は通りませんでした。笑

ということで、記憶のあるうちにサンフランシスコでの目標の達成具合を振り返って見ようと思います。

SFのエンジニアとの技術の力量の差を知る

個人的な感想としては、ソフトウェアの技術レベルに関しては日本とサンフランシスコで大きな違いはなく、優秀なエンジニアもいるし、結構平凡なエンジニアもいる、が正直な感想です。

もちろんサンフランシスコ中のエンジニアと会ったわけではないですし、私の短い滞在での知る限り、という注釈付きになりますが、職場で働いた限り&Meetupに参加した限りの感想は、上記の通りです。

ただ、ソフトウェアの技術レベル以外の、特にプレゼンテーション技術はサンフランシスコのエンジニアのが優れているなあと感じました。

話の進め方とか、聴衆を取り込む力とか、とにかく慣れている。これは、日本のエンジニアとしては見習うべき点のひとつかと思っています。

英語を上達させる

これは正直目立った上達はあまりないかな、と感じています。悔しいですが。

職場だけでなく、Couchsurferを家に招いたりとなるべく喋る機会を増やす努力をしましたが、劇的に話せるようになったとか聞けるようになった感じはしないです。

ただ、最近は発音の勉強に力を入れるようにしていて、その効果は少しずつでてきているように思います。

(社外で)友達を作る

残念ながらフランクに飲みに行けるような友達はできませんでした。が、CouchsurferやMeetupで参加したバレーボールを通して、定期的に連絡を取るような友達はできました。

この関係は大切にしていきたいと思います。

ヨセミテ国立公園に行く

こちらは無事達成。5月初旬に行ったので、雪の関係で行けないところは多々あったし、週末だけではとても周りきれななかったですけど、Gracier pointには行けたし、偉大な自然を存分に感じました。

長い時間をとって、いつかまた訪れたいと思います。

 

以上、目標に対しての振り返りです。英語はもう少しやれたかなあと思うところがあるので、ちょっと残念に思っていますが、概ね満足です。

3ヶ月という短い期間でしたが、ここに書いたこと以外にも得るものはたくさんあったし、とても良い刺激になりました。そして、より一層海外で働きたいという気持ちが増しました。

足りない部分にも色々気づけたので、この経験を今後の成長に役立てていこうと思います。

自作Pythonモジュールのpypiへの登録

少し時間が空きましたが、以前に予告した通り、自作モジュールのpypiへのアップロードに挑戦してみます。
流れは以下の通り。

  1. アカウント登録
  2. setup.pyの修正
  3. testpypiへのお試しアップロード
  4. pypiへのアップロード

では順を追って説明していきましょう。

アカウント登録

pypiへの登録にはまずアカウント登録が必要です。実際にはアップロード時にアカウントを作成することも可能なようですが、今回は事前に作成します。
アカウント登録は本番用のpypi.python.orgとテスト用のtestpypi.python.orgそれぞれに登録しておきましょう。 ユーザー名, パスワード, メールアドレスなので、特に難しいことはないと思います。(メールアドレスだけ少しルールが厳しいです。)

setup.pyの修正

前回作ったsetup.pyをpypiでのリリースに向けて修正しましょう。

from setuptools import setup


setup(
    name='siro_uma.hello',
    version='0.2.0',
    description='A sample Python project',
    long_description='This is a sample to say Hello!',
    url='https://github.com/sirouma/hello',
    author='siro_uma',
    author_email='sirouma.09@gmail.com',
    license='MIT',
    classifiers=[
    'Development Status :: 3 - Alpha',
    'Intended Audience :: Education',
    'Topic :: Education',
    'License :: OSI Approved :: MIT License',
    'Programming Language :: Python :: 3.6',
    ],
    keywords='sample setuptools development',
    packages=['hello'],
    entry_points={
        'console_scripts': [
            'hello=hello.hello:hello',
        ],
    },
)

ライセンスは1番簡単なMITをこちらのサイトを参考にしながら付与してみました。
classifiersに関しては、pypiが提供するリストの中から適当なものを選んでみています。

testpypiへのお試しアップロード

pypiへのアップロードの前に、testpypiでトレーニングしましょう。(と、pypiが申しております。Packaging and Distributing Projects — Python Packaging User Guide documentation
まずはHOME/.pypircを作成しましょう。これをやっておくと以降で出てくるregister/uploadの際にusername/passwordが聞かれなくなるので便利です。

[distutils]
index-servers =
  pypi
  pypitest

[pypi]
repository=https://pypi.python.org/pypi
username=siro_uma
password=password

[pypitest]
repository=https://testpypi.python.org/pypi
username=siro_uma
password=password

続いて前回のおさらいでインストール可能なパッケージの作成。

> python3 setup.py sdist

packagingした内容を基に、testpypiにpackageのmetadataを登録します。
まずは登録に必要なコマンドラインツールtwineをインストールし、それを使って登録を行います。

> pip3 install twine
> twine register dist/* -r pypitest
Registering package to https://testpypi.python.org/pypi
Registering siro_uma.hello-0.1.0.tar.gz

さらにpackageしたファイルを登録します。

> twine upload dist/* -r pypitest
Uploading distributions to https://testpypi.python.org/pypi
Uploading siro_uma.hello-0.1.0.tar.gz
[================================] 4350/4350 - 00:00:02

以上で、https://testpypi.python.org/pypiへの自作モジュールの登録が完了します。 念のため、インストール可能か試してみましょう。

> pip3 install -i https://testpypi.python.org/pypi siro_uma.hello
Collecting siro_uma.hello
  Downloading siro_uma.hello-0.1.0.tar.gz
Installing collected packages: siro-uma.hello
  Running setup.py install for siro-uma.hello ... done
Successfully installed siro-uma.hello-0.1.0
> hello
Hello, world!

問題なさそうなので、続いて本番環境である、https://testpypi.python.org/pypiに登録してみましょう。

pypiへのアップロード

やることはtestpypiのときと変わりません。-rでindexを指定する先が変わるだけです。

> twine register dist/* -r pypi
Registering package to https://pypi.python.org/pypi
Registering siro_uma.hello-0.1.0.tar.gz
> twine upload dist/* -r pypi
Uploading distributions to https://pypi.python.org/pypi
Uploading siro_uma.hello-0.1.0.tar.gz
[================================] 4350/4350 - 00:00:02
> pip3 install -i https://pypi.python.org/pypi siro_uma.hello
Collecting siro_uma.hello
  Downloading siro_uma.hello-0.2.0.tar.gz
Installing collected packages: siro-uma.hello
  Running setup.py install for siro-uma.hello ... done
Successfully installed siro-uma.hello-0.2.0
> hello
Hello, world!

最後に

以上でHello, world!な自作モジュールをpypiへの登録ができました。非常に簡単に自作モジュールを世に展開できるのがわかったかと思います。
参考までに、作ったモジュールへのリンクと、ソースコードのリンクを貼り付けておきます。

siro_uma.hello 0.1.0 : Python Package Index

siro-uma.hello 0.2.0 : Python Package Index

GitHub - sirouma/hello

次回はテストエンジニアらしく、pytestのプラグインの作成について記載したいと思います。