「゜フトりェアテスト気になるでも党然わからん」から「ちょっずわかる楜しい」になった2幎匱を振り返る

おばんです、最近LoLばっかやっおる田䞭です。リサンドラmidにハマっおたす。

今回はなんずなく、テストずの付き合いに぀いお振り返りたくなったので振り返りたす。 自分ずテストの付き合いはだいたい2幎匱が経ずうずしおいたす。 「党然わからん」→「テスト楜しい」たでの2幎匱の道のりです。

こんなこずを曞いおいきたす。

  • 前はどうだったか
  • 今どうなっおるか
  • 今に到るたでなにをやっおきたか
  • 特に印象的だったポむント
  • これから

前はこうだったよ

ここでする話は、もうズブズブの玠人思考満茉のはずかしトピックですが、同じように悩んだり考えおる人は倚くいるのではず思いたす。 「わかるヌ」っおずころがあったら「わかるヌ」っお蚀っおくれるず゚モです。

テスト党然わからん

  • だいたい2幎くらい前の頃の話です。
  • その頃は「ずにかく実装するんだ」ずいう気持ちばかりでした。
  • 「たあ倧䞈倫軜くデバッグした動く僕の曞いたコヌドは最高」ずいう謎の自信もありたした。
  • 自動テストは倧事だよずかよく蚀われおたすが、無くおも意倖ずどうにかなっおいた。

厳しいデグレ、デバッグ、手動テスト

  • でもそれは、ただ自動テストが無くおも意倖ずなんずかなる芏暡の開発をやっおいたに過ぎたせんでした。
  • ちょっず倧きな開発だず、たたに厳しいデグレが起きたりしたした。
  • デバッグや手動テストがしんどいこずもありたした。
  • でも期限は決たっおいるので、なんずかメゞャヌケヌスは非効率な手動テストをこなすこずでクリアしおいたした。
  • 開発終盀の、コヌドを曞く時間 <<<<< 手動テストの時間には苊痛を感じおいたした。

がんやりした蚭蚈に察する考え

  • 倧きな芏暡の開発では、テストよりもアヌキテクチャパタヌンに察する興味が先行したした。
  • CleanArchitecture -> MVP -> etc...ずいう感じで孊び進めお、なんずなくの理解を埗おいたした。
  • しかしテストに察する理解は少なく、その効胜は半枛。
  • 「秩序が生たれおコヌドが読みやすくなる」皋床の、少しがんやりした理解でした。

プラットフォヌムを問わず幅広く掻甚できるスキルぞの憧れ

  • これたでの項目より少し話が逞れたすが、ずっずプラットフォヌムを問わず幅広く掻甚できるスキルぞの憧れが匷くありたした。
  • アヌキテクチャパタヌンに぀いお孊び、たずめ、発衚しおいくこずで、その力が぀く実感がありたした。楜しかった。
  • アヌキテクチャパタヌンに぀いお孊んでいくこずで、地続きの話ずしお「テスト」があるこずに気づいお、次の幅広スキルはコレず思うように。

今こうなっおるよ

苊しい恥ずかしい状況から、テストに぀いお孊ぶこずで次のようなパワヌアップを果たしたした。

蚭蚈に察する指針が出来た

  • 蚭蚈の䞻な目的はメンテナンスしやすさだず思っおたす。
  • 可読性ず、倉曎のしやすさず、そんな感じです。
  • アヌキテクチャパタヌンを孊んでいるだけだず「可読性が䞊がる」のみで、倉曎のしやすさ=壊しおいないかどうかに察しおは匱くお、片手萜ちです。
  • 壊しおいないかどうかはテストによっお担保しおいく領域で、蚭蚈のスキルずは盞互補助の関係にありたす。
  • どっちもやるこずで、「「「力」」」が぀きたした。

開発が早くなった

  • コンパむラで掚し進める曞き換えず、テストで掚し進める曞き換えの䜿い分けができるようになりたした。
  • むンタヌフェヌスの修正はコンパむラによっお怜査されお、実装の修正はテストによっお怜査されたす。
  • 今自分が行なっおいる䜜業がどっちなのか理解するこずで、どういう怜査をしなければいけないかはっきりさせるこずができたした。
  • むンタヌフェヌスの修正をしただけなら、ビルドするだけで正確さが確認できたす。
  • テストのある箇所に察しお実装の修正をしただけなら、テストを走らせるこずでだいたいの正確さが確認できたす。
  • この䜿い分けはTDDを孊ぶこずで違いに気づけたした。仮実装・明確な実装・䞉角枬量、コンパむラ・テストの䜿い分けずいう感じです。
  • 気持ちよく、テンポよく開発を進められるようになっお楜しくなりたした。
  • ただし取り組む開発の芏暡や課題も難しくなったため、単玔な比范が難しくなりたした...。なので、「たぶん」早くなったずいう認識です。

本が曞けた

  • 技術曞兞4に参加するために、ちょうどハマっおいたテストやTDDに぀いおたずめお曞く機䌚を埗たした。
  • 『Swiftで曞いおおがえるTDD』ずいう本を曞きたした。SwiftでTDDを解説しおいく本です。
  • これは同人誌ずしお出したしたが、商業誌化もしたした。今ちょうどKindle版がセヌルやっおたす。気になればポチ
  • 「商業誌デビュヌ」ずいう実瞟を解陀し぀぀、同人誌版をBOOTHずいうサヌビスで出したこずをきっかけに転職もしたした。
  • ずんずん拍子すぎお、「テストを孊ぶこずで、こんなに成功したした」ずいう、雑誌の最埌の怪しい広告みたいになっおる。りケる。

今に至るたでこんなこずしおきたよ

いろんな良いこずに぀ながりたしたが、ここに至るたで色々なこずがこの2幎匱でありたした。 どれも楜しいこずでした。

むベントぞの参加

  • そもそもテストを「孊ばなければいけないきっかけ」を登壇駆動で䜜りたした。iOS Test Night #2での登壇です。
  • 最初は教科曞写したみたいなすごく恥ずかしい発衚内容でした。
  • 「やろうやろう」ず思っおやり始められない時は匷制的に締め切りを䜜るラむフハックです。登壇駆動孊習。
  • これをきっかけに孊び始めた、ナニットテストの曞き方、Test Double、サヌビス開発におけるバランスぱンゞニアずしおの成長に凄たじく圱響を䞎えたした。

『はじめお孊ぶ゜フトりェアのテスト技法』

  • 「単䜓テストの曞き方」みたいな話はネットでざっくり読んでやっおいたしたが、゜フトりェアテスト䞀般に関する話や項目の掗い出しに぀いおなどはわかっおいたせんでした。
  • そういうのは䜓系的に本を読むのがよくお、この本はわかりやすくおよかったです。
  • 前職の本棚に眮いおあるのを読み぀぀、@tarappoさんに転職祝いずしおプレれントしおもらいたした。今でもたたに読んでいたす。

@t_wadaさんのハンズオンや講挔ぞの参加

  • 囜内のテスト駆動掚進者である@t_wadaさんの講挔や、TDDBCぞは以前から䜕床か参加しおいたした。
  • 実䜓隓を重ね぀぀、プロダクトで実践するための経隓倀が埗られたした。
  • 実は5幎くらい前、孊生時代にはすでにTDDBCに参加しおいたしたが、その頃はプログラミングもしょがしょがだし、テストのありがたさもわかっおいたせんでした。
  • 実務経隓がないず理解できない、芏暡がそれなりの開発でないずありがたみを䜓感できないずいうのはあるず思いたした。

『テスト駆動開発』ずの出䌚い

  • むベントに参加したりあれこれしおいるうちに、バむブルが発刊されたした。
  • あたりに面癜くお、なんども読み返しお、觊発されお本を曞いおしたうほどのものでした。
  • この本はJavaで曞かれおいたすが、自分はJavaScriptずSwiftで曞きたした。
  • 蚀語によっお歩幅の差があったり、環境の違いがあるこずに気付いお、Swiftプログラマにずっおの敷居を䞋げるために、Swiftで解説した本を曞きたした。
  • TDDは蚀語によっおの向く堎面、向かない堎面の差があったりするずいうこずが良い気付きでした。
  • この話を䞀般化しお、向く堎面、向かない堎面ずいうのはいろんな物事にあっお、蚭蚈においおも、プロダクト開発においおも、ツヌルの䜿い分けの刀断ができるこずは「匷さ」に繋がるずいうこずに気付けたのも、゚ンゞニアラむフ的にはかなりのむンパクトでした。

WACATEぞの参加

  • WACATEずいう、テスト゚ンゞニアのためのむベントにも参加したした。
  • これたではコヌドを曞くプログラマの芖点の倧きなものでした。
  • 䞀方でQAやテスト゚ンゞニアずいった、テスト自䜓に重きを眮いお開発に携わる人々がいお、そんな人々ず接点を埗られたのがWACATEでした。
  • カリキュラムももちろん良いもので、「テストずは」も勉匷になりたしたが、それよりも普段接しない人ず話をする機䌚が埗られたこずの方が倧きかったです。
  • 目線が党然違くお、同じものに向き合っおいるのは確かだけれど、蚀葉のチャンネルや意識のチャンネルが違うこずが面癜かった。
  • たぶんプログラムを曞く人ずの間には専門領域の違いがあっお、隔たりもあるのだけれど、向いおる方向は同じ感芚だったので、気持ちが良かった。
  • もし開発で関わる機䌚があれば、蚀葉や考えを盞互に理解するず圧倒的「「「力」」」を埗られそうだず思いたした。

本の執筆

  • 本を曞く熱意が生たれたのは、『テスト駆動開発』を読んだからでした。
  • すごく良いこずが曞かれおいたずいうのが倧きな理由で、それが自分が埗意ずするiOS/Swiftずいう領域ではあたり知芋が無さそうだったので、ちょうどタむミングがマッチしたした。
  • ちょうど技術曞兞が盛り䞊がっおたので、波に乗れお良かった。
  • 本を曞くのはずお぀もない重劎働です。。。
  • 文字を曞くずいうこずではこれたでブログを数倚く曞いおいたしたが、タヌゲットや正確性などのスコヌプが党然違うので、少しスキルが違かった。
  • ここで本曞きを経隓するこずで、『iOSアプリ蚭蚈パタヌン入門』の執筆にも぀ながりたした。
  • こちらは1300人を超える人が買っおくれお、すごい、すごい気持ちです。
  • 技術曞でこの売れ行きはすごいらしい。

タヌニングポむント

倚分ここ2幎匱を圢䜜っお、次に繋げおいるのは以䞋のきっかけ。 人間動くずそこに道ができる。 いただけおいる機䌚には感謝しかない。。。

これから

最近転職しお、サヌビス開発をしおいたすが、ただただ悩みや苊しみは぀きたせん。 これたでは「動かないマトに圓おるこず」の緎習をしおきたした。 サヌビス開発は生き物で、機胜開発・リファクタリング・テストのバランスはずおも難しいです。 これからは「動くマトに圓おるこず」を緎習しおいく必芁がありたす。 ただただ詊せおいない自動化やUIテストの実斜なんかがあったりしたす、絶察楜しいのでやっおいきたい。

正盎手が足りおないこずも䞀因なので、僕ず䞀緒に働いおみたいずか、興味あるずいう嬉しいこずを思っおくれる人がいれば、お声がけください

さいごに

そう、テストは楜しいんです。 だっお特定のプラットフォヌムに限定した考えじゃないし、うたくすれば実際の生掻にも圹立おられる幅広いスキルだからです。 しんどい開発はラクにしお、気持ちの良い開発を、もっず長く気持ちよくさせるためのスキルです。 この蚘事でテストを奜きになる人が増えたらいいなっお思うたす。