yoshitake_1201’s diary

テストのこととか、ペンギンのこととか書きます。

「『パスワード変更ページでパスワードを変更したら、他のブラウザでそのパスワードでログインできない』ということがある」

この記事は?

qiita.com

ソフトウェアテスト Advent Calendar 2019の1日目の記事です。
この記事では私が最近体験した「とある不具合報告から調査(テスト)をしてみた話」です。
自分ならどんなテストするかなぁ〜?どこを狙うかなぁ〜と思いながら、読んでもらえると嬉しいです。

「『パスワード変更ページでパスワードを変更したら、他のブラウザでそのパスワードでログインできない』ということがある」

先日こんな報告がありました。
「『パスワード変更ページでパスワードを変更したら、他のブラウザでそのパスワードでログインできない』ということがある」

■ パスワード変更ページとは?
パスワード変更を行うためのページです。
このシステムでは、システムログインページにある「パスワードをお忘れの方はこちら」の「こちら」部分をクリックするとパスワード変更メール送信ページに遷移します。
このページでメールアドレスを入力すると「パスワード再設定ページURLが掲載されたメール」が入力したメールアドレス宛に送信されます。
このパスワード再設定ページでパスワードを入力するとパスワード変更でき、加えてパスワード変更を行ったブラウザではそのままログインされるというものです。

f:id:yoshitake_1201:20191201210111p:plain

報告を受けたとき、追加情報で以下を教えてくれました。
 ・ 絶対起きるわけじゃない
 ・ もう一度設定したらログインできるようになる

この報告を最初に受けたとき、軽く調査をしたのですが再現させることができず。
「報告者のパスワードの打ち間違いじゃない?」と結論づけていました。
しかし、ぽつぽつとこの報告がくるので、テストチームでもう一度調査することにしました。

テストチームによる調査開始

調査は私とsae氏の2名で行うことになりました(sae氏は私と同じテストチームのメンバー)。
バラバラにやっても効果が薄いだろうなぁと思ってペアテストを行うことにしました。

このとき、最初に我々が狙ったポイントは以下の2つでした。
 ① 特定のブラウザ(Iから始まって途中がEのやつ:以下IE)でやってみる
 ② パスワードに使われる文字の組み合わせに注目する

①の理由: このシステムでは ①のブラウザはテストのスコープに入っていなかったから。
②の理由: テスト実施中に使わない文字が使われているんじゃないか?という2人の意見の合致。

別のバグがみつかる

調査してみましたが、現象を再現させることはできませんでした。
しかし調査の途中で「パスワード変更のメールが2通送信されることがある」というバグに遭遇しました。
「あーあとでチケット登録しておこう」と思ったのですが、なんとなく…このバグに違和感を覚えました。
特に根拠はありませんが「これ何かにつながってるんじゃないか?」そうこじつけて、このバグの調査を始めました。

別バグ「パスワード変更のメールが2通送信されることがある」の調査結果

f:id:yoshitake_1201:20191201211344p:plain

いろいろ試してみるとこのバグについて以下のことがわかりました。
現象:「パスワード変更のメールが2通送信されることがある」
 ・メールアドレスを入力後Enterキーを押すとメールが送信される(仕様)
 ・Enterキーを押したときのみ再現することがある
 ・メール送信ボタンをクリックしても再現しない
 ・IEでしか再現しない(他のブラウザでは再現しない
しかしこれ以上何も見つからなかったので、改めてアカウントを登録してからテストを再開することにしました。

アカウントを新しく登録すると…

f:id:yoshitake_1201:20191201211814p:plain

このシステムでは、システム管理者が管理画面のアカウント登録ページから新規アカウントを作成します。
そこでちょうど開いていたIEで管理画面を開き、新規アカウントを登録しました(まだシステムに登録されていないIDを使用)。
このとき「さっきのEnterで二重登録されるバグ、これでも起きないかな?」と思ってEnter押してみました。
すると…あら大変。
同じIDのアカウントが2つ登録されることを発見しました。
そこでこのシステムの開発担当者Jに声をかけたところ、快く急いで来てくれました。
このバグの調査も兼ねてそのまま3人でペアテストをすることにしました。

アカウントが二重登録されるバグ

f:id:yoshitake_1201:20191201212902p:plain
会員登録ページでは「既に登録されているID」は登録できない機能が実装されていました。
登録済みのIDを入力して登録ボタンをクリックするとエラーで弾かれるのです(既に登録しているIDを入力してEnterキーでも同様)。
なので、一度アカウントを登録→もう一度同じIDを入力して登録ボタンをクリックをした場合、エラーで登録できないという結果になります。
しかし、この「新しいIDを入力して、Enterキークリックすると二重登録される」は↑の機能では弾くことができていないことがわかりました。

このアカウントはログインできるの?

f:id:yoshitake_1201:20191201213507p:plain
意図せず同じIDで作られたアカウントに対して、「このIDでログインするとどうなるんだろう?」
そんな興味がわいてきました。
そこでログインを試した所、普通にログインすることができました。
このときデータベースを調べた所「作成された順序が早い方」でログインされていることがわかりました。
これが判明して少しの間があった後、言葉は違えど同じことを3人は言いました。
「これパスワード更新されたときってどっちのアカウントが更新されるんだろうね?」

調査結果

f:id:yoshitake_1201:20191201213932p:plain パスワード変更メールでパスワード変更を行うと、「作成された順序が遅い方」のパスワードが変更されていることがわかりました。
なので、二重登録されたアカウントでパスワード変更を行うと、新しいパスワードではログインできなくなるのです。
そう。
つまり最初の報告である「パスワード変更するとログインできなくなることがある」というバグの原因は、「二重登録されたアカウントにのみ」再現するバグだったのです。
まとめるとこんな感じ。
 ・IEでアカウント登録すると二重で登録されることがある
 ・このアカウントは登録順の早いでログインされる
 ・このアカウントでメール変更を行うと登録順の遅い方でログインされる

ちなみに調査をすすめると以下のこともわかりました。
 ・ 頻度は小さいけどIEだとボタンクリックで二重登録されることがある(めっちゃ頻度低いけど起きた)
 ・ パスワード変更前のパスワードを入力するとログインできる

なので、この「アカウント二重登録バグ」を解決してもらったところ、「パスワード変更するとログインできなくなるバグ」は起きなくなりました。
(もちろん、メールが二通送信されるバグも直してもらいました)

なぜ最初のテストで原因のバグを見つけれなかったのか?

理由は「このブラウザでテストしていなかった」につきます。
もしテストしていたら見つけれた自信はあります。
しかし、テスト前を思い返すと「このブラウザテストする?」「いや対象外なんでいいですよ」といった会話をしていました。
当時の自分は「リソースもないしな…」とそのまま飲み込みました。
今の自分なら「いやいや、IEもやったほうがいいよ!」と言ったり、こっそりやったりすると思いますが、当時は他の事情もあったのでやらなかったと思います。なので防ぐことは無理だったでしょう。

見つけるのに手間取った理由

① 「パスワード変更」という事象に囚われすぎていた。
この部分ばっかり探していたのでなかなか見つけることができなかったです。
原因と事象が離れているというのは難しいですね。

② もう一度設定したらログインできるようになるという報告
この報告、実は状況説明が足りていなかったのです。
このシステムは「パスワード変更を行うと、行ったブラウザでは自動でログインされる」仕様なんです。
ここで報告の「もう一度設定したら」というのは、「ログイン後の画面で」パスワード変更するとログインできるようになるというものでした(後から気づきました)
ログイン後画面ではパスワード変更したときは「登録順の早い方」になっていたようです。
f:id:yoshitake_1201:20191201215026p:plain
なので、ログイン後にパスワード再設定すると早い方でログインできる。
そしてユーザーも一度パスワードを忘れてしまっているから、今度はパスワードを忘れない(にくい)。
このことからこの事象はセルフで解決されていたわけです。
ここの読み違いは難しいですね。

なんで見つけることができたの?

この調査をしたのは2019/10/30(水)の午後でした。
ではその午前中に何をしていたのかというと、JaSST'19 Reviewの予稿集をsae氏と読んでいました(JaSST'19 Reviewは11/1開催)。
この予稿集の中でmiwaさんの「違和感のつかまえ方」のスライド59 が印象に残っていました。
speakerdeck.com

「想定外の問題を見つけるのではなく想定を広げる」(スライド59より)
f:id:yoshitake_1201:20191201204632p:plain

私はモノマネしたくなるタイプなので、この言葉をマネして「メールが二通送信されるバグ」の想定を広げていこうとしていました。
このモノマネがあったから、原因を見つけることができたと思っています。

こう聞くと「こじつけ」や「偶然が続いていただけじゃない?」と思うかもしれません。実際そうなのかもしれません。
でもこのことがきっかけでバグを見つけることができたので、とても良い経験となりました。 想定内のこと(既に見つかったもの)を拡張して、新しい問題を見つける体験をできたと思うのです。
(もちろん、バグの原因が見つかって、そして無事なおってよかったです)

同じバグでも見つけ方がかわる

今回は「パスワード変更」から想定を広げていきました。
その結果見つかった原因は、自分が想定できるバグ(普段のテストをやっていると見つけることができたバグ)と同じ原因でした。
もし、この想定できているテストをやっていれば「パスワード変更できないバグ」には出会わなかったかもしれません(出会う前にアカウント二重登録バグがなおっている可能性が高いので)。
しかし状況の違い、アプローチの違い、考え方の違いなどから「全く違うアプローチ」で想定できるバグを見つける、というのはなかなかに面白いものでした。
原因がわかってしまえば「そりゃそういう動作になるよね」となっちゃいますが、それがわかるまではなかなか大変ですね(笑)

次この事象に出会ったら?

もし、またこの「パスワード変更ページでパスワードを変更したらログインできなくなることがある」の調査をすることがあるなら。
自分は今回の経験から「IEでアカウント登録して二重登録されないか」をテストすると思います。
自分にとっては、今回の経験からこのバグはもう「想定内のこと」になっているのですね。
そう考えると自分の成長を感じれる気がします。

でももしそれでも再現できなかったら?

そのときはまた違和感をつかまえにいくんだろうなぁと思います。

一応

DBで重複不可にしておけば、というご意見がありそうなのですが、別の事情でできなかったんです。
こんな感じで「全部は書けていない」「そして一部脚色した部分」もあります(大筋は変えてないけど細部は少し変えた程度)。 そのあたりはご了承ください。