テストコードを書くのに技術は要らない〜ノリと勢い、気合と根性〜
Qiitaに書くか迷ったけどなんか違うと思ったから個人ブログにします。
弊社はパッチの出荷サイクルが3ヶ月で、1ヶ月単位で締め切りがある。
つまり1回の出荷に向け3回のイテレーションが存在する。
私は、下っ端のペーペーエンジニアなのだが、21.07〜21.09の間にとあるパッケージ以下にアサート数ベースで軽く200〜300くらいテスト書いた。
っと、言い忘れていだが、Javaがメイン言語である。そしてかなり大規模パッケージシステムである。
ここまでで違和感を感じた方も多くいるだろう。
「え?年間4回しか出荷ないの?」「え?テスト200〜300書いたくらいで偉そうにしてんの?」
て思ったそこのあなた、、健全だと思います!
弊社ではテストコードを書く文化が無いのです。
いや、正確にいうと、テストがなくてもmasterにマージできるし、出荷もできるのです。
最近では一部のプロダクトでは、DX criteriaにのっとり長期目標として全クラス、全モジュールの50%以上にテストコードがある状態を目指して、ムーブメントが起き始め、徐々に他プロダクトに波及し始めている。
参考:
https://dxcriteria.cto-a.org/63c678561a6e449a9dab7f239bae29da
そんな中時代に乗り遅れてる弊社のエンジニアや、できない理由をこじつけてやらないエンジニア、わからないかやって無いエンジニアに向けて私の考えを書いておこうと思う。
200〜300とは言ったが、具体的な数は数えてない&もっといい書き方とかあると思う。
ただ黎明期はとりあえずノリと勢い、気合と根性でいいと思ってる。(スタートアップ企業と同じく)
・書く必要があるかないか
・工数足りるか
あたりは、書いてみてどうにもこうにもやれないなーと思ってから考えることにしている。
※実際意外と書けるし、工数も足りる
ゆえにここ最近は全てのプルリク(または出荷対象全てのクラス)に原則なんらかのテストコードが入った状態である。
新たに生み出したクラスは、ロジックが既存(extract method + move)でも原則全メソッド全カバレッジ。
このくらいのノリと勢いで半年くらい続けて、たまに私より優秀で書けるエンジニアにSOSしてたら、呼吸をするかの如く書けるようにはなると思う。
英語できねーけどプログラムはできる。
それは毎日読み書きしてるから。
※英語はたまにしかやらない。
いいコード書けるようになりたかったら、とにかくまず考えるより書く。書く機会がないなら上司に貰ってください。もしくは勝手に書いていいと思う。
そしてクソみたいなコード書いてレビューでクソほど指摘もらって、毎日毎日少しずつ前進すれば、そのうち「あの人コード書けるよね」になるはず。
あの人は才能があるから書けるんだ。知識があるから書けるんだ。
ある種そうかもしれないが、だとしたら私は例外か?
別に才能もないし、Java始めたのは入社してからだし、大学入学するまで実家にパソコンなんかなかった。
そんな私でもそれなりにテストコードを書いているし、少なく見積もっても、同じプロダクトを開発してるエンジニアの中でも、5本の指が、、、5本の指に入るくらいのレベル感で書けるようになっている。(3〜40人いる)
要するにやるかやらないかだけである。
工夫とか質とか、綺麗なコード書かなきゃとか、偉そうに考える前に、アサート1個書いてからそういうことは言いましょう。
テストコードは重要だけど、やっぱりプロダクトコードと比較すれば、プライオリティは下がる。それゆえに多少クソコードでもいいと思う。最初のうちは。最初のうちはね。
とにかくやるんだよ。
着手は誰にでもできる。技術でもなければスキルでもない(同じか)。
着手して、詰まったら聞く、調べる。
そうやって日進月歩していくしかないと思いますよ。
そのうちめちゃくちゃ普通に書けるようになってますって!最初だけつらいだろうよ?全然自力で書けなくて。
でも書けるようになるからやろうや!
と、まあこれで1人でも「テスト書きたい」「教えてください」「ここどうやったらいいですか?」と聞いてくる人が増えたら幸いです。