*

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

公開日: : 最終更新日:2020/05/10 徒然, 開発

どもです。

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

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)-スタブの自動生成ツール

関連記事

iot_raspberrypi_gateway_001_eye_catch

IoT開発(9)
RaspberryPiをIoTゲートウェイにする(III)
MariaDBのセットアップ

どもです。今回のエントリは、以下のエントリの続きです。 IoT開発(7)RaspberryPiをI

記事を読む

Arduino_Logo

フォトレジスタを使ってみた-Arduinoで光検出

どもです。 今回は、タイトル通り「フォトレジスタの使い方」です。 1.フォトレジスタって何?

記事を読む

iot_at_home_eye_catch

IoT開発(1)-ESP-WROOM-02のセットアップ

どもです。 前回までのエントリで、「DHT11の測定結果をクラウドで見える化する」という内容を書い

記事を読む

Splash

EV3開発サポートツール(3)-Ev3Controller

どもです。 今回は、以前ちらりと紹介した、Ev3のモーターの出力を調整するアプリケーションについて

記事を読む

no image

C言語でEV3開発(13)-opOUTPUT_STEP_SPEEDコマンド

どもです。 今回のエントリーは、モーターを動かすコマンドである 「opOUTPUT_STEP_S

記事を読む

RasPi_Qt

Rasbianの新しいバージョンが出たので、クロス環境を更新してみた。(その後)

どもです。 前回、Linux/RaspberryPiでのQt(QtCreator)のクロス開発

記事を読む

toppers

C言語でEV3開発(18)-モードの遷移の設計-コマンド通信処理の準備

 どもです。  今回は、前回紹介したEv3とBluetoothで通信する機能を

記事を読む

Arduino_Logo

1台のarduinno nanoで割込みとSPIの同時使用

どもです。 先日手に入れたArduino nano(中華)で遊んでいます。 今回、この1台のAr

記事を読む

OpenCvLogo

RaspberryPiで物体検出(1)-白線検出への挑戦(1):輪郭検出による白線検出

どもです。 今回は、OpenCvを用いて道路の白線検出について、です。 1.今回の環境 O

記事を読む

toppers

C言語でEV3開発(25)-Q_Learningを実装してみた…が!?

どもです。 今回の内容は、「失敗しました」という内容です。 最近、流行になっている深層学習/

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

arduino_relay_switch_002_ae_g5v_drv_eye_catch
Arduinoでリレースイッチ(2)-AE-G5V-DRV

どもです。 前回の記事では、「フォトカプラリレー」を使用したLチ

tlp222af_001_eye_catch
Arduinoでリレースイッチ(1)-TLP222AF

どもです。 つい先日、やっとのことでリレースイッチを手に入れるこ

c_sharp_eye_catch
外部からMariaDbにアクセスする(2)-C#からMariaDbにアクセスする。

どもです。 前回のエントリで、外部からMariaDbにアクセスす

c_sharp_eye_catch
外部からMariaDbにアクセスする(1)-データベースの設定

どもです。 今回は、Linux上のMariaDbにWindows

think_about_utest
middle_unit
最小…よりも(ほんの)少し大きいテストフレームワーク

どもです。 今回は、単体テストのフレームワークについて書きます。

→もっと見る

PAGE TOP ↑