テストを後回しにしたいときに最低限すること

「市場に早く製品を出したい」「納期が迫っているので最速で製品を完成させたい」という「製品をできる限り早く出したい」というのは間違いではない。
スピードは正義である。
ところで、品質とスピードはトレードオフの関係にはなく、テストを書いて保守性を高めれば、開発スピードは上がる。

https://speakerdeck.com/twada/quality-and-speed-2022-spring-edition?slide=78

テストを書かなければスピードが上がるというわけはないのだが、「後からリファクタするので、短期的にスピードを重視しテストは書かない」という選択をしたとする。
「壊しては作りを繰り返す初期のプロダクト開発で、テストを書くのは無駄に思え、ようやく市場に出せる製品ができたときにテストを作る」というのは何となく分かるが、たぶんテストは作らないだろうなと思う。
そんな未来を想定し、最低限やっておきたいことを紹介する。

コメントを残す

今書いているあなたがわかっていても、後を引き継ぐ人たちには理解できないということを知っておくべき。
js,ts であればJSDocは便利なので、積極的に使っていくと良い。エディタの補完で開発が捗る。

import { users } from "./data";

type GetUsersParams = {
    name?: string
    id?: string
}

/**
 * 引数に指定した条件に合致するユーザーを返す
 * @example
 * const users = getUsers({ name: "太郎" })
 * // => [{ id: "4", name: "山田太郎" }, { id: "8", name: "田中太郎" }]
 */
export const getUsers = (params: GetUsersParams) => {...}

テストに todo を残す

テストを書く暇がないのであれば、テストファイルに todo を書き、「この処理が想定するケース」を書いておく。
そうすることで、この処理が何を想定して作ったものなのかを知ることができ、想定していないケースを知ることでバグなのか仕様なのかも把握できる
例えば、

import * as Feature from "./users";

describe("users", () => {
  describe("getUser", () => {
    it.todo(
      "name引数に文字列を入力すると、nameプロパティで部分一致したuserのリストが返る"
    );
    it.todo("name引数に文字列を入力し該当しなかった場合、空の配列が返る");
  });
});