テストレベル in Google

多くの伝統的なソフトウェアテストでは通常、単体テスト、結合テスト、シスムテストなどによりテストレベルを区分しているかと思います。

一方で、自社の開発スタイルがLEANやAgileのように伝統的なV字型に適合しない場合も多いかと思います。(私が現在勤めているところでは、伝統的な開発スタイルが合していないように。)そのような場合にも関わらず、V字型の時のテストレベルを使い続けると、開発スタイルとテストの間に溝がうまれてくることでしょう。おそらく明らかに。

その中でも、やはりスピードのある開発を継続していくためには、開発者への負荷を高めないながらも、サービスとして不具合というようなリスクを抑えた開発を継続できるよう、テストレベルを区分して、組織として妥当な開発を行うことができる必要があると考えます。Agile開発でいう、開発とテストの結合ですかね。

少し今更感もありますが、Googleにおけるテストレベルに該当する箇所を振り返ってみることにします。

まとめ

Small tests cover a single unit of code in a completely faked environment.

Medium tests cover multiple and interacting units of code in a faked or real environment.

Large tests cover any number of units of code in the actual production environment with real and not faked resources.

以下、Small/Medium/Largeの詳細。

Small tests are mostly (but not always) automated and exercise the code within a single function or module. The focus is on typical functional issues, data corruption, error conditions, and off-by-one mistakes. Small tests are of short duration, usually running in seconds or less. They are most likely written by a SWE, less often by an SET, and hardly ever by TEs. Small tests generally require mocks and faked environments to run. (Mocks and fakes are stubs—substitutes for actual functions—that act as placeholders for dependencies that might not exist, are too buggy to be reliable, or too difficult to emulate error conditions. They are explained in greater detail in later chapters.) TEs rarely write small tests but might run them when they are trying to diagnose a particular failure. The question a small test attempts to answer is, “Does this code do what it is supposed to do?”

Medium tests are usually automated and involve two or more interacting features. The focus is on testing the interaction between features that call each other or interact directly; we call these nearest neighbor functions. SETs drive the development of these tests early in the product cycle as individual features are completed and SWEs are heavily involved in writing, debugging, and maintaining the actual tests. If a medium test fails or breaks, the developer takes care of it autonomously. Later in the development cycle, TEs can execute medium tests either manually (in the event the test is difficult or prohibitively expensive to automate) or with automation. The question a medium test attempts to answer is, “Does a set of near neighbor functions interoperate with each other the way they are supposed to?”

Large tests cover three or more (usually more) features and represent real user scenarios, use real user data sources, and can take hours or even longer to run. There is some concern with overall integration of the features, but large tests tend to be more results-driven, checking that the software satisfies user needs. All three roles are involved in writing large tests and everything from automation to exploratory testing can be the vehicle to accomplish them. The question a large test attempts to answer is, “Does the product operate the way a user would expect and produce the desired results?” End-to-end scenarios that operate on the complete product or service are large tests.

こう考えると、
  • 開発者/開発チームの責任範囲(実装範囲)とその関わりをもとにテストレベルを決め
  • サービスの柱となる機能別や個人情報のようにリスクの高くなる箇所ごとに重要度を定め
  • どのテストレベルではどのようなことに注意してテストを実装/実施することが良いという形で意識できるようになる

ところまでいけるのであれば、GoogleのようなS/M/Lとテストレベルを仮定・定める価値があるのかなと思います。

ほか、いくつかいいなと思ったところを抜粋

Quality≠Test

Quality is not equal to test. Quality is achieved by putting development and testing into a blender and mixing them until one is indistinguishable from the other.

minimum useful productから製品を成長させていく。

Products proceed through canary, development, testing, beta, and release channels before making it to users.

テストは重要だとよく言わますが、単に型に組織を当てはめていくのではなく、組織にあうように型を変形させていくことに注力していきたいですね。

あと、こういうものは言葉だけで終わらず、体現することが必須ですね。
テストエンジニアは実装能力含め、例を作れるように動くことから始めていかないとですね。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中