
「ITの現場に入る前に知っておきたいこと」として、ITに関するお仕事の前提知識や、開発の流れ、エンジニアが使っている用語やツールなどを、やさしく解説する本連載。今回のテーマは「テスト」。
テストは開発したシステムが「問題なく動作するか」を確認する作業です。縁の下の力持ち「テスト」の役割や考え方について紹介します。
- テストって必要なの?
- テストの各工程では具体的にどんなことをするの?
- テストとデバッグはどう違うの?
- QAって何をするの?
- 脆弱性診断って何をするの?
- 知っておきたいIT用語〜今回のまとめ
テストって必要なの?
以下の記事(▼)では、開発の「V字モデル」を紹介し、その中で「テスト」という工程があることを解説しました。このテストは、ソフトウェアやシステムに求められる機能が期待どおりに動作するかを確認する作業を指します。

▲開発の「V字モデル」

コンピューターは指示した通りに動くのであれば、期待通りに動くのは当たり前ではないのですか?

その通りです。正しく指示していれば期待通りに動くはずですが、開発者のスキル不足、曖昧な仕様、タイトなスケジュールなどにより、誤った指示をしてしまうことがあります。
プログラマが作成したソースコードに誤った指示が含まれていないかを確認するのがテストだと言えます。ただし、誤った指示をしていなくても利用者の想像とは異なる動作をすることもあります。
一般に、プログラマは仕様書などに定められた通りに実装します。この仕様書では、利用者が想定している操作が書かれています。たとえば、会員登録するときに名前などの情報を入力し、登録ボタンを押すと登録が完了する、ということが該当します。このような動作は「正常系」と呼ばれます。
一方で、以下のような操作をするとどうなるでしょうか?
- 会員登録するときに名前を入力せずに登録ボタンを押す
- 名前としてあり得ないほど長い文字列を入力して登録ボタンを押す
- 特殊文字が含まれる名前を入力して登録ボタンを押す

たしかに、こんなこともあり得ますよね…。

そうなんです。プログラマは、こういった異常時にも正しく動作するように考えなければなりません。ただし、そもそもこういったときの動作が仕様書などに書かれていないこともあるのです。
テストの各工程では具体的にどんなことをするの?
V字モデルでは、単体テストや結合テスト、システムテスト、受け入れテストといった工程があることを解説しました。そして、これらがV字モデルの左側にある要件定義や設計の工程に対応していることも紹介しました。

▲開発の「V字モデル」

テストは最後にまとめて実施してはいけないのでしょうか?

品質向上やリスク低減、コスト管理などの観点から、早い段階でテストすることが求められています。
テストを後回しにすると、不具合の発見が遅れることにより修正コストが高くなる可能性があります。たとえば、家を建てるときに、出来上がってから地盤の問題が発生すると大変です。早い段階で気づいていれば、リスクやコストを抑えられる可能性があります。
当然、遅くなればなるほど、問題が発生したときに手戻りが増加し、納期の遅延にも繋がります。そして、テスト時に人手が集中することで、人材を集められず品質が低下する可能性もあります。
このため早い段階からテストを進めることが求められており、「シフトレフト」と呼ばれています。具体的には静的解析やコードレビュー、テスト駆動開発、自動テストなどの手法が使われます。

「レフト」は左ですよね?

そうです。V字モデルは左から右に流れるので、できるだけ早い段階(左)に移す(シフトする)ことを指した言葉です。
具体的には、単体テストでは1つのプログラムでの動作を確認し、結合テストでは複数のプログラムを結合してテストします。そして、システムテストでは実際のシステム環境で動作させることで問題が発生しないかを確認します。

▲開発の「V字モデル」
このように、小さいレベルからテストをしておくことで、全体としての影響を抑えることがテストの工程を分ける意味です。
テストとデバッグはどう違うの?
プログラマがソースコードを間違えて記述し、仕様書通りに動作しないこともあります。このようなときは「バグ」と呼ばれ、「不具合」や「欠陥」と呼ばれることもあります。このようなバグを取り除くことを「デバッグ」と言います。

テストとデバッグは違うんですか?

はい、テストはバグを検出して、製品が要件を満たすかを評価すること、デバッグはテストなどで検出された欠陥を根本原因から取り除き、修正することだと言えます。
実際には、テストで検出されたバグが報告されると、それをデバッグで修正します。その後、再度テストによって再検証することが一般的です。

テストとデバッグを担当する人は同じなのですか?

同じこともありますが、大規模な開発案件では違うことも多いです。
小規模な開発案件では、開発者が自分でテストやデバッグの作業を進めることが多いものです。しかし、規模が大きくなると複数人で連携することで、自分だけでは気づかない不具合に気づける可能性があります。
そこで、一般的にテストは「テスター」や「QAエンジニア」という職種の担当者が実施することが多いです。一方で、デバッグはプログラムの修正が発生するため、主に開発者が実施し、必要に応じてテスターやQAエンジニアが再現に必要な情報を提供します。

デバッグは、テストや運用でバグが見つかったときに開発者が実施する、ってことですか?

基本的にはそうです。ただし、品質を確保することはチーム全員の責任なので、全員で協力しなければなりません。
QAって何をするの?
テスターは「テスト」を担当する人、QAエンジニアは「QA」を担当する人です。このQAは「Quality Assurance」の略で、「品質保証」と訳されます。

テストも品質を保証するために実施するのではないのですか?

もちろんその通りなのですが、一般にQAはもっと広い意味で使われることが多いです。
開発したシステムは仕様書の通りに動けばよいわけではありません。安定して動作し、高い品質の製品であるという印象がないと、利用者にとっては不満が残る結果になりかねないからです。
そこで、ユーザー目線での品質を保証するために実施される活動全体をQAと呼びます。テストという工程だけを指すのではなく、開発プロセス全体としての設計や改善、標準化やガイドラインの策定、監査やレビュー、品質の計測といったことも含みます。

なるほど。そうすると、テストはQAの一部分だと考えられますね。

そうです。QAは非常に幅が広い考え方なのです。
脆弱性診断って何をするの?
テストやデバッグによって、プログラムが問題なく動作することが確認できれば、それでリリースできると感じるかもしれません。しかし、並行して進めるべき作業があります。それは、「脆弱性診断」です。

テストだけでなく、他の診断も実施するんですか?

これはセキュリティ面からの診断です。
一般的なテストで確認するのは、正規の利用者による使い方です。つまり、発注者などが想定している一般的な使い方です。これで普段の業務においては問題なくシステムを使えます。
ところが、世の中には正規の利用者以外もいます。たとえば、悪意を持ってシステムを突破しようとする攻撃者です。この場合、設計者も想定していないシステムの弱点を狙って攻撃を仕掛けます。

そんな…システムを悪用する人がいるなんて…。

常にあらゆるケースに備えることが求められる世の中です。攻撃者の視点からシステムを見て、そこに問題がないかを調査する必要があるのです。
この脆弱性診断を実施せずにシステムをリリースしてしまうと、攻撃者によって情報を盗み取られる、改ざんされるといった被害が発生するだけでなく、開発したシステムが外部の組織を攻撃する「加害者」になってしまう可能性もあるのです。
このため、設計段階からセキュリティ要件を策定し、実装段階ではツールによる脆弱性診断やセキュリティレビューを実施し、後半では専門家による脆弱性診断を実施するなど、セキュリティ面からのテストも求められています。

多くの段階を踏むことで、安全でよりよいシステムの完成を目指しているんですね。

学校の定期テストや入試などでも準備が重要なのと同じで、システム開発におけるテストも準備が重要です。バグをなくすことは難しくても、できるだけ少なくできるように、多くの人がさまざまな手法を組み合わせて品質を確保しているのです。

知っておきたいIT用語〜 今回のまとめ
ソフトウェアやシステムに求められる機能が期待どおりに動作するかを確認する作業。ソースコードの誤りを探すだけでなく、想定されていない使い方(異常系)に対しても正しく動作するように設計し、それを確認する。
開発の早い段階からテストを進めること。開発の「V字モデル」は左から右に流れることから、テストをできるだけ早い段階(左:レフト)に移す(シフト)という言葉。
テストで検出されたバグ(欠陥)を根本から取り除き、修正すること。大規模な開発では、テストは「テスター」「QAエンジニア」が担当し、デバッグは「開発者」が担当することが多い。
「Quality Assurance」の略で、「品質保証」と訳される。ユーザー目線での品質を保証するために実施される活動全体を指す、幅広い考え方。
悪意を持ってシステムを突破しようとする攻撃者の視点から見て、システムに問題がないかを調査する診断。
▼あわせてチェック!
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピューターを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『Pythonではじめるアルゴリズム入門』『図解まるわかり プログラミングのしくみ』『「技術書」の読書術 達人が教える選び方・読み方・情報発信&共有のコツとテクニック』(翔泳社)、最新刊の『実務で役立つ ログの教科書』(翔泳社)がある。
※本記事に記載されている会社名、製品名はそれぞれ各社の商標および登録商標です。
※本稿の内容は2025年12月時点の情報に基づいています。


