プログラミングの入り口として自動テストは有効か - マンガ・ロジスティクス・エフ
を読んでの記事です。
前提として、すえむらさんの元記事を否定したいポイント等はなく、自分の視点からも書きたくなったのが2割。最近Qiita書いてないなー何かネタはないかなーと思っていたところでPocketを漁っていて思い出したというのが8割です
普段プログラミングをやらないテストエンジニアやテスターにとっての入り口として有効
本記事タイトルに若干付け加えています。「誰にとっても」自動テストが有効だとは言えないですが、普段のお仕事の中でプログラミングをしていないテストエンジニアやテスターにとって、プログラミングの入り口としての自動テストは有効である、というのが私の考えです。
「根拠は、そういったバックグラウンドのエンジニアにプログラミングを教えた実感からである」なのですが、それではただの感想文なので、もうちょっと思いを書いてみようと思います。
Hello!Worldでは感動しないし「計算機」に計算させても面白くない
tsuemuraさんの記事にあるように、モチベーションが重要であるという点は完全同意です。
が、プログラミング学習のモチベーション、あるいは「これをやりたい」という強い動機を持つことはとてつもなく難しいと思っています。
分厚い入門書を買ってきて、Hello!Worldと画面に表示したり、BMIの計算をさせてみたり。こういったプログラムを書いて「おお!」と感動出来る人はおそらく少数です。実際には「はぁそうですか」で終わってしまう人が大半のはず。
そういった人に、変数とは、関数とは、クラスとは、を教えて「はいダイクストラ法を実装してみましょう」と言っても、挫折するに決まっています。数字を並び替えても、最短経路を求めさせても、それは人間がやればひと目でわかるものを回りくどく機械にやらせているだけ、と思われてしまいます。ここで学習を止めてしまう可能性が非常に高く、ここを越えるのに「自動(システム)テストである点って有効だよね」という話がこの先です。
「画面が動く」は、非常にわかりやすいインタラクティブな体験
Seleniumなどのライブラリを使ってシナリオテストやE2Eテストを自動化する場合、プログラミングによって画面を操作することが多いです。これが、普段テストを行っているプログラミング初学者にとって、計算処理の実装などに比べてわかりやすい。
特に「どの手順までうまくいっていて、どの手順で失敗したのか」がわかりやすい。「OKボタンのクリックに失敗しているみたいだから、40行目まではうまくいっているみたいだ」がわかるのが大きい。
最近の小学生もプログラミング学習などやっていますが、いきなりコンソールに向き合ったりしていません。Scratchでブロック組み合わせてキャラクターを動かすところからやっています。
自分がなにか手を加えると動きが変わる、というインタラクティブな体験をGUIを対象に経験することには意味がある、ということだと捉えています。
かつ、その先に待っているのは「自分が普段やっていることを機械に任せられるかもしれない」という気づきです。ダイクストラ法やユークリッド互除法よりも、自分が楽になる可能性が高い。
手順化されているというハードルの低さ
システムテストを自動化しようという場合(是非はおいておいて)自動化したい操作・オペレーションはわかっているか、自力で作れるはずです。
ここが一般のプログラミングと違う点です。
一般のプログラミングは「手続きを考える」ところから必要で、ここで不慣れな人は詰まります。
GUI操作の自動化をする場合、手続きは(全てではないが)Excelのテスト仕様書に沿って行えばいい。(是非は置いておいて。2度め)
つまり、自分で考えなければいけない部分が少ない。この点も、自動テストがプログラミングの入り口として有効だと考える根拠です。
ここまでかんたんにまとめると、つまり「初学者が投げ出したり、行き詰まったりするポイントが、自動テストのためのプログラミングだったら少なく済むよね。だから有効だと思うよ。」という話しです。
手段の目的化でいいじゃない
「これをやりたい、だからプログラミング」が理想で、このモードに入れた人が爆発的に成長したりすることは確かにあります。し、ストーリーとして非常に魅力的です。ネットを見るとこの手の話がいくつも出てきます。
一方で、魅力的なストーリーの主人公を皆が歩むわけではありません。
自分の経験上、明確な「コレ」がないけれど、機会が与えられてとりあえずテスト自動化(の前提となるプログラミング)を学んでみたところ、「なるほど、これができるということは普段のあれも自動化できそうだぞ」という気づきを得て実践するパターンも少なくありませんでした。
つまり、道具を手にする前はそもそも何がしたいといった発想が出てこない。道具を得て初めて、適用先が思いつくこともあるのです。
ということで、「これがやりたいからプログラミングを学ぼう」ができれば最高ですが、それが特に無い場合でも、テストエンジニアやテスターやQAなどというお仕事をしている方でプログラミングやったこと無いぜって方は、とにかく自動テスト向けにプログラミングを学ぶ、をやってみましょう。
というポジショントークでした。