*

単体テストの効率化を考える(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)-スタブの自動生成ツール

関連記事

toppers

C言語でEV3開発(23)-モーターの性能確認

どもです。 今回は、EV3に付属しているモーター(Lモーター/Mモーター)の性能について調べてみた

記事を読む

OpenCvLogo

OpenCvによる画像サイズ変更

どもです。 最近、カメラの動画をOpenCvで加工する、ということに挑戦し始めました。 しか

記事を読む

MindStormControl_SprachScreen

EV3開発サポートツール(1)-C#のユーザーコントロール開発

どもです。 突然ですが、今回はC#に関するエントリになります。 具体的には、C#/WPFで、独自

記事を読む

toppers

C言語でEV3開発(24)-APIの実行時間を測定してみた。

どもです。 今回、以前から気になっていた、開発環境/プラットフォームであるTOPPERS HRP2

記事を読む

no image

C言語でEV3開発(8)-opOUTPUT_POWERコマンド

どもです。 今回のエントリーでは、EV3でモーターを動かします。 なお、今回のエントリーでも

記事を読む

raspberry-pi

ライブラリでRasPiのピンにアクセス(2)-SPIのインターフェース追加

どもです。 前回のエントリでは、RaspberryPiのピンをより簡便に使用できるようにするた

記事を読む

source_trail_eye_catch

Sourcetrailを試してみました

どもです。 つい最近、ソースコードの解析に役に立ちそうなツールを見つけたので、ここで少し紹介をしま

記事を読む

toppers

C言語でEV3開発(26)-EV3で機械学習(1)-QLearningをC#に委譲してみた

どもです。 前回の投稿では、Q-LearningをEV3本体に実装してみたら、メモリが足りなくて動

記事を読む

GitHub

Windowsでのカバレッジ測定-OpenCppCoverageを使ってみた(2)

どもです。 前回のエントリーで、OpenCppCoverageというカバレッジを測定する、フリーの

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(8):pigpioを使用したチャタリング対策の問題の対策

どもです。 だいぶ、間が空いてしまいました。 久しぶりの更新です。 前回のエントリーで、「

記事を読む

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="">

think_about_utest
VisualStudioで実行した単体テストの結果の出力(3)-テスト実行からレポート生成までをツールで自動化

どもです。 前々回、前回と、VisualStudio/C#での単

think_about_utest
VisualStudioで実行した単体テストの結果の出力(2)-出力ファイルの読める化

どもです。 前回の続きです。 前回は、VisualStud

think_about_utest
VisualStudioで実行した単体テストの結果の出力(1)-ファイルへの出力

どもです。 最近、VisualStudio/C#でよく開発してい

think_about_utest
単体テストの効率化を考える(6)-スタブの自動生成ツール

どもです。 「単体テストの効率化について考える」の6回目です。

think_about_utest
単体テストの効率化を考える(5)-スタブの自動生成への入力

どもです。 「単体テストの効率化について考える」の5回目です。

→もっと見る

PAGE TOP ↑