デブサミ2016でモバイルアプリ開発に関してお話しさせていただきました

以下の通り、お誘いいただいたこともあって、デブサミ2016でお話しさせていただきました。 http://event.shoeisha.jp/devsumi/20160218/session/1055/ Googleのとある書籍に習って、テストに関わる職種から見た開発、というものを書いてみました。ただ、ハードウェアは関係ないので”ソフトウェア”をつけています。 がっつりソフトウェアテストの技法だとか、どう活用しているという話は JaSST や SQiP でされる方がよくて、デブサミでは 自身の体験をもとにしたその周り 、という形の方がイベントの趣旨としても良さそうだったので今の物語の流れにしました。聴講者、デブサミは開発よりな人だったり開発上がりのマネージャな方なイメージだったので、時間帯も考えるとがっつりテストの話は眠くなりそうと感じたので。なのでQualityを真ん中に置いてその改善という流れにしてみました。 テストという局所的な話よりも、開発全体の中でQualityを高めるためにどうしたか、その中でテストエンジニアというものがサービス開発にどう関わっているのか、貢献しているのかが一連の流れで分かると良いなと思いました。 テストというQualityに対する一部を取り出してそこだけに深く関わるのではなくて、こういう感じで広く関わって、品質を向上させるところに 知を使う のがテストエンジニアとか、QAエンジニアと言われる方々。ソフトウェアテストの開発の上流工程から〜と言われるところの仕様というところをさらに広げた、多分もっと根本的にあったであろう活動全般になるのでないかな。(と信じてはしますが…)。日本でいう、1990年代にあったとされる品質活動と同じようなことをしている感じ。(実際にはその頃の話は聞いただけなので、想像ですが…) 品質に対してアリストテレスの話を出したのですが、そこらへんも反応がなかったので “がっつりソフトウェアテストの技法だとか、どう活用しているという話は JaSST や SQiP でされる方がよくて” という判断は正しかったぽい。(多分、そこ専門に学んでいると多少なりとも知るのでないかなと思ったので)。でも、そのあとのとある会話でSQiPやJaSSTでもそんなでもないかも、と言われたので、そんなでもないのかも。 あ、 toteka の宣伝の箇所が一番ウケがよくて、良い緩和剤になってくれました。 運営に携わっていました方々、ありがとうございました。More

[Android]delete data stored in AccountManager via adb

As you know, you can remove local application data via adb command. The command is very useful to do Android test against release module with uiautomator, Appium an so on. But, if your application use AccountManager provided by Android platform, the command can’t remove the data stored via account manager. What you can do is……More

[Android]duplicateFileException when import espresso-web

個人アプリのいろいろなライブラリの更新をしていると、以下のようにespresso関係でエラーが出るようになってました。 Webでざっと調べると、以下を見つけることができました。 http://openstackwiki.org/wiki/Espresso-Web_importieren_verursacht_duplicateFileException http://stackoverflow.com/questions/33800924/espresso-web-import-causes-duplicatefileexception 公式では、以下のcontribにはcoreが入っていると書かれているのでその場合はcoreは不要、とは書かれてれているのですが、これはよくわからなかったです。 ちなみに、以下のGradleサンプルでは大概のespressoに必要なものは入ってました。 https://google.github.io/android-testing-support-library/downloads/index.html ひとまず、stackoverflowにあるように以下を packageOption に追加することでエラーを回避することができました。んーむ。More

OpenSFT

完全なメモ。 OpenSFT を試した。リリース直後は確か何かつまづいてそれ以降試そうとしていなかったのだけれど、また試してみた、といった具合。 単純に、on Mac OS X 10.11で試したが、 stf local では特に問題なく動作しました。LDAP機能もあったし、社内連携も多少は行けそう。 ふむ。More

[Elixir]Lint with dogma

Elixirのlintツールとしてdogmaというものがあります。 RubyのRobocopのようなものですね。 https://github.com/lpil/dogma 試しに適用してみました。修正も。備忘録に、以下2つ。Phoneixの簡単なアプリとhttp_proxyを。 http_proxy https://github.com/KazuCocoa/http_proxy/pull/21/files sample web app https://github.com/KazuCocoa/web_qa_vote/pull/6/files Report formatとしてJSONもしてい出来ます。 https://github.com/lpil/dogma/blob/master/docs/reporters.md この標準出力を解析して、例えば dokumi と組み合わせるとPR時にlintを指摘する、というのもできますね。 ※ 最近は credo を私は使っているMore

『ヒューマンエラー 完訳版』を読んだ ~ これが否応のない人生の現実である ~

単に、どんなにうまく運営されている組織でも、影響の大きな意思決定のうち相当の数が、後になって間違っていたと判明することになるという事実を認めることである。 これが否応のない人生の現実である 。 『ソフトウェアの欠陥予防 テストより確実な品質改善法』を読んだであったような欠陥分析をする上で、人は一定確率で失敗するという大事な前提があります。一方で、それはどれほどなのか、経験的なものではなくちゃんと研究としてどこまでされているのか気になっていました。 そんな中、『ヒューマンエラー 完訳版』を見つけたので読みました。そのメモなどをつらつら。 ソフトウェアは人工物です。そのため、ソフトウェア開発は人の組織や認知と如何に関わるかというところが大事な要素を占めてきます。(ソフトウェアテストを学んでいると多くの人は行き着くことな気もしますね) この本では、主に原子力発電という安全性が最重要とされる情報をもとに、ヒューマンエラーに関して研究をまとめています。ここら辺は、安全性が重要な要素である航空関係、医療関係でも使われていることでしょう。たとえば スライスチーズモデル なんかで。一方で、 スライスチーズモデル の考え方なんかは、実は程度はどうであれそこ以外の分野においても有益な情報が多分にあります。 学術的な箇所は端折ってメモ。 GEMS(Generic Error-Modeling System)に沿った定義でエラーを主に扱っている 実行上の失敗: スリップ(しくじり)、ラプス(手抜かり) 計画が不適切: ミステイク(mistake) この中で、計画が不適切であるエラーの方がより見つけにくい。(ソフトウェア開発だと、仕様がそもそも誤っているというところですね。) 人の活動は、 SB: skill base RB: rule base KB: knowledge base の3つで構成されるとしている。それぞれの特徴は省略(本書のP.82付近)。この中でSBで発生するエラーは、主には 監視の失敗 によっている。RB、KBは問題解決能力が大きく関係してくるエラーに対する活動。 人は、 頻度の高いものほど認知/推論しやすくなる 。逆を言うと、そうでないものはエラーを認知することが難しくなる。5章ではそんな人の認知のロジックをモデルに落とし込み、模倣した研究が添えられている。つまり、人の正しいが、時折間違えるという状態がモデルとして扱われ、それを計算機により表現している。 第6章の数値は面白かった。データベースアクセス、更新などのある作業が エラーなくできたか、エラーが発生した時に正しく対処できたか を、SB/RB/KBで対策した時の差を計測結果として残している。 これによると、 SB ほどエラーが発生しやすいが、同様にSBの人ほどエラーが発生した時に正しく対処できる可能性があることを示している。 つまり、プロセスなどを整備することによるリスク低減と、人のスキルが成熟している状態を作ることができれば、低いリスクで万が一にも備えることができる状態を作り上げることができる。 ただ、いずれの活動に置いても、 手順の飛ばし、抜け、漏れは検出することができなかった。つまり、 手順の抜け漏れを探すようなことは、人は苦手。 エラーを検出するためには、 自己監視過程 なんらかの環境の手がかりに気づく 誰か他の人が発見する が大事。特に、ほかの人による発見は複雑でストレスの高いものほど効果が高い。つまり、 気をつける 、…More

『Mobile Testing Interview Questions & Answers』を読んだけれど、これは入り口向け

Mobile Testing Interview Questions & Answers: Guide to Crack Interviews (English Edition) を読みました。 この内容は、Q&A形式でモバイルアプリのテストに対する幾つかの疑問に答えていく、というものでした。 ターゲットが以下なだけあって、内容としては基礎的なものです。内容は前半がモバイルアプリのテスト全体に対して、後半がAppiumに対してです。 a beginner who has never faced any Mobile Testing interview Anyone who wants a bried on Appium Professional who want answers with example and explanation One who don’t know what “They” really want to hear… 環境の設定変更といった具体的な話もありました。ただ、すでにモバイルアプリのテストを実施したことのある人、またはAppiumを試したことがある人、からすると目新しいものはない感じです。 これは本当に知見のない人に対して行う説明、といった感じですね。More

[Elixir]ExUnitで同名のtestが存在した時にコンパイルエラーにする

1行まとめ ExUnitにおけるテストケースの重複時にコンパイルエラーにしたい場合、 test_helper.exs に Code.compiler_options(warnings_as_errors: true) オプションを追加しておこう 多分、これはチーム開発では大いに役立ちます ExUnitが test マクロを関数定義するまで 以下のようなテストケースがあったとします。 この時、 test マクロで定義されたところは __ErrorSampleExunitTest__.’:test the truth’ としてコンパイル時に定義されます。 Elixir1.2.1では以下の行での話になります。 https://github.com/elixir-lang/elixir/blob/v1.2.1/lib/ex_unit/lib/ex_unit/case.ex#L258 同名の test が存在した場合 さて、この時に複数の同名のテストが存在した場合はどうでしょう? 例えば以下。 この場合、コンパイル時にCLIで以下のような warn が表示されます。 test/error_sample_exunit_test.exs:8: warning: this clause cannot match because a previous clause at line 4 always matches テストケースを記述するコードは、 .exs の拡張子を持つので、このようなwarnはテスト実行毎に表示されます。なので、実行を注意深く見ていると、このエラーを知ることができます。 ただ、他のテスト自体は実行されます。 コンパイルエラーにする ただ、warnではなくコンパイルエラーにしたほうが親切なのでは?と思い、手元でコンパイルエラーになるようにExUnitを直接修正してみました。 ExUnitのtestマクロでは、以下の2点でコンパイル時に関数を定義します。 https://github.com/elixir-lang/elixir/blob/v1.2.1/lib/ex_unit/lib/ex_unit/case.ex#L258 https://github.com/elixir-lang/elixir/blob/v1.2.1/lib/ex_unit/lib/ex_unit/case.ex#L280 なので、その直前で以下のように既存モジュールに定義済みの同名関数があるかどうかを検出させ、trueであればraiseするようにします。 コンパイラオプションで回避する…More