Skip to Content
テスト駆動開発を学ぶ
book

テスト駆動開発を学ぶ

by Saleem Siddiqui
May 2025
Intermediate to advanced
280 pages
3h 35m
Japanese
O'Reilly Media, Inc.
Content preview from テスト駆動開発を学ぶ

第4章. 懸念の分離

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

「懸念の分離」とは......私が言うところの「ある側面に注意を集中すること」である。それは他の側面を無視することを意味するのではなく、この側面から見れば他の側面は無関係であるという事実を正当に評価することである。それは、一本道であると同時に多本道であるということである。

エドガー・ダイクストラ「科学的思考の役割について

ソースコードが増えた。 言語にもよるが、1つのソースファイルで50〜75行になる。これは、多くのディスプレイ・モニターでは画面一杯に表示され、本書では印刷されたページよりも多い。

次の機能に取りかかる前に、コードのリファクタリングに時間を費やそう。それがこの章と次の3つの章の主題だ。

テスト・コードとプロダクション・コード

ここまで、我々は2つの異なるタイプのコードを書いてきた。

  1. マネー問題を解決するコード。これにはMoneyPortfolio 、そしてそこに含まれるすべての振る舞いが含まれる。これをプロダクション・コードと呼ぶ。

  2. 問題が正しく解決されたことを検証するコード。これには、すべてのテストと、これらのテストをサポートするために必要なコードが含まれる。私たちはこれをテストコードと呼んでいる。

この2つのタイプのコードには共通点がある:同じ言語であること、(今ではおなじみとなったレッド-グリーン-リファクタリングのサイクルを経て)連続して書くこと、そして両方をコード・リポジトリにコミットすることだ。しかし、2種類のコードにはいくつかの重要な違いがある。

一方向依存

テストコードは実運用コードに、少なくとも実運用コードのテストする部分に依存しなければならない。 しかし、逆方向の依存関係はあってはならない。

現在、図4-1に示すように、各言語のコードはすべて1つのファイルになっている。そのため、本番コードからテストコードへの偶発的な依存関係がないことを保証するのは容易ではない。テストコードから本番コードへの暗黙の依存関係がある。これにはいくつかの意味がある:

  1. コードを書くときには、本番コードに誤ってテストコードを使わないように注意しなければならない。

  2. コードを読み取る際には、使用パターンを認識し、また、欠落しているパターン、つまり、本番コードがテストコードを呼び出せないという事実にも気づかなければならない。

One module named 'Everything', containing both test code and production code. The test code implicitly depends on the production code.
図4-1. テストコードと本番コードが同じモジュールにある場合、前者から後者への依存関係は暗黙的である。
重要

テスト・コードはプロダクション・コードに依存するが、逆方向の依存はあってはならない。

本番コードがテストコードに依存している場合、どのような悪い結果が考えられるだろうか? 特に悪いケースでは、テストされたコード・パスが "原始的 "であるのに対して、テストされな かったパスにはバグが多いというような誤解を招く可能性がある。図4-2は、自動車のエンジン制御ユニットの擬似コードの一部である。このコードは、エンジンが排ガス規制を遵守するためにテストされる場合と、エンジンが "現実世界 "で使用される場合とで動作が異なる。

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

はじめての知識グラフ構築ガイド

はじめての知識グラフ構築ガイド

Jesus Barrasa, Jim Webber
初めてのGraphQL ―Webサービスを作って学ぶ新世代API

初めてのGraphQL ―Webサービスを作って学ぶ新世代API

Eve Porcello, Alex Banks, 尾崎 沙耶, あんどうやすし
ユーザーストーリーマッピング

ユーザーストーリーマッピング

Jeff Patton, 川口 恭伸, 長尾 高弘

Publisher Resources

ISBN: 9798341650992