単体テストの効率化を考える(1)-はじめに

2021年1月30日

どもです。

突然ですが、今回から数回にわたって「単体テストの効率化」についてのエントリになります。

0.前提として

世間では、単体テストの効率化ツールというものは、たくさんあります。
特にシステム開発の分野では、有償無償問わず非常に素晴らしいツールが開発されており、非常に効率化が進んでおります。
しかし今回からの記事で対象にするのは、「組み込み開発における単体テストの効率化」です。
「組み込み開発における単体テスト」の分野でも、素晴らしいツールが開発され効率化が進んではいます。
しかし、それらは殆ど全て有償です。
しかも、私のような個人で、しかも趣味で開発を行っている人間には手を出せない額になります…。
そのような状況の中で、趣味で開発している個人の方々の効率化の一助になれればと思い、エントリを書き始めました。
拙いエントリ(何回になるかわかりませんが…)ですが、お付き合い下さい。

1.はじめに

1.1.単体テストとは

単体テストは、JSTQBのソフトウェア標準用語集では、「コンポーネントテスト」とされており、この「コンポーネントテスト」は、

個々のソフトウェアコンポーネントのテスト

として規定されています。
また、この「コンポーネントテスト」の目的は、

・リスクの軽減
・コンポーネントの機能的/非機能的振る舞いが設計および仕様通りであることの検証
・コンポーネント品質に対する信頼の積み上げ
・コンポーネントに存在する欠陥の検出
・欠陥がより高いテストレベルまで見逃されることの防止

とされています。
(出典:JSTQB Foundation Level シラバス)

1.2.単体テストの範囲

先の用語(定義)からは、単体テスト/コンポーネントテストの対象は必ずしも「関数」であるとは限らない、と考えることができます。
しかしながら、実際の開発現場での「単体テスト」の対象は、「関数」単位であることが多いです。
(というか、私がかかわってきた開発案件では、「関数」を対象にしていました。)
従って、このエントリでの「単体テスト」は、基本的に「関数」をテスト対象、テスト範囲として書きます。

2.単体テストの進め方

ここで書く「単体テストの進め方」は、あくまで私個人の「進め方」です。
「正しい単体テストの進め方」ではない…ことはないが、必ずしも「正しい単体テストの進め方」であると断言できるものではないので、その辺を理解・了承したうえで読み進めてください。

2.1.私の進め方

基本的には、「少し実装して、実装した部分をテストする」というやり方です。
think_about_unit_test.txt_001

2.2.単体テストの環境

単体テストを行う際には、「テストドライバ」を実装します。
この「テストドライバ」は、テストの実行環境によって異なります。
それぞれの実行環境に合せて、適した環境を構築する必要があります。
また、必要に応じて「スタブ」を実装します。
最終的に構築される単体テスト環境は、このサイトの「単体テスト(ユニットテスト)の仕組み」で示されたモノとほとんど同じものになります。
このように、単体テストを行うためには、テスト対象となる関数の実装に加えて、さらに作成しなければならないモノがあります。
これらのモノは、テスト対象の関数と比較した場合、そのコード量が多くなりがちです。
これが「単体テストはメンドクサイ…」と思われ、敬遠される原因の一つではないか、と考えています。

3.単体テストの効率化

前章に書いた通り、単体テストで「メンドクサイ」のは環境構築です。
なので、この「環境構築」を効率化することで、単体テストの効率化を進めることができるのではないかと考えます。

3.1.単体テストの環境構築の効率化

単体テストは、その実行環境(具体的にはプラットフォームやフレームワーク)によって「テストドライバ」の実装が変わります。
しかし、実行環境が変わったとしても、「スタブ」の実装は変わりません。
そこでまず、「スタブ」の作成を効率化してみます。

3.2.「スタブ」の作成の効率化…の前に

スタブの作成の効率化ですが、「どのようにして」効率化するかを考えます。
といっても、「スタブの自動作成」による効率化一択です。
しかしそれよりも問題になるのは、「作成されるスタブの内容」です。
即ち、「スタブで行うべき処理」を決める必要があります。

4.続く!

記事が長くなってきました。
このまま書き続けると、エライ長さになってしまいます。
なので、ここで一旦記事を終了します。
今回のエントリでは、

  • 単体テストの効率化は、環境構築を効率化することで進めることができる!
  • 環境構築の効率化は、スタブの自動生成から!

という結論になりました。
次回は、自動生成する「スタブ」について書きます。

ではっ!

続きはコチラ

単体テストの効率化を考える(2)-スタブの戻り値
単体テストの効率化を考える(3)-スタブの引数
単体テストの効率化を考える(4)-スタブの引数(ダブルポインタ)
単体テストの効率化を考える(5)-スタブの自動生成への入力
単体テストの効率化を考える(6)-スタブの自動生成ツール