大層なタイトルをつけてしまいましたが、先日 Twitter に連投したことをブログに残しておきたいだけのエントリーです。(すこしだけ、補足しました)
つい最近「内部設計情報」をプログラマーに聞いて(そういう風に実装してるなら、こっちもテストしないとなー)ということがあったんだけど、ツイートだと複雑すぎて伝わる気がしない。
— miwa (@miwa719) 2018年7月26日
すごーく簡単にして、連投してみるけど、伝わるかな? https://t.co/Xtxwlorf0j
例
— miwa (@miwa719) 2018年7月26日
Buttonを押すとText1〜3に設定した値を登録します。
これまであったA(First)という条件に加えて、機能追加でB(Second)の条件が増えました。
説明用に画面を作った!すごい! pic.twitter.com/tQFNDcfst6
Text1〜3の値の持ち方が気になってプログラマーSさんに聞きました。A、Bを切り替えた時にどう表示してますかって。
— miwa (@miwa719) 2018年7月26日
① Text1〜3に内部変数の値を設定し直す
② B用のText1〜3をもう1セット増やした(ので、切り替えた時に設定し直さない)
③ それ以外
①と②なら、①の方が心配事が増えます。ある程度動作が保証されているAについても、機能追加したBと同等のテストをしたいなと思う。
— miwa (@miwa719) 2018年7月26日
値を設定するところが間違っていたら嫌なので、AとBのText1〜3に全部違う値を設定して、登録後の値1つ1つを丁寧に確認したいです。
「今回、Aについては動作的には何も変わりませんよ」と言われたら、機能追加したBしかテストしないかもしれないし、Aについても「登録できるよね」くらいのテストしかしないかもしれない。
— miwa (@miwa719) 2018年7月26日
でも、作り方(内部設計情報)を知ったら、テストしたいところが変わってくるのを、何度も体験してます。
わたしの場合は、どちらかと言うと内部設計情報を聞いて、テストが増えることが多いかもなあ。で @m_seki に「そこまでやんなくても大丈夫。なぜなら◯◯という素晴らしい機構があって、その心配事は起きないようになってるから」と言われて、やめさせられる。
— miwa (@miwa719) 2018年7月26日
そうは言われても、心配してることが本当に起きないのか、自分の目で見ないと気が済まないときは試しているな…。
— miwa (@miwa719) 2018年7月26日
それでやっぱり心配してる事が起きたじゃん!と言うのは、今のところ無い。
内部設計情報を知ることで、明らかにやる必要のないテストを減らすことはできると思う。時間は有限なので、その中でより価値の高い(この場合は積極的にバグを見つける)テストをするためのヒントにもなるよね。
— miwa (@miwa719) 2018年7月26日
近くにプログラマーがいるなら、心配事を聞いてみるといいと思います。
おしまいです。
今回ツイートしたのは「画面に表示する項目と内部変数の関係」ですが、このように「内部設計情報」を知ることで、心配事が変わる(テストが変わる)のは、わりとよくあります。(だからと言って、なんでもかんでも知りたい、という感じでもないのですが…)
どんなところの「内部設計情報」を知りたいと思うのか。すこし考えてみたのですけど、一つ言えるのは、テストが大変そうなところ(似たような項目が多いとか、何かの種類が多いとか、状態がたくさんあるとか)は、特に知りたいです。*1また、知りたいと思ったときは、すでにその時点で、2種類くらいのやり方を予測*2していることが多いように思います。
ただこれは、プログラマーがどのように設計したのか、を当てることを目的とした予測ではありません。ですので「内部設計情報」を知ることができないときでも、システムやソフトウェアを動かして得られる結果から、それを予測し、テストに活用します。*3
これは、テスターによく見られる習性なのでしょうか?
いつも使っているお気に入りのアプリでも、こんなことをしていますね。(以下のツイートを参照)
Amazonのほしい物リスト
— miwa (@miwa719) 2018年7月8日
検索機能で "ワイン" を探そうとしたんだけど、うまく動かなかった…!!
英数字なら見つけてくれるから、日本語対応、忘れちゃったのかな。
半角記号も嫌みたい。 pic.twitter.com/9NJdhb9tYx
これ Safari でも同じ結果でした。
— miwa (@miwa719) 2018年7月8日
(はじめのはiPhoneアプリ)
UIは違うけど、検索処理のコアな部分は同じところを通ってるのかな。
Amazon社のエンジニアに「内部設計情報」を聞くことはできませんので、動かして得られた結果から「内部設計」を予測しています。(これ、Safariでもうまく動かなかったのですが、そのうまく動かないっぷりがiPhoneアプリと同じだったので、ほっとしました。)
そうそう、秋山さんからこんなコメントをいただいたので、いつかお返事したい。
「内部設計情報を知る(理解する)ためにかかる時間」と「知ることによって減らせたテストで儲けた時間」とのトーレドオフになりますので、
— akiyama924🏝 (@akiyama924) 2018年7月26日
1. 聞く側が事前に知っておくと良いこと
2. 聞く内容(取得すべき内部設計情報)
3. その内部設計情報の活用の仕方
を知りたいと思いました。