リファクタリングとQA

リファクタリングとは

リファクタリングとは一般的には「外部から見た時の挙動は変えずに、プログラムの内部構造を整理すること」です。リファクタリングによりシステムを長く使い続けることや、トラブル時の対応を早めることが可能と言われています。

リファクタリング後の挙動が変わっていないことの検証がQAにとって一番難易度が高い

あくまでも個人の見解ですし、状況にもよりますが、新機能の実装やバグの修正確認等よりもリファクタリング後に挙動が変わっていないことの検証の方が難易度が高いです。その理由は以下のテスト観点を注意深く検証する必要があるからです。

リファクタリングのテスト観点 

リファクタリングのテスト観点としては以下が考えられると思います。

1. 外部から見た挙動が変わっていないか

2.リファクタリング前と互換性があるか

3. 内部的に変更は無いか(作成されるデータやtracking等が従来と変わりが無いか)

1. 外部から見た挙動が変わっていないか

言うまでもなくこの部分の確認がメインの作業になると思います。可能であればリファクタリング前の環境とリファクタリング後の環境を見比べて間違い探しをやった方が良いとは思います。

同一ユーザーで複数端末でログインが可能であれば、同一ユーザーでログインして確認すると良いと思います(LINEは複数端末でログインはできない仕様なのかもしれません?そのような場合は検証しにくいかもしれません)。

逆にそれさえできる環境があればそれほど難しい作業ではないと思います。ただし、リファクタリング対象の画面(機能)のパターンの洗い出しに抜け漏れがあれば、それはすなわち検証漏れになります。例えばショッピングのサイトで特定の商品カテゴリーにのみ表示される(アルコールの場合に20歳以上であるかどうかを確認する等)ダイアログ等があることを認識せずにテストケースを作成してしまうと、検証漏れになってしまう事になりかねないので、パターンの洗い出しは最も大切な作業と言えるかもしれません。

また、リファクタリング対象の画面がなんらかのABテスト中であるのであればAグループの挙動もBグループの挙動も変わらないことを確認しないといけないので工数は倍以上になる可能性はあります。その際にも、運用中で影響を受けるABテストの洗い出しに抜け漏れがあればそれはすなわち検証漏れになりますので注意が必要です。

2.リファクタリング前と互換性があるか

リファクタリングしたことによりユーザーに不利益を与えることは最小限にしたいところだと思います。例えばショッピングサイトで検索の履歴をサーバーに保存ではなくクライアントに保存しているとします。そして検索についてリファクタリングをするとします。リファクタリング前に保存していた検索履歴がリファクタリング後に閲覧できるでしょうか?という観点が検証対象になります。

アプリであればリファクアリング後のアプリを新規インストールした状態だけでなく、リファクタリング前のアプリをインストールした状態に、リファクタリング後のアプリをアップデートさせて確認する必要があるかもしれません。

ブラウザであれば対象のページを開いた状態でリファクタリング後のコードをデプロイしてそれからリロードする等の作業が必要になるかもしれません。

3. 内部的に変更は無いか

外部から見た挙動が変わっていなくても意図せず内部的に変更が出てしまうと、サービスの運営に支障が出てしまう可能性があります。

例えばショッピングサイトで商品の閲覧後購入しなかったユーザーに数日後にリマインドのメールを送る機能があるとします。そしてリファクタリングの結果、商品を閲覧したときのTracking eventが大文字から小文字(Item_viewからitem_view)に意図せず変わってしまったとします。そういう事があるとリマインドのメールがリファクタリング後に送られないことになる可能性があります(上記の例でItem_viewをTriggerにしていたりした場合)。

個人的にはリファクタリング後の作成されるデータやTracking eventが変更無いかどうか可能な限り確認する必要があると思います。

まとめ

もし、リファクタリングのQAに対して、プロダクトマネージャーやQAマネージャーが自動テストを実行してパスしたらそれでOKと思っているのであれば、そうではないこと(上記説明したとおり、作成されたデータやTrackingが正しいかどうかを確認する必要があり、それは自動テストでは担保されていない可能性が高いと思われる)を説明して工数を獲得するのに更に難易度が高くなります。もちろんリファクタリングの内容によってはもちろんそれで足りる場合もありますが、多くの場合はそれでは足りないと思います。リファクタリングの内容を理解しテスト計画を立ててステイクホルダーと合意を得るのもリファクタリングの際のQAの大切なプロセスだと思います。

また、そもそもリファクタリングによって稼働していたパスの変更等により自動テストが動かなくなる可能性もあります。それに関しては後に自動テストのコードの方を修正することになるとは思いますが、それもQAにとっては工数の増加になり得ます。

いただいたサポートは生活費にあてます