5月19日に、3つ目の仕様スニペット・「003: ログインパスワードの再設定」を公開しました。
2つ目まではわたし自身が作っていたのですが、3つめはかいりさんがネタを提供くださいました!
「テスト設計パターン」「仕様スニペット」って何?という方は、こちらの記事を先にご覧くださいね。
仕様スニペット003: 「ログインパスワードの再設定」
以下の仕様に示されるアカウントロックについて、テスト観点を考えてください。
- メールアドレスを入力すると、そのメールアドレスに再発行URLが送信される。
- 再発行URLにアクセスすると、パスワードを再設定することができる。
- URLは、発行後30分間有効である。
002と比べても、かなりシンプルですよね。仕様スニペットがシンプルであるほど、テスト観点がソリッドになっていくと思うのですが、その分コンテキストが失われて議論しづらいというトレードオフ。。
回答の例
鈴木の場合
わたしの頭に浮かんのは、こんな感じです。
頭に浮かんだ順ではなく、ちょっと整理しています。
ハッピーパス
- 実在する正当なユーザによるハッピーパス
- 再設定したパスワードでログインできるか
- 再設定は複数回行えるか
メールアドレスの有効・無効
- 登録されていないメールアドレスに対しる再設定要求
- 「登録されていないメールアドレスである」情報を開示するかどうかのポリシー確認
- RFCには従っているけど通常は使われない記号の場合も対応できるか
設定パスワードの有効・無効
- パスワードのルールはどうなっているか
- 初期設定時と変更時でルールが違うとバグの予感がする
- 変更「前」と同じパスワードは設定できるかのポリシーも確認したい
URLの有効・無効
- URLが、30分以内は有効で、30分以降は無効になるか
- 厳密な境界値テストはできないけれど、そこまで厳密さはいらないと想定
- URL期限切れ前に再度、再設定要求した場合の挙動
- 先にもらった方のURLは無効化されるのではないか
- 無効化される前に開いておいた画面でパスワード変更できるのか?
- 先にもらった方のURLは無効化されるのではないか
セキュリティ
- 故意に他人のメアドの再設定しようとする攻撃をされても、メアドの所有者に害はないか
みわさんの場合
過去に起きた問題は開発/テストの強力なヒントになります。普段はチケット(Story/Bug)を全文検索しますが #テスト設計パターン 003「パスワード再発行 不具合」でweb検索してみました。「なぜ起きたのか」「どんな設計/実装だと発生するか」「どう試すと見つけられるか」「ここにない問題」を考えます
— miwa (@miwa719) 2024年5月19日
個々の観点も良いのですが、「そのための行動」として過去チケットを検索するというのがとても良いですね。
バグチケットを蓄積してきた組織は、生成AIの普及に伴って強力な”チカラ”を手にするんじゃないかと思います。
以下が、過去事例として出たものとのこと。これを逆引きすればテスト観点にもなりますね。
・パスワードを自動生成する機能を利用すると画面がフリーズする
・パスワード再発行できない
・パスワード再発行してもログインできない
・パスワード再発行が利用できない
・パスワードリセットなど一部のメール送信に失敗していた
・自動ログインせず、ログイン画面になる
・再設定後、ログイン画面でパスワードを入れても認証エラーになる
・特定のブラウザでパスワードの再設定ができない
・言語設定が「日本語」だとパスワードが設定できない
・パスワード再発行のメール配信に大幅な遅延が発生した
・必須ではない項目をパスワード再発行の確認手続き項目に使用していた
この5つ目「メール送信に失敗」で思い出したのですが、送信ドメイン認証をパスしないメールを拒否している場合もあるよなあと。メールの不達ケースは重要なポイントですね。
Cazunari Murahoさんの場合
シンプルだけど、有効期限切れの URL にアクセスした時に、ユーザ向けの画面が表示されるか。
— Cazunari Muraho (@cazu_PR) 2024年5月19日
とか。 https://t.co/j0rBRoL5tC
有効期限切れの URL にアクセスした時に、ユーザ向けの画面が表示されるか
これは基本パターンとして必須ですね。
やまずんさんの場合
今のところ、➀期限切れ ②パスワード再設定に利用 ③別のURL払い出し の3つが出ましたね。この辺は仕様議論するとよさげですね。
— Kazu SUZUKI (@kz_suzuki) 2024年5月19日
・基本的に仕様コピペで確認しますが、再発行したあとのアカウントでのログインとか、再発行を2回した場合に1回目のURLはどうなるかとかは気になりそうです。
・「再設定後にそのURLが無効になるかどうか」は意外とまだないのか
・URLが無効になるきっかけが期限切れ以外にあるのか?(この場合設定した場合は?)
・再発行URL改ざんしたら別の発行URLに飛ぶと草
この2点目でハッとしたのですが、「Aの場合にBとなる」という仕様を見たら、「Bとなるケースはそれ以外にないのか」を考えるというのは良いテスター仕草という感じがしますね。002のアカウントロックでも、似た話がありました。
今回「払い出されたURLが無効になるのはどんなケース?」と考えると、以下のケースがありそうです。
- 30分の期限が切れた
- パスワードの再設定に一度利用された(仕様確認)
- 別のURLが新たに発行された(仕様確認)
𝓜𝓪𝓼𝓪𝔂𝓾𝓴𝓲 𝓣𝓪𝓬𝓱𝓲𝓫𝓪𝓷𝓪さんの場合
絶対にやれないと思いますが、入力されたパスワードが過去に漏洩したパスワードかをダークウェブ検索サービスで検索し警告を促すシステムかどうか。 https://t.co/VsMol3XK1W
— 𝓜𝓪𝓼𝓪𝔂𝓾𝓴𝓲 𝓣𝓪𝓬𝓱𝓲𝓫𝓪𝓷𝓪 (@taiden32) 2024年5月19日
絶対にやれないと思いますが、入力されたパスワードが過去に漏洩したパスワードかをダークウェブ検索サービスで検索し警告を促すシステムかどうか。
これはまったくの想定外でしたね。パスワード設定機能において、こういうのが合ったら面白そうです。
おいでさんの場合
前のパスワードが使えなくなることの確認もしないといけないと思ってる https://t.co/G0gPwoOHcb
— Hideo Oide🍜 (@hide_ramen_san) 2024年5月19日
前のパスワードが使えなくなることの確認もしないといけないと思ってる
シンプルですが、まずハッピーパスの確認観点として必要なものですね。
rinoさんの場合
非機能(≒仕様スニペット外)
— rino (@rino96139031) 2024年5月19日
・複数リクエストで有効なURL
・メールアドレスが存在しなかったときの挙動(公開とイントラで出方変わるはず)
・再発行が要求できる時間間隔
他機能への影響
・ログイン中にパスワード再設定したときのログイン状態
・発行~再設定間で現行パスワードでのログイン https://t.co/2q0dkdf1lD
非機能(≒仕様スニペット外)
・複数リクエストで有効なURL
・メールアドレスが存在しなかったときの挙動(公開とイントラで出方変わるはず)
・再発行が要求できる時間間隔他機能への影響
・ログイン中にパスワード再設定したときのログイン状態
・発行~再設定間で現行パスワードでのログイン
「他機能への影響」が、わたしの思いついた観点では漏れていました。次の画面遷移時の強制ログアウトが正しい気がしますが、仕様確認が必要ですね。
おわりに
仕様をここまでシンプルなものにしても、けっこう観点が出てくるものですねー。一方シンプルなだけに観点の方向性が発散せず、よい例題だなーと思いました。
実はかいりさんはもう1つネタをくれているので、近々004を公開したいと思います!